海氣通量自動測量系統(tǒng)設(shè)計*
摘要: 本文介紹了以C8051F020為控制核心的船載海氣通量自動測量系統(tǒng)的設(shè)計,給出了數(shù)據(jù)采集設(shè)計,對ST16C554的一些編程細(xì)節(jié)也做了詳盡的敘述。
關(guān)鍵詞: 海氣通量測量; C8051F020; 串口擴(kuò)充; ST16C554
在相互制約和作用的大氣海洋系統(tǒng)中,大氣對海洋的作用主要是動力的,稱為動量通量;海洋對大氣的作用主要是熱力的,稱熱通量。動量通量和熱通量通稱為海氣通量,它是氣候形成和變化的重要機(jī)制之一。
國家十五“863”計劃項(xiàng)目——“船載海氣通量自動測量系統(tǒng)”,要求使用直接協(xié)方差法來分三個層次測量海氣界面的動量通量,該方法是利用快速響應(yīng)風(fēng)傳感器測量風(fēng)速值的脈動,由獲取的脈動資料的時間序列進(jìn)行統(tǒng)計相關(guān)平均,獲得海氣界面動量通量。
測量原理及傳感器組成
理論上,直接協(xié)方差法測量海氣動量通量只需要快響應(yīng)三維超聲風(fēng)傳感器來測量出風(fēng)速度矢量,并以此來計算風(fēng)應(yīng)力矢量。海氣動量通量τ定義為[1]:
由于是船載系統(tǒng),要得到真實(shí)的三維風(fēng)速值必須剔除船體運(yùn)動的影響。這些影響來源于以下三個方面:(1)船體的前后顛簸、左右搖擺和航向引起的風(fēng)傳感器即時傾斜;(2)船體的搖擺而帶動風(fēng)傳感器相對于船體參考系角速度的變化;(3)船體相對于地面的移動速度。使用緊耦合系統(tǒng)消除上述因素引起的誤差,真實(shí)的海面風(fēng)速Vtrue可以表示為[1]:
其中Vobs為三維風(fēng)速計相對于船體測得的風(fēng)速矢量,T為由測量坐標(biāo)系到真實(shí)風(fēng)速坐標(biāo)系的變換矩陣;Ω為船體相對于自己重心旋轉(zhuǎn)、俯仰和搖擺的三維轉(zhuǎn)動角速度矢量;Vmot是風(fēng)速計重心相對于海面的移動速度矢量,R是三維風(fēng)速計相對于船體的位置矢量。
因此,系統(tǒng)所需的傳感器除了測量三維風(fēng)速值的三個超聲風(fēng)傳感器外,還需要測量船體運(yùn)動姿態(tài)的姿態(tài)傳感器、測量船體運(yùn)動方向的電子羅盤、測量船體位置和運(yùn)動速度的GPS。其中,姿態(tài)傳感器與羅盤構(gòu)成運(yùn)動測量單元,每秒采集一次船體運(yùn)動姿態(tài),包括三維線加速度、三維角速度、橫滾角、俯仰角和航向。以上各傳感器的數(shù)據(jù)輸出形式均為RS-232。
海氣通量數(shù)據(jù)采集
數(shù)據(jù)采集部分是船載海氣通量測量系統(tǒng)的核心部分,主要完成數(shù)據(jù)的采集、處理、傳輸和過程控制。該部分結(jié)合總體設(shè)計要求,根據(jù)當(dāng)前嵌入式技術(shù)的發(fā)展,以模塊化、高可靠的設(shè)計思想來研制。
方案選擇
數(shù)據(jù)采集部分所要完成的主要功能是:單片機(jī)按固定時序和頻率采集各傳感器的輸出數(shù)據(jù),經(jīng)過運(yùn)算和處理后,按照預(yù)定通信協(xié)議以RS-232方式實(shí)時地將數(shù)據(jù)以4~20Hz的頻率通過單片機(jī)的串行口傳送給PC機(jī),上位PC機(jī)進(jìn)行數(shù)據(jù)存儲和動量通量的計算。
由于海氣通量數(shù)據(jù)采集系統(tǒng)需要與三個超聲風(fēng)傳感器、電子羅盤、姿態(tài)傳感器、GPS和PC機(jī)進(jìn)行異步串行通信,而一般的單片機(jī)至多只有2個串口,因此至少需要擴(kuò)充5個串口。擴(kuò)充串口的方法很多,如采用軟件模擬法成本低、易于實(shí)現(xiàn),但其采樣頻率低,軟件開銷大、難以保證數(shù)據(jù)的實(shí)時性、正確性,而且一般不能模擬過高的波特率。利用串行口擴(kuò)展串行口,控制簡單,但在多通道模式下,所有子串口工作波特率只能設(shè)置成統(tǒng)一值,不適用于各從機(jī)波特率不一致、又要求同時工作的系統(tǒng)。并行口擴(kuò)展串口方法的功能強(qiáng)大,能提供MODEM控制信號、通訊速度高,實(shí)時性好,可以滿足多個串口同時工作的要求。在本系統(tǒng)中,GPS和電子羅盤的輸出速率是1Hz,三維超聲風(fēng)速計和姿態(tài)傳感器的數(shù)據(jù)輸出速率可達(dá)20Hz,具有數(shù)據(jù)通訊量大、輸出速率高、數(shù)據(jù)輸出格式多、數(shù)據(jù)爆發(fā)性強(qiáng)的特點(diǎn),因此優(yōu)選并行口擴(kuò)展的方法。
模塊開關(guān)電源輸出5V和12V兩種電壓,12V電壓給測量傳感器供電,5V電源使用電源管理芯片變換成3.3V電源,給GPS模塊、單片機(jī)、外部存儲器和串口芯片供電。
系統(tǒng)硬件框圖如圖1所示。
圖1 海氣通量測量系統(tǒng)框圖
主控單元設(shè)計
系統(tǒng)的主控部分采取了如下的設(shè)計方案:單片機(jī)采用了Silicon Laboratories公司的高性能微控制器C8051F020作為數(shù)據(jù)采集和控制的核心。它具有與8051完全兼容的CIP-51微控制器內(nèi)核,采用高速流水線結(jié)構(gòu)(25 MIPS),大多數(shù)指令執(zhí)行時間為1~2 時鐘周期;具有64 KB可在系統(tǒng)編程FLASH 和大容量內(nèi)部SRAM,具有外部存儲器接口;最多可達(dá)22個中斷源,這對實(shí)時多任務(wù)系統(tǒng)的實(shí)現(xiàn)是很重要的。
雖然C8051F020內(nèi)部有4KB的SRAM,但是對于整個系統(tǒng)數(shù)據(jù)流量來說還是不夠的,因此使用高位端口P5~P7外擴(kuò)32KB的外部存儲器,采用地址/數(shù)據(jù)線非復(fù)用方式。它占用的I/O空間地址范圍是0x0000~0x7FFF。注意與其他8051不同的是C8051F020內(nèi)部有兩個SFR(EMI0CF和EMI0TC)控制SRAM的讀寫時序,在對SRAM進(jìn)行操作之前,應(yīng)根據(jù)芯片數(shù)據(jù)手冊配置好這兩個寄存器,否則可能會出現(xiàn)讀寫不正常的現(xiàn)象。
C8051F020的UART0用于PC機(jī)通訊,UART1用于GPS通訊。
串行口擴(kuò)展設(shè)計
如上所述,系統(tǒng)共需要與6個串行設(shè)備通信。而C8051F020只具有兩個串行UART,無法滿足系統(tǒng)的需求。設(shè)計共采用了兩片ST16C554擴(kuò)充8個串行口,其中5個串行口分別連接三個三維超聲風(fēng)傳感器、電子羅盤和姿態(tài)傳感器,剩余3個串行口備用。
ST16C554是EXAR公司生產(chǎn)的帶有FIFO的通用四串口(UART)器件,具有集成度高、使用方便、兼容性強(qiáng)的優(yōu)點(diǎn)。它主要具有兩項(xiàng)功能,一是把從外部設(shè)備接收進(jìn)來的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù);二是把CPU的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)以利于發(fā)送。一片ST16C554可以提供4個標(biāo)準(zhǔn)UART端口。
ST16C554的功能特點(diǎn)如下:
*各帶有16個字節(jié)的發(fā)送/接收FIFO增強(qiáng)型UART??梢源蟠鬁p少對CPU的中斷次數(shù),減少對UART的中斷服務(wù)時間。
*可以在24MHz的晶體或外部時鐘輸入下使用1.5Mbps發(fā)送和接收速率。在14.7464MHz晶體下,用戶最高可選擇921.6Kbps的數(shù)據(jù)傳輸速率。
*每個通道具有獨(dú)立的發(fā)送、接收、線路狀態(tài)和設(shè)置中斷功能。
*用戶可編程的波特率發(fā)生器和標(biāo)準(zhǔn)的調(diào)制解調(diào)器接口。
*四種可選擇的FIFO接收中斷觸發(fā)。
ST16C554與C8051F020的接口如圖2所示。D0~D7連接單片機(jī)的數(shù)據(jù)總線,A0~A1用來選擇ST16C554的內(nèi)部寄存器地址,RD、WR分別接單片機(jī)的讀寫信號,總線模式引腳接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的中斷輸出。可以發(fā)生中斷的條件有:接收錯誤、緩沖區(qū)數(shù)據(jù)有效、發(fā)送緩沖區(qū)空等。
圖2 ST16C554與C8051F020的接口
ST16C554中斷引腳輸出IT0~IT7分別接單片機(jī)的P1.0~P1.7,且連接到CD4002的兩個四輸入或非門(U15A和U15B)的輸入端,CD4002的兩個輸出分別連接至C8051F020的兩個外部中斷輸入端INT0和INT1,這樣CPU就可在相應(yīng)的中斷服務(wù)程序中查詢P1.0~P1.7的狀態(tài),以確定是哪個UART是中斷源。該部分設(shè)計利用兩個四輸入或非門連接至單片機(jī)的外部中斷,解決了單片機(jī)中斷資源有限的問題,降低了系統(tǒng)成本。ST16C554工作在FIFO模式,采用中斷方式收發(fā)數(shù)據(jù)并設(shè)置8字節(jié)的硬件收發(fā)送緩沖區(qū),降低了CPU的開銷。
在本部分的設(shè)計中,還需要有電平轉(zhuǎn)換電路。這是由于C8051F020和經(jīng)ST16C554擴(kuò)充的UART均是TTL電平,而各傳感器的通訊方式是均是RS-232。因此,必須進(jìn)行它們之間的電平轉(zhuǎn)換。傳統(tǒng)的方法使用MC1488與MC1489進(jìn)行電平轉(zhuǎn)換,使用這兩種芯片時,除了系統(tǒng)的+5V電源外,還需要+12V和-12V電源,很不方便而且功耗比較大。為此這里選用5片MAX3232來完成這項(xiàng)工作,連線方式使用簡單三線方式即TXD、RXD、GND。MAX3232是單電源低功耗的電荷泵式RS-232電平轉(zhuǎn)換芯片,在電源電壓3.0~5.0V之間均能正常工作,它的工作電流僅為300mA。
值得一提的是,系統(tǒng)還設(shè)計了比較完善的串口保護(hù)電路。具體實(shí)現(xiàn)方法是在MAX3232的RS-232一側(cè)加保護(hù)芯片MAX367。MAX367是MAXIM公司的ESD保護(hù)芯片,它有兩個限制電壓輸入端V+和V-,當(dāng)信號的電平超過V+或者低于V-時,可自動切斷該路的連接,待故障解除后,又可自動恢復(fù)連接。V+和V-分別是+15V和-15V。在傳感器信號的RS-232信號端還串接了50mA自恢復(fù)保險和雙向TVS管,有效地抑制了瞬變電壓和電流給系統(tǒng)造成的破壞。
ST16C554編程要點(diǎn)
ST16C554的控制比較復(fù)雜,使用前應(yīng)充分了解各個寄存器的功能和設(shè)置要點(diǎn)。事實(shí)上控制它并不難,關(guān)鍵是準(zhǔn)確把握各控制寄存器的含義,熟悉其控制流程。
ST16C554具有4個完全相同的端口,各組控制寄存器均是相互獨(dú)立的。系統(tǒng)上電后需先對ST 16C554 進(jìn)行初始化,包括設(shè)置波特率、傳輸數(shù)據(jù)的幀格式、中斷允許位、對FIFO的控制等。對MCU來說,ST16C554相當(dāng)于MCU的外部數(shù)據(jù)存儲器。它的寄存器中有一個測試寄存器(Scratchpad Register),在初始化之前,可以先讀寫這個測試寄存器,如果結(jié)果一致,證明單片機(jī)與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ù)位,停止位,奇偶校驗(yàn)位
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),如果有任何一個引腳是高電平,則進(jìn)入相應(yīng)端口的中斷處理程序,處理完畢后,應(yīng)繼續(xù)查詢有無其它端口發(fā)生中斷,以防止端口中斷的遺漏。以外部中斷0服務(wù)程序?yàn)槔?,示例代碼如下:
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í)驗(yàn),取得了大量寶貴海氣通量實(shí)驗(yàn)數(shù)據(jù),實(shí)踐證明該數(shù)據(jù)采集系統(tǒng)的設(shè)計是可靠,穩(wěn)定的,該項(xiàng)目已經(jīng)于2005年11月通過863專家組的驗(yàn)收。
參考文獻(xiàn):
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
評論