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