<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 海氣通量自動測量系統(tǒng)設(shè)計*

          海氣通量自動測量系統(tǒng)設(shè)計*

          ——
          作者:國家海洋技術(shù)中心 門雅彬 徐俊臣 劉佳佳 中國海洋大學(xué) 劉金濤 時間:2007-02-04 來源:電子產(chǎn)品世界 收藏

          摘要: 本文介紹了以為控制核心的船載海氣通量自動系統(tǒng)的設(shè)計,給出了數(shù)據(jù)采集設(shè)計,對的一些編程細(xì)節(jié)也做了詳盡的敘述。

          關(guān)鍵詞: 海氣通量;  ;  ; 

          在相互制約和作用的大氣海洋系統(tǒng)中,大氣對海洋的作用主要是動力的,稱為動量通量;海洋對大氣的作用主要是熱力的,稱熱通量。動量通量和熱通量通稱為海氣通量,它是氣候形成和變化的重要機制之一。

          國家十五“863”計劃項目——“船載海氣通量自動系統(tǒng)”,要求使用直接協(xié)方差法來分三個層次測量海氣界面的動量通量,該方法是利用快速響應(yīng)風(fēng)傳感器測量風(fēng)速值的脈動,由獲取的脈動資料的時間序列進行統(tǒng)計相關(guān)平均,獲得海氣界面動量通量。

          測量原理及傳感器組成

          理論上,直接協(xié)方差法測量海氣動量通量只需要快響應(yīng)三維超聲風(fēng)傳感器來測量出風(fēng)速度矢量,并以此來計算風(fēng)應(yīng)力矢量。海氣動量通量τ定義為[1]:

          由于是船載系統(tǒng),要得到真實的三維風(fēng)速值必須剔除船體運動的影響。這些影響來源于以下三個方面:(1)船體的前后顛簸、左右搖擺和航向引起的風(fēng)傳感器即時傾斜;(2)船體的搖擺而帶動風(fēng)傳感器相對于船體參考系角速度的變化;(3)船體相對于地面的移動速度。使用緊耦合系統(tǒng)消除上述因素引起的誤差,真實的海面風(fēng)速Vtrue可以表示為[1]:

          其中Vobs為三維風(fēng)速計相對于船體測得的風(fēng)速矢量,T為由測量坐標(biāo)系到真實風(fēng)速坐標(biāo)系的變換矩陣;Ω為船體相對于自己重心旋轉(zhuǎn)、俯仰和搖擺的三維轉(zhuǎn)動角速度矢量;Vmot是風(fēng)速計重心相對于海面的移動速度矢量,R是三維風(fēng)速計相對于船體的位置矢量。

          因此,系統(tǒng)所需的傳感器除了測量三維風(fēng)速值的三個超聲風(fēng)傳感器外,還需要測量船體運動姿態(tài)的姿態(tài)傳感器、測量船體運動方向的電子羅盤、測量船體位置和運動速度的GPS。其中,姿態(tài)傳感器與羅盤構(gòu)成運動測量單元,每秒采集一次船體運動姿態(tài),包括三維線加速度、三維角速度、橫滾角、俯仰角和航向。以上各傳感器的數(shù)據(jù)輸出形式均為RS-232。

          海氣通量數(shù)據(jù)采集

          數(shù)據(jù)采集部分是船載系統(tǒng)的核心部分,主要完成數(shù)據(jù)的采集、處理、傳輸和過程控制。該部分結(jié)合總體設(shè)計要求,根據(jù)當(dāng)前嵌入式技術(shù)的發(fā)展,以模塊化、高可靠的設(shè)計思想來研制。

          方案選擇

          數(shù)據(jù)采集部分所要完成的主要功能是:單片機按固定時序和頻率采集各傳感器的輸出數(shù)據(jù),經(jīng)過運算和處理后,按照預(yù)定通信協(xié)議以RS-232方式實時地將數(shù)據(jù)以4~20Hz的頻率通過單片機的串行口傳送給PC機,上位PC機進行數(shù)據(jù)存儲和動量通量的計算。

          由于海氣通量數(shù)據(jù)采集系統(tǒng)需要與三個超聲風(fēng)傳感器、電子羅盤、姿態(tài)傳感器、GPS和PC機進行異步串行通信,而一般的單片機至多只有2個串口,因此至少需要擴充5個串口。擴充串口的方法很多,如采用軟件模擬法成本低、易于實現(xiàn),但其采樣頻率低,軟件開銷大、難以保證數(shù)據(jù)的實時性、正確性,而且一般不能模擬過高的波特率。利用串行口擴展串行口,控制簡單,但在多通道模式下,所有子串口工作波特率只能設(shè)置成統(tǒng)一值,不適用于各從機波特率不一致、又要求同時工作的系統(tǒng)。并行口擴展串口方法的功能強大,能提供MODEM控制信號、通訊速度高,實時性好,可以滿足多個串口同時工作的要求。在本系統(tǒng)中,GPS和電子羅盤的輸出速率是1Hz,三維超聲風(fēng)速計和姿態(tài)傳感器的數(shù)據(jù)輸出速率可達20Hz,具有數(shù)據(jù)通訊量大、輸出速率高、數(shù)據(jù)輸出格式多、數(shù)據(jù)爆發(fā)性強的特點,因此優(yōu)選并行口擴展的方法。

          模塊開關(guān)電源輸出5V和12V兩種電壓,12V電壓給測量傳感器供電,5V電源使用電源管理芯片變換成3.3V電源,給GPS模塊、單片機、外部存儲器和串口芯片供電。

          系統(tǒng)硬件框圖如圖1所示。

          圖1  系統(tǒng)框圖

          主控單元設(shè)計

          系統(tǒng)的主控部分采取了如下的設(shè)計方案:單片機采用了Silicon Laboratories公司的高性能微控制器作為數(shù)據(jù)采集和控制的核心。它具有與8051完全兼容的CIP-51微控制器內(nèi)核,采用高速流水線結(jié)構(gòu)(25 MIPS),大多數(shù)指令執(zhí)行時間為1~2 時鐘周期;具有64 KB可在系統(tǒng)編程FLASH 和大容量內(nèi)部SRAM,具有外部存儲器接口;最多可達22個中斷源,這對實時多任務(wù)系統(tǒng)的實現(xiàn)是很重要的。

          雖然C8051F020內(nèi)部有4KB的SRAM,但是對于整個系統(tǒng)數(shù)據(jù)流量來說還是不夠的,因此使用高位端口P5~P7外擴32KB的外部存儲器,采用地址/數(shù)據(jù)線非復(fù)用方式。它占用的I/O空間地址范圍是0x0000~0x7FFF。注意與其他8051不同的是C8051F020內(nèi)部有兩個SFR(EMI0CF和EMI0TC)控制SRAM的讀寫時序,在對SRAM進行操作之前,應(yīng)根據(jù)芯片數(shù)據(jù)手冊配置好這兩個寄存器,否則可能會出現(xiàn)讀寫不正常的現(xiàn)象。

          C8051F020的UART0用于PC機通訊,UART1用于GPS通訊。

          串行口擴展設(shè)計

          如上所述,系統(tǒng)共需要與6個串行設(shè)備通信。而C8051F020只具有兩個串行UART,無法滿足系統(tǒng)的需求。設(shè)計共采用了兩片擴充8個串行口,其中5個串行口分別連接三個三維超聲風(fēng)傳感器、電子羅盤和姿態(tài)傳感器,剩余3個串行口備用。

          ST16C554是EXAR公司生產(chǎn)的帶有FIFO的通用四串口(UART)器件,具有集成度高、使用方便、兼容性強的優(yōu)點。它主要具有兩項功能,一是把從外部設(shè)備接收進來的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù);二是把CPU的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)以利于發(fā)送。一片ST16C554可以提供4個標(biāo)準(zhǔn)UART端口。

          ST16C554的功能特點如下:

          *各帶有16個字節(jié)的發(fā)送/接收FIFO增強型UART??梢源蟠鬁p少對CPU的中斷次數(shù),減少對UART的中斷服務(wù)時間。
          *可以在24MHz的晶體或外部時鐘輸入下使用1.5Mbps發(fā)送和接收速率。在14.7464MHz晶體下,用戶最高可選擇921.6Kbps的數(shù)據(jù)傳輸速率。
          *每個通道具有獨立的發(fā)送、接收、線路狀態(tài)和設(shè)置中斷功能。
          *用戶可編程的波特率發(fā)生器和標(biāo)準(zhǔn)的調(diào)制解調(diào)器接口。
          *四種可選擇的FIFO接收中斷觸發(fā)。

          ST16C554與C8051F020的接口如圖2所示。D0~D7連接單片機的數(shù)據(jù)總線,A0~A1用來選擇ST16C554的內(nèi)部寄存器地址,RD、WR分別接單片機的讀寫信號,總線模式引腳接VCC選擇Intel方式。C8051F020的A12~A14經(jīng)74HC138譯碼后,輸出CS0~CS7所代表的地址范圍分別是:8000~8FFFH,9000~9FFFH,A000~AFFFH,B000~BFFFH,C000~CFFFH,D000~DFFFH,E000~EFFFH,F(xiàn)000~FFFFH。IT0~IT7是U5、U6各路UART的中斷輸出??梢园l(fā)生中斷的條件有:接收錯誤、緩沖區(qū)數(shù)據(jù)有效、發(fā)送緩沖區(qū)空等。

          圖2 ST16C554與C8051F020的接口

          ST16C554中斷引腳輸出IT0~IT7分別接單片機的P1.0~P1.7,且連接到CD4002的兩個四輸入或非門(U15A和U15B)的輸入端,CD4002的兩個輸出分別連接至C8051F020的兩個外部中斷輸入端INT0和INT1,這樣CPU就可在相應(yīng)的中斷服務(wù)程序中查詢P1.0~P1.7的狀態(tài),以確定是哪個UART是中斷源。該部分設(shè)計利用兩個四輸入或非門連接至單片機的外部中斷,解決了單片機中斷資源有限的問題,降低了系統(tǒng)成本。ST16C554工作在FIFO模式,采用中斷方式收發(fā)數(shù)據(jù)并設(shè)置8字節(jié)的硬件收發(fā)送緩沖區(qū),降低了CPU的開銷。

          在本部分的設(shè)計中,還需要有電平轉(zhuǎn)換電路。這是由于C8051F020和經(jīng)ST16C554擴充的UART均是TTL電平,而各傳感器的通訊方式是均是RS-232。因此,必須進行它們之間的電平轉(zhuǎn)換。傳統(tǒng)的方法使用MC1488與MC1489進行電平轉(zhuǎn)換,使用這兩種芯片時,除了系統(tǒng)的+5V電源外,還需要+12V和-12V電源,很不方便而且功耗比較大。為此這里選用5片MAX3232來完成這項工作,連線方式使用簡單三線方式即TXD、RXD、GND。MAX3232是單電源低功耗的電荷泵式RS-232電平轉(zhuǎn)換芯片,在電源電壓3.0~5.0V之間均能正常工作,它的工作電流僅為300mA。

          值得一提的是,系統(tǒng)還設(shè)計了比較完善的串口保護電路。具體實現(xiàn)方法是在MAX3232的RS-232一側(cè)加保護芯片MAX367。MAX367是MAXIM公司的ESD保護芯片,它有兩個限制電壓輸入端V+和V-,當(dāng)信號的電平超過V+或者低于V-時,可自動切斷該路的連接,待故障解除后,又可自動恢復(fù)連接。V+和V-分別是+15V和-15V。在傳感器信號的RS-232信號端還串接了50mA自恢復(fù)保險和雙向TVS管,有效地抑制了瞬變電壓和電流給系統(tǒng)造成的破壞。

          ST16C554編程要點

          ST16C554的控制比較復(fù)雜,使用前應(yīng)充分了解各個寄存器的功能和設(shè)置要點。事實上控制它并不難,關(guān)鍵是準(zhǔn)確把握各控制寄存器的含義,熟悉其控制流程。

          ST16C554具有4個完全相同的端口,各組控制寄存器均是相互獨立的。系統(tǒng)上電后需先對ST 16C554 進行初始化,包括設(shè)置波特率、傳輸數(shù)據(jù)的幀格式、中斷允許位、對FIFO的控制等。對MCU來說,ST16C554相當(dāng)于MCU的外部數(shù)據(jù)存儲器。它的寄存器中有一個寄存器(Scratchpad Register),在初始化之前,可以先讀寫這個寄存器,如果結(jié)果一致,證明單片機與ST16C554接口電路無誤。若不一致,則應(yīng)檢查硬件接口電路或者芯片本身是否損壞。初始化代碼如下:
          XBYTE[BASE_ADDR+LCR] = 0x80;       //向
           LCR寄存器寫0x80,使能波特率設(shè)置XBYTE[BASE_ADDR +DIVLSB] =BAUD_L  ;
           //寫波特率低字節(jié)
          XBYTE[BASE_ADDR +DIVMSB] = BAUD_H;
           //寫波特率高字    XBYTE[BASE_ADDR +LCR] = 0x00;       //禁止波特率設(shè)置
          XBYTE[BASE_ADDR +LCR] = lcr_byte;   
           //設(shè)置數(shù)據(jù)位,停止位,奇偶校驗位
          XBYTE[BASE_ADDR +FCR]=0x87;      
           //使用并清除8字節(jié)FIFO,
          XBYTE[BASE_ADDR +IER]=0x03;      
           //使能發(fā)送和接收中斷

          編程時最好啟用FIFO功能,以減輕CPU中斷系統(tǒng)的負(fù)擔(dān)。FIFO的接收中斷字節(jié)最好設(shè)置在8 字節(jié)左右,不要設(shè)置成16字節(jié)。否則如果CPU在FIFO滿的情況下產(chǎn)生中斷,系統(tǒng)來不及響應(yīng),會產(chǎn)生接收數(shù)據(jù)溢出的危險。

          ST16C554發(fā)生中斷時,CPU轉(zhuǎn)向外部中斷0(或1)服務(wù)程序。在中斷服務(wù)程序中,CPU應(yīng)逐個輪詢P1.0~P1.3(或者P1.4~P1.7)的狀態(tài),如果有任何一個引腳是高電平,則進入相應(yīng)端口的中斷處理程序,處理完畢后,應(yīng)繼續(xù)查詢有無其它端口發(fā)生中斷,以防止端口中斷的遺漏。以外部中斷0服務(wù)程序為例,示例代碼如下:
          IntSource =P1&0x0f;  //讀取中斷源
          while(IntSource!=0)  //ST16C554(U5)有中
             斷發(fā)生
          {
               if(P1^0) //串口A有中斷產(chǎn)生
              IntUart1() ;   //判斷串口A中斷源子
             程序
               if(P1^1)         //串口B有中斷產(chǎn)生
                  IntUart2();  //判斷串口B中斷源子
             程序
                  if(P1^2)        /串口C有中斷產(chǎn)生
                       IntUart3(); //判斷串口C中斷源
             子程序
                     if(P1^3)       //串口D有中斷產(chǎn)生
                      IntUart4();   //判斷串口D中斷源
             子程序
                    IntSource = P1&0x0f; //繼續(xù)讀取中
                  斷源,直至無串口中斷產(chǎn)生
              }

          結(jié)語

          “船載海氣通量自動測量系統(tǒng)”試制成功后,經(jīng)過在西北太平洋近兩個月的海上實驗,取得了大量寶貴海氣通量實驗數(shù)據(jù),實踐證明該數(shù)據(jù)采集系統(tǒng)的設(shè)計是可靠,穩(wěn)定的,該項目已經(jīng)于2005年11月通過863專家組的驗收。

          參考文獻
          1.J.B.EDSON,etc. Direct Covariance Flux Estimates from Mobile Platforms at Sea. Journal of Atmospheric and Oceanic Technology.Vol 15,1998.
          2. Silicon Laboratories.C8051F020/1 Datasheets. 2001.
          3. EXAR Corporation. ST16C554 Datasheets REV.3.10. 1994

          加速度計相關(guān)文章:加速度計原理


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();