陳長安+吳建嵐+王升
摘 要: 目前業(yè)內(nèi)普遍使用的直讀式海流計(jì)功耗大,連續(xù)工作時(shí)間短,且無數(shù)據(jù)存儲(chǔ)功能,可靠性不高,在需長時(shí)間進(jìn)行海洋觀測使用時(shí)十分不便。針對(duì)這一情況,為提高直讀式海流計(jì)的可靠性,以AVR單片機(jī)ATmega8為核心處理器,基于水下分機(jī)輸出脈沖信號(hào)形式,采用中斷計(jì)數(shù)的基本原理,重新設(shè)計(jì)開發(fā)了一種低功耗高可靠的海流計(jì)數(shù)據(jù)采集系統(tǒng)。樣機(jī)測試結(jié)果表明:該系統(tǒng)操作簡單、性能穩(wěn)定,可長時(shí)間在水下連續(xù)可靠工作,完全滿足各種海洋作業(yè)中海流測量需求。
關(guān)鍵詞: ATmega8; 海流計(jì); 數(shù)據(jù)采集; 實(shí)時(shí)時(shí)鐘; 鐵電存儲(chǔ)器
中圖分類號(hào): TN911?34; TP274 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2014)16?0111?03
Design of current meter data acquisition system based on AVR single chip computer
CHEN Chang?an, Wu Jian?lan, WANG Sheng
(Unit 91388 of PLA, Zhanjiang 524022, China)
Abstract: Since the common used direct reading current meter has the disadvantages of high?power consumption, short continuous working time, low reliability and no storage function, a new current meter data acquisition system with low?power consumption and high reliability was designed on the basis of basic principle of the counting interrupt to improve the reliability of the direct reading current meter. The AVR microcomputer ATmega8 is adopted as kernel processor in the data acquisition system. The pulse signal form of underwater part is utilized in the system design. The testing results of prototype machine show that the system features easy operation, stable performance and low cost, and can work continuously for a long time under water. It can fully meet the requirements of various current measurements.
Keywords: ATmega8; current meter; data acquisition; real?time clock; ferroelectric memory
旋漿式流速儀是目前水文作業(yè)中普遍使用的測量儀器,其特點(diǎn)是結(jié)構(gòu)簡單,使用方便,價(jià)格低廉。其中,中國海洋大學(xué)海洋儀器廠生產(chǎn)的直讀式海流計(jì)為典型代表,該儀器由100 m負(fù)重電纜、一個(gè)水下探頭和一個(gè)水上監(jiān)控器組成,可以直接讀出溫度、流向和流速數(shù)據(jù)[1?2]。由于研制年代久遠(yuǎn),所用芯片功耗大,連續(xù)工作時(shí)間短,且無數(shù)據(jù)存儲(chǔ),可靠性不高。針對(duì)這一情況,本文從實(shí)際應(yīng)用出發(fā),設(shè)計(jì)了新型海流計(jì)數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)基于AVR單片機(jī)技術(shù),實(shí)時(shí)顯示測量數(shù)據(jù)和時(shí)間信息,具備數(shù)據(jù)快速存儲(chǔ)和事后導(dǎo)出功能。通過合理的電路和程序設(shè)計(jì),降低了系統(tǒng)功耗,提高了儀器的可靠性和方便性。
1 系統(tǒng)總體結(jié)構(gòu)
系統(tǒng)以水下分機(jī)輸出信號(hào)為采集對(duì)象,采用AVR單片機(jī)ATmega8為主控芯片,主要包括數(shù)據(jù)采集、實(shí)時(shí)時(shí)鐘、數(shù)據(jù)存儲(chǔ)三部分,系統(tǒng)總體結(jié)構(gòu)[3]如圖1所示。
圖1 系統(tǒng)總體結(jié)構(gòu)框圖
系統(tǒng)設(shè)計(jì)原理為:根據(jù)水下分機(jī)輸出信號(hào)的形式,設(shè)計(jì)了脈沖鑒寬電路,分辨不同寬度的信號(hào),輸出數(shù)據(jù)類型(溫度、流向、流速)和數(shù)據(jù)值兩路信號(hào)到單片機(jī)。單片機(jī)以外部中斷方式采集數(shù)據(jù)類型和數(shù)據(jù)值,通過串行方式讀取實(shí)時(shí)時(shí)鐘信息,然后對(duì)數(shù)據(jù)值和時(shí)間信息進(jìn)行格式轉(zhuǎn)化,最后寫入存儲(chǔ)芯片并發(fā)送到LCD顯示。測量完畢后,可以通過RS 232串口導(dǎo)出數(shù)據(jù)到PC。
2 系統(tǒng)硬件設(shè)計(jì)
整個(gè)硬件系統(tǒng)以ATmega8單片機(jī)為核心,ATmega8是一款采用低功耗CMOS工藝生產(chǎn)的基于AVR RISC(精簡指令集)結(jié)構(gòu)的8位單片機(jī)[4]。該單片機(jī)將32個(gè)工作寄存器和豐富的指令集聯(lián)結(jié)在一起,所有工作寄存器都與算術(shù)邏輯單元直接相連,一條指令可以同時(shí)訪問2個(gè)獨(dú)立的寄存器,提高了代碼效率,運(yùn)行速度比普通單片機(jī)高出10倍[5]。本系統(tǒng)ATmega8 選用5 V電源,8 MHz外部晶振,采用外部中斷方式采集數(shù)據(jù)。實(shí)時(shí)時(shí)鐘選用獨(dú)立時(shí)鐘芯片DS1302,存儲(chǔ)芯片選用Ramtron公司的鐵電存儲(chǔ)器FM24C64。
2.1 水下分機(jī)輸出信號(hào)形式
水下分機(jī)輸出信號(hào)包括溫度、流向、流速信息,通過同一信號(hào)線以負(fù)脈沖形式發(fā)送到數(shù)據(jù)采集系統(tǒng),如圖2所示。經(jīng)調(diào)試可知,水下分機(jī)信號(hào)有其自身特點(diǎn):信號(hào)產(chǎn)生頻率為1/15 Hz,信號(hào)高電平為 6 V,低電平為0 V,信號(hào)線空閑時(shí)為高電平;每個(gè)周期包括溫度、流向、流速三組信號(hào),按時(shí)間順序依次出現(xiàn),每類信號(hào)以寬負(fù)脈沖信號(hào)起始,隨之而來的窄負(fù)脈沖數(shù)表示信號(hào)值,最后一個(gè)寬負(fù)脈沖表示一個(gè)周期結(jié)束。
圖2 水下探測器傳輸信號(hào)形式
2.2 數(shù)據(jù)采集電路
數(shù)據(jù)采集電路實(shí)際由脈沖鑒寬電路和單片機(jī)外部中斷接口組成,如圖3所示。
圖3 數(shù)據(jù)采集電路原理圖
脈沖鑒寬電路的作用是判別有效信號(hào)段,水下分機(jī)信號(hào)從Input端輸入,輸出type(數(shù)據(jù)類型)信號(hào)和value(數(shù)據(jù)值)信號(hào)到單片機(jī)外部中斷口,單片機(jī)中斷觸發(fā)設(shè)置為下降沿有效。信號(hào)線空閑時(shí),type信號(hào)端為高電平。如果Input端出現(xiàn)寬負(fù)脈沖,三極管Q5截止,電容C10充分放電,兩端電位差為零,上升沿時(shí)三極管Q5導(dǎo)通,type端產(chǎn)生一個(gè)瞬時(shí)低電位,觸發(fā)單片機(jī)外部中斷1;如果Input端出現(xiàn)窄負(fù)脈沖,電容C10沒有充分放電,type端沒有瞬時(shí)低電位產(chǎn)生,不能觸發(fā)單片機(jī)外部中斷1。所以,當(dāng)單片機(jī)外部中斷1被觸發(fā)時(shí),表示上一組信號(hào)結(jié)束,下一組數(shù)據(jù)起始,隨即采集value端輸出的脈沖個(gè)數(shù)就可以獲得相應(yīng)數(shù)據(jù)值大小。容易看出,value端電平變化與Input端同步,觸發(fā)單片機(jī)外部中斷2采集數(shù)據(jù)值。Input端有寬負(fù)脈沖出現(xiàn)時(shí),type端觸發(fā)單片機(jī)外部中斷1,判別已采集數(shù)據(jù)類型并保存數(shù)據(jù)值,同時(shí)開始下一類數(shù)據(jù)采集。流速數(shù)據(jù)采集完后,一個(gè)采集周期結(jié)束。
2.3 實(shí)時(shí)時(shí)鐘模塊
實(shí)時(shí)時(shí)鐘模塊為測量數(shù)據(jù)提供時(shí)間參考,便于數(shù)據(jù)處理和事后結(jié)果分析。若采用單片機(jī)計(jì)時(shí),則耗費(fèi)單片機(jī)資源,且難于實(shí)現(xiàn)斷電情況下保持時(shí)鐘連續(xù)運(yùn)行。基于以上原因,選用了獨(dú)立時(shí)鐘芯片DS1302。該芯片是一款高性能、低功耗時(shí)鐘電路,具有雙電源管腳和對(duì)后背電源涓流充電的功能,主電源關(guān)閉情況下,由紐扣電池繼續(xù)供電,保持時(shí)鐘的連續(xù)運(yùn)行。內(nèi)部含有7 B實(shí)時(shí)時(shí)鐘/日歷寄存器和 31 B靜態(tài)RAM,可以對(duì)2100年以前的年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí)。DS1302采用同步串行方式與單片機(jī)通信,如圖4所示,僅需三線連接:RST(復(fù)位),I/O(數(shù)據(jù)線),SCLK(串行時(shí)鐘)。單片機(jī)以發(fā)送控制字方式讀寫DS1302內(nèi)部寄存器,讀取時(shí)間信息與采集水下分機(jī)信號(hào)同步,兩者合并為一組數(shù)據(jù)存入FM24C64。
2.4 數(shù)據(jù)存儲(chǔ)模塊
系統(tǒng)每15 s接收一組數(shù)據(jù)并保存,每組數(shù)據(jù)包括時(shí)、分、秒、溫度、流向、流速,共9 B。選用容量64 KB的鐵電存儲(chǔ)器FM24C64,最大連續(xù)存儲(chǔ)時(shí)間約3 h,可擦寫次數(shù)1012次,完全滿足存儲(chǔ)空間及性能的要求。
FM24C64通過I2C總線與單片機(jī)通信,如圖4所示。單片機(jī)作為主器件,F(xiàn)M24C64作為從器件。FM24C64的1,2,3腳用于確定從器件地址,該模塊只有一個(gè)從器件,故把它們都接地;SCL(時(shí)鐘線)接單片機(jī)PC5腳,SDA(數(shù)據(jù)線)接單片機(jī)PC4腳。當(dāng)SCL為高電平時(shí),SDA由高電平跳變到低電平定義為“通信開始”信號(hào),此時(shí)單片機(jī)可以讀寫FM24C64,SDA線發(fā)生低電平跳變到高電平定義為“通信結(jié)束”信號(hào),開始和結(jié)束信號(hào)都是由單片機(jī)產(chǎn)生。數(shù)據(jù)采集完畢后,可以一次讀取FM24C64全部數(shù)據(jù)并通過RS 232串口發(fā)送到數(shù)據(jù)處理計(jì)算機(jī)[6]。
3 軟件設(shè)計(jì)
下位機(jī)軟件采用C語言編寫,C語言目前已成為設(shè)計(jì)嵌入式系統(tǒng)的標(biāo)準(zhǔn)語言,它既有普通高級(jí)語言結(jié)構(gòu)化編程、可讀性好、維護(hù)方便的特點(diǎn),又具有低級(jí)語言對(duì)硬
件訪問方便、代碼執(zhí)行效率高的特點(diǎn)[7]。
本系統(tǒng)軟件以ICCAVR作為編譯平臺(tái),采用模塊化設(shè)計(jì),便于維護(hù)升級(jí),可讀性好。軟件主要包括主程序、數(shù)據(jù)采集中斷程序、時(shí)間讀寫、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)顯示、RS 232串口通信等六部分,主程序流程圖[8]如圖5所示。
圖5 主程序流程圖
主程序循環(huán)檢測PC機(jī)指令和新采集數(shù)據(jù),如果接收到時(shí)間設(shè)置或上傳數(shù)據(jù)到PC機(jī)的指令,則掛起當(dāng)前程序,運(yùn)行時(shí)間設(shè)置或上傳數(shù)據(jù)的中斷程序,運(yùn)行完后返回掛起程序;如果檢測到有新采集數(shù)據(jù),則轉(zhuǎn)換數(shù)據(jù)格式為固定位長,寫入FM24C64,進(jìn)入下一個(gè)循環(huán)。
圖6為數(shù)據(jù)采集中斷程序流程圖。每組數(shù)據(jù)以溫度開始,以流速結(jié)束。因溫度數(shù)據(jù)包含4位有效數(shù)字,而流速、流向數(shù)據(jù)都不大于360,故以計(jì)數(shù)值是否大于360來判斷每組數(shù)據(jù)的起始點(diǎn)。每采集一個(gè)數(shù)據(jù)值,就轉(zhuǎn)換一次數(shù)據(jù)類型,采集完一組數(shù)據(jù)后,數(shù)據(jù)類型清零。鑒于篇幅限制,程序源代碼省略。
圖6 數(shù)據(jù)采集中斷程序流程圖
4 結(jié) 語
本文介紹以ATmega8微控制器為核心,包含數(shù)據(jù)采集電路、實(shí)時(shí)時(shí)鐘電路、數(shù)據(jù)存儲(chǔ)和串口通信多種功能的海流計(jì)監(jiān)控系統(tǒng)的實(shí)現(xiàn)方法。實(shí)際使用證明,本系統(tǒng)具有可靠、方便和連續(xù)工作時(shí)間長的特點(diǎn),易于修改移植,有效提高了海流計(jì)的測量能力,對(duì)測控領(lǐng)域利用AVR單片機(jī)設(shè)計(jì)數(shù)據(jù)采集監(jiān)控系統(tǒng)具有一定的借鑒意義。
參考文獻(xiàn)
[1] 張正惕,吳辰,霍艷虹.SLC9?2型直讀式海流計(jì)的工作原理簡述及維護(hù)使用經(jīng)驗(yàn)[J].東海海洋,2000,18(1):61?64.
[2] 宋文洋,吳葆仁,孟昭舫.新型淺海用旋漿式海流計(jì)[J].海洋技術(shù),1988,7(4):42?50.
[3] 王勇.基于AVR單片機(jī)的一體化GPS接收機(jī)設(shè)計(jì)[J].自動(dòng)化儀表,2008,29(2):65?67.
[4] 馬潮,詹衛(wèi)前,耿德根.ATmega8原理及應(yīng)用手冊(cè)[M].北京:清華大學(xué)出版社,2003.
[5] 駱驕,楊振強(qiáng).基于ATmega8的新型電動(dòng)自行車調(diào)速控制系統(tǒng)設(shè)計(jì)[J].國外電子元器件,2005(5):17?19.
[6] 廖平,陳峰,馬洪秋.Delphi環(huán)境下PC機(jī)與AVR單片機(jī)的串行通訊[J].現(xiàn)代電子技術(shù),2008,31(2):123?125.
[7] 沈文,Eagle lee,詹衛(wèi)前.AVR單片機(jī)C語言開發(fā)入門指導(dǎo)[M].北京:清華大學(xué)出版社,2003.
[8] 欒亞群,李炳建,巨永鋒.基于AT89C52單片機(jī)的溫度檢測及顯示設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2008,31(15):130?132.
圖2 水下探測器傳輸信號(hào)形式
2.2 數(shù)據(jù)采集電路
數(shù)據(jù)采集電路實(shí)際由脈沖鑒寬電路和單片機(jī)外部中斷接口組成,如圖3所示。
圖3 數(shù)據(jù)采集電路原理圖
脈沖鑒寬電路的作用是判別有效信號(hào)段,水下分機(jī)信號(hào)從Input端輸入,輸出type(數(shù)據(jù)類型)信號(hào)和value(數(shù)據(jù)值)信號(hào)到單片機(jī)外部中斷口,單片機(jī)中斷觸發(fā)設(shè)置為下降沿有效。信號(hào)線空閑時(shí),type信號(hào)端為高電平。如果Input端出現(xiàn)寬負(fù)脈沖,三極管Q5截止,電容C10充分放電,兩端電位差為零,上升沿時(shí)三極管Q5導(dǎo)通,type端產(chǎn)生一個(gè)瞬時(shí)低電位,觸發(fā)單片機(jī)外部中斷1;如果Input端出現(xiàn)窄負(fù)脈沖,電容C10沒有充分放電,type端沒有瞬時(shí)低電位產(chǎn)生,不能觸發(fā)單片機(jī)外部中斷1。所以,當(dāng)單片機(jī)外部中斷1被觸發(fā)時(shí),表示上一組信號(hào)結(jié)束,下一組數(shù)據(jù)起始,隨即采集value端輸出的脈沖個(gè)數(shù)就可以獲得相應(yīng)數(shù)據(jù)值大小。容易看出,value端電平變化與Input端同步,觸發(fā)單片機(jī)外部中斷2采集數(shù)據(jù)值。Input端有寬負(fù)脈沖出現(xiàn)時(shí),type端觸發(fā)單片機(jī)外部中斷1,判別已采集數(shù)據(jù)類型并保存數(shù)據(jù)值,同時(shí)開始下一類數(shù)據(jù)采集。流速數(shù)據(jù)采集完后,一個(gè)采集周期結(jié)束。
2.3 實(shí)時(shí)時(shí)鐘模塊
實(shí)時(shí)時(shí)鐘模塊為測量數(shù)據(jù)提供時(shí)間參考,便于數(shù)據(jù)處理和事后結(jié)果分析。若采用單片機(jī)計(jì)時(shí),則耗費(fèi)單片機(jī)資源,且難于實(shí)現(xiàn)斷電情況下保持時(shí)鐘連續(xù)運(yùn)行?;谝陨显?,選用了獨(dú)立時(shí)鐘芯片DS1302。該芯片是一款高性能、低功耗時(shí)鐘電路,具有雙電源管腳和對(duì)后背電源涓流充電的功能,主電源關(guān)閉情況下,由紐扣電池繼續(xù)供電,保持時(shí)鐘的連續(xù)運(yùn)行。內(nèi)部含有7 B實(shí)時(shí)時(shí)鐘/日歷寄存器和 31 B靜態(tài)RAM,可以對(duì)2100年以前的年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí)。DS1302采用同步串行方式與單片機(jī)通信,如圖4所示,僅需三線連接:RST(復(fù)位),I/O(數(shù)據(jù)線),SCLK(串行時(shí)鐘)。單片機(jī)以發(fā)送控制字方式讀寫DS1302內(nèi)部寄存器,讀取時(shí)間信息與采集水下分機(jī)信號(hào)同步,兩者合并為一組數(shù)據(jù)存入FM24C64。
2.4 數(shù)據(jù)存儲(chǔ)模塊
系統(tǒng)每15 s接收一組數(shù)據(jù)并保存,每組數(shù)據(jù)包括時(shí)、分、秒、溫度、流向、流速,共9 B。選用容量64 KB的鐵電存儲(chǔ)器FM24C64,最大連續(xù)存儲(chǔ)時(shí)間約3 h,可擦寫次數(shù)1012次,完全滿足存儲(chǔ)空間及性能的要求。
FM24C64通過I2C總線與單片機(jī)通信,如圖4所示。單片機(jī)作為主器件,F(xiàn)M24C64作為從器件。FM24C64的1,2,3腳用于確定從器件地址,該模塊只有一個(gè)從器件,故把它們都接地;SCL(時(shí)鐘線)接單片機(jī)PC5腳,SDA(數(shù)據(jù)線)接單片機(jī)PC4腳。當(dāng)SCL為高電平時(shí),SDA由高電平跳變到低電平定義為“通信開始”信號(hào),此時(shí)單片機(jī)可以讀寫FM24C64,SDA線發(fā)生低電平跳變到高電平定義為“通信結(jié)束”信號(hào),開始和結(jié)束信號(hào)都是由單片機(jī)產(chǎn)生。數(shù)據(jù)采集完畢后,可以一次讀取FM24C64全部數(shù)據(jù)并通過RS 232串口發(fā)送到數(shù)據(jù)處理計(jì)算機(jī)[6]。
3 軟件設(shè)計(jì)
下位機(jī)軟件采用C語言編寫,C語言目前已成為設(shè)計(jì)嵌入式系統(tǒng)的標(biāo)準(zhǔn)語言,它既有普通高級(jí)語言結(jié)構(gòu)化編程、可讀性好、維護(hù)方便的特點(diǎn),又具有低級(jí)語言對(duì)硬
件訪問方便、代碼執(zhí)行效率高的特點(diǎn)[7]。
本系統(tǒng)軟件以ICCAVR作為編譯平臺(tái),采用模塊化設(shè)計(jì),便于維護(hù)升級(jí),可讀性好。軟件主要包括主程序、數(shù)據(jù)采集中斷程序、時(shí)間讀寫、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)顯示、RS 232串口通信等六部分,主程序流程圖[8]如圖5所示。
圖5 主程序流程圖
主程序循環(huán)檢測PC機(jī)指令和新采集數(shù)據(jù),如果接收到時(shí)間設(shè)置或上傳數(shù)據(jù)到PC機(jī)的指令,則掛起當(dāng)前程序,運(yùn)行時(shí)間設(shè)置或上傳數(shù)據(jù)的中斷程序,運(yùn)行完后返回掛起程序;如果檢測到有新采集數(shù)據(jù),則轉(zhuǎn)換數(shù)據(jù)格式為固定位長,寫入FM24C64,進(jìn)入下一個(gè)循環(huán)。
圖6為數(shù)據(jù)采集中斷程序流程圖。每組數(shù)據(jù)以溫度開始,以流速結(jié)束。因溫度數(shù)據(jù)包含4位有效數(shù)字,而流速、流向數(shù)據(jù)都不大于360,故以計(jì)數(shù)值是否大于360來判斷每組數(shù)據(jù)的起始點(diǎn)。每采集一個(gè)數(shù)據(jù)值,就轉(zhuǎn)換一次數(shù)據(jù)類型,采集完一組數(shù)據(jù)后,數(shù)據(jù)類型清零。鑒于篇幅限制,程序源代碼省略。
圖6 數(shù)據(jù)采集中斷程序流程圖
4 結(jié) 語
本文介紹以ATmega8微控制器為核心,包含數(shù)據(jù)采集電路、實(shí)時(shí)時(shí)鐘電路、數(shù)據(jù)存儲(chǔ)和串口通信多種功能的海流計(jì)監(jiān)控系統(tǒng)的實(shí)現(xiàn)方法。實(shí)際使用證明,本系統(tǒng)具有可靠、方便和連續(xù)工作時(shí)間長的特點(diǎn),易于修改移植,有效提高了海流計(jì)的測量能力,對(duì)測控領(lǐng)域利用AVR單片機(jī)設(shè)計(jì)數(shù)據(jù)采集監(jiān)控系統(tǒng)具有一定的借鑒意義。
參考文獻(xiàn)
[1] 張正惕,吳辰,霍艷虹.SLC9?2型直讀式海流計(jì)的工作原理簡述及維護(hù)使用經(jīng)驗(yàn)[J].東海海洋,2000,18(1):61?64.
[2] 宋文洋,吳葆仁,孟昭舫.新型淺海用旋漿式海流計(jì)[J].海洋技術(shù),1988,7(4):42?50.
[3] 王勇.基于AVR單片機(jī)的一體化GPS接收機(jī)設(shè)計(jì)[J].自動(dòng)化儀表,2008,29(2):65?67.
[4] 馬潮,詹衛(wèi)前,耿德根.ATmega8原理及應(yīng)用手冊(cè)[M].北京:清華大學(xué)出版社,2003.
[5] 駱驕,楊振強(qiáng).基于ATmega8的新型電動(dòng)自行車調(diào)速控制系統(tǒng)設(shè)計(jì)[J].國外電子元器件,2005(5):17?19.
[6] 廖平,陳峰,馬洪秋.Delphi環(huán)境下PC機(jī)與AVR單片機(jī)的串行通訊[J].現(xiàn)代電子技術(shù),2008,31(2):123?125.
[7] 沈文,Eagle lee,詹衛(wèi)前.AVR單片機(jī)C語言開發(fā)入門指導(dǎo)[M].北京:清華大學(xué)出版社,2003.
[8] 欒亞群,李炳建,巨永鋒.基于AT89C52單片機(jī)的溫度檢測及顯示設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2008,31(15):130?132.
圖2 水下探測器傳輸信號(hào)形式
2.2 數(shù)據(jù)采集電路
數(shù)據(jù)采集電路實(shí)際由脈沖鑒寬電路和單片機(jī)外部中斷接口組成,如圖3所示。
圖3 數(shù)據(jù)采集電路原理圖
脈沖鑒寬電路的作用是判別有效信號(hào)段,水下分機(jī)信號(hào)從Input端輸入,輸出type(數(shù)據(jù)類型)信號(hào)和value(數(shù)據(jù)值)信號(hào)到單片機(jī)外部中斷口,單片機(jī)中斷觸發(fā)設(shè)置為下降沿有效。信號(hào)線空閑時(shí),type信號(hào)端為高電平。如果Input端出現(xiàn)寬負(fù)脈沖,三極管Q5截止,電容C10充分放電,兩端電位差為零,上升沿時(shí)三極管Q5導(dǎo)通,type端產(chǎn)生一個(gè)瞬時(shí)低電位,觸發(fā)單片機(jī)外部中斷1;如果Input端出現(xiàn)窄負(fù)脈沖,電容C10沒有充分放電,type端沒有瞬時(shí)低電位產(chǎn)生,不能觸發(fā)單片機(jī)外部中斷1。所以,當(dāng)單片機(jī)外部中斷1被觸發(fā)時(shí),表示上一組信號(hào)結(jié)束,下一組數(shù)據(jù)起始,隨即采集value端輸出的脈沖個(gè)數(shù)就可以獲得相應(yīng)數(shù)據(jù)值大小。容易看出,value端電平變化與Input端同步,觸發(fā)單片機(jī)外部中斷2采集數(shù)據(jù)值。Input端有寬負(fù)脈沖出現(xiàn)時(shí),type端觸發(fā)單片機(jī)外部中斷1,判別已采集數(shù)據(jù)類型并保存數(shù)據(jù)值,同時(shí)開始下一類數(shù)據(jù)采集。流速數(shù)據(jù)采集完后,一個(gè)采集周期結(jié)束。
2.3 實(shí)時(shí)時(shí)鐘模塊
實(shí)時(shí)時(shí)鐘模塊為測量數(shù)據(jù)提供時(shí)間參考,便于數(shù)據(jù)處理和事后結(jié)果分析。若采用單片機(jī)計(jì)時(shí),則耗費(fèi)單片機(jī)資源,且難于實(shí)現(xiàn)斷電情況下保持時(shí)鐘連續(xù)運(yùn)行?;谝陨显?,選用了獨(dú)立時(shí)鐘芯片DS1302。該芯片是一款高性能、低功耗時(shí)鐘電路,具有雙電源管腳和對(duì)后背電源涓流充電的功能,主電源關(guān)閉情況下,由紐扣電池繼續(xù)供電,保持時(shí)鐘的連續(xù)運(yùn)行。內(nèi)部含有7 B實(shí)時(shí)時(shí)鐘/日歷寄存器和 31 B靜態(tài)RAM,可以對(duì)2100年以前的年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí)。DS1302采用同步串行方式與單片機(jī)通信,如圖4所示,僅需三線連接:RST(復(fù)位),I/O(數(shù)據(jù)線),SCLK(串行時(shí)鐘)。單片機(jī)以發(fā)送控制字方式讀寫DS1302內(nèi)部寄存器,讀取時(shí)間信息與采集水下分機(jī)信號(hào)同步,兩者合并為一組數(shù)據(jù)存入FM24C64。
2.4 數(shù)據(jù)存儲(chǔ)模塊
系統(tǒng)每15 s接收一組數(shù)據(jù)并保存,每組數(shù)據(jù)包括時(shí)、分、秒、溫度、流向、流速,共9 B。選用容量64 KB的鐵電存儲(chǔ)器FM24C64,最大連續(xù)存儲(chǔ)時(shí)間約3 h,可擦寫次數(shù)1012次,完全滿足存儲(chǔ)空間及性能的要求。
FM24C64通過I2C總線與單片機(jī)通信,如圖4所示。單片機(jī)作為主器件,F(xiàn)M24C64作為從器件。FM24C64的1,2,3腳用于確定從器件地址,該模塊只有一個(gè)從器件,故把它們都接地;SCL(時(shí)鐘線)接單片機(jī)PC5腳,SDA(數(shù)據(jù)線)接單片機(jī)PC4腳。當(dāng)SCL為高電平時(shí),SDA由高電平跳變到低電平定義為“通信開始”信號(hào),此時(shí)單片機(jī)可以讀寫FM24C64,SDA線發(fā)生低電平跳變到高電平定義為“通信結(jié)束”信號(hào),開始和結(jié)束信號(hào)都是由單片機(jī)產(chǎn)生。數(shù)據(jù)采集完畢后,可以一次讀取FM24C64全部數(shù)據(jù)并通過RS 232串口發(fā)送到數(shù)據(jù)處理計(jì)算機(jī)[6]。
3 軟件設(shè)計(jì)
下位機(jī)軟件采用C語言編寫,C語言目前已成為設(shè)計(jì)嵌入式系統(tǒng)的標(biāo)準(zhǔn)語言,它既有普通高級(jí)語言結(jié)構(gòu)化編程、可讀性好、維護(hù)方便的特點(diǎn),又具有低級(jí)語言對(duì)硬
件訪問方便、代碼執(zhí)行效率高的特點(diǎn)[7]。
本系統(tǒng)軟件以ICCAVR作為編譯平臺(tái),采用模塊化設(shè)計(jì),便于維護(hù)升級(jí),可讀性好。軟件主要包括主程序、數(shù)據(jù)采集中斷程序、時(shí)間讀寫、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)顯示、RS 232串口通信等六部分,主程序流程圖[8]如圖5所示。
圖5 主程序流程圖
主程序循環(huán)檢測PC機(jī)指令和新采集數(shù)據(jù),如果接收到時(shí)間設(shè)置或上傳數(shù)據(jù)到PC機(jī)的指令,則掛起當(dāng)前程序,運(yùn)行時(shí)間設(shè)置或上傳數(shù)據(jù)的中斷程序,運(yùn)行完后返回掛起程序;如果檢測到有新采集數(shù)據(jù),則轉(zhuǎn)換數(shù)據(jù)格式為固定位長,寫入FM24C64,進(jìn)入下一個(gè)循環(huán)。
圖6為數(shù)據(jù)采集中斷程序流程圖。每組數(shù)據(jù)以溫度開始,以流速結(jié)束。因溫度數(shù)據(jù)包含4位有效數(shù)字,而流速、流向數(shù)據(jù)都不大于360,故以計(jì)數(shù)值是否大于360來判斷每組數(shù)據(jù)的起始點(diǎn)。每采集一個(gè)數(shù)據(jù)值,就轉(zhuǎn)換一次數(shù)據(jù)類型,采集完一組數(shù)據(jù)后,數(shù)據(jù)類型清零。鑒于篇幅限制,程序源代碼省略。
圖6 數(shù)據(jù)采集中斷程序流程圖
4 結(jié) 語
本文介紹以ATmega8微控制器為核心,包含數(shù)據(jù)采集電路、實(shí)時(shí)時(shí)鐘電路、數(shù)據(jù)存儲(chǔ)和串口通信多種功能的海流計(jì)監(jiān)控系統(tǒng)的實(shí)現(xiàn)方法。實(shí)際使用證明,本系統(tǒng)具有可靠、方便和連續(xù)工作時(shí)間長的特點(diǎn),易于修改移植,有效提高了海流計(jì)的測量能力,對(duì)測控領(lǐng)域利用AVR單片機(jī)設(shè)計(jì)數(shù)據(jù)采集監(jiān)控系統(tǒng)具有一定的借鑒意義。
參考文獻(xiàn)
[1] 張正惕,吳辰,霍艷虹.SLC9?2型直讀式海流計(jì)的工作原理簡述及維護(hù)使用經(jīng)驗(yàn)[J].東海海洋,2000,18(1):61?64.
[2] 宋文洋,吳葆仁,孟昭舫.新型淺海用旋漿式海流計(jì)[J].海洋技術(shù),1988,7(4):42?50.
[3] 王勇.基于AVR單片機(jī)的一體化GPS接收機(jī)設(shè)計(jì)[J].自動(dòng)化儀表,2008,29(2):65?67.
[4] 馬潮,詹衛(wèi)前,耿德根.ATmega8原理及應(yīng)用手冊(cè)[M].北京:清華大學(xué)出版社,2003.
[5] 駱驕,楊振強(qiáng).基于ATmega8的新型電動(dòng)自行車調(diào)速控制系統(tǒng)設(shè)計(jì)[J].國外電子元器件,2005(5):17?19.
[6] 廖平,陳峰,馬洪秋.Delphi環(huán)境下PC機(jī)與AVR單片機(jī)的串行通訊[J].現(xiàn)代電子技術(shù),2008,31(2):123?125.
[7] 沈文,Eagle lee,詹衛(wèi)前.AVR單片機(jī)C語言開發(fā)入門指導(dǎo)[M].北京:清華大學(xué)出版社,2003.
[8] 欒亞群,李炳建,巨永鋒.基于AT89C52單片機(jī)的溫度檢測及顯示設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2008,31(15):130?132.