基于Cortex—M3的自動(dòng)氣象站設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:設(shè)計(jì)了一種氣象數(shù)據(jù)采集系統(tǒng),該系統(tǒng)能采集溫度、濕度、氣壓、風(fēng)速4個(gè)氣象要素,采集的原始數(shù)據(jù)保存在本地SD卡中,同時(shí)對(duì)采集數(shù)據(jù)進(jìn)行數(shù)據(jù)處理,處理后的數(shù)據(jù)打包成氣象數(shù)據(jù)包,使用GPRS模塊將數(shù)據(jù)包通過(guò)GSM網(wǎng)絡(luò)上傳到上位機(jī)。采集系統(tǒng)主控制器使用基于Conex—M3內(nèi)核的STM32處理器,在處理器上移植μc/os—II實(shí)時(shí)操作系統(tǒng)作為軟件平臺(tái),保證了數(shù)據(jù)采集中較好的實(shí)時(shí)性和穩(wěn)定性。在數(shù)據(jù)處理方面,參考地面觀測(cè)規(guī)范對(duì)溫度、濕度、氣壓采用篩除大小值取算術(shù)平均的算法,對(duì)風(fēng)速測(cè)量數(shù)據(jù)采用滑動(dòng)平均算法。經(jīng)實(shí)驗(yàn)驗(yàn)證,系統(tǒng)正常運(yùn)行,測(cè)量精度達(dá)到設(shè)計(jì)要求,具有成本低廉,精度高,具有較好的實(shí)時(shí)性和穩(wěn)定性。
關(guān)鍵詞:Correx-M3;STM32;氣象數(shù)據(jù)采集;μc/os—II
0 引言
隨著我國(guó)氣象事業(yè)的快速發(fā)展,人們對(duì)氣象信息采集的要求也越來(lái)越高,傳統(tǒng)的人工操作和讀數(shù)不僅勞動(dòng)效率低下,而且容易出現(xiàn)人為錯(cuò)誤,已無(wú)法滿足現(xiàn)代氣象觀測(cè)的要求,近些年,電子技術(shù)的快速發(fā)展為氣象數(shù)據(jù)采集技術(shù)的更新和設(shè)備換代提供了條件,Cortex—M3基于ARM公司最新的v7平臺(tái),它的數(shù)據(jù)處理能力是ARM7的兩倍,而功耗只有ARM7的1/3,低廉的價(jià)格使其具有很高的性價(jià)比,在Cortex-M3上移植μc/os—II實(shí)時(shí)操作系統(tǒng)保證了系統(tǒng)的實(shí)時(shí)性和穩(wěn)定性,其具有的諸多優(yōu)點(diǎn)非常適合存自動(dòng)氣象數(shù)據(jù)采集領(lǐng)域使用。
1 系統(tǒng)整體設(shè)計(jì)
整個(gè)氣象數(shù)據(jù)采集系統(tǒng)硬件主要由氣象數(shù)據(jù)采集傳感器模塊、主控制模塊、數(shù)據(jù)存儲(chǔ)模塊、數(shù)據(jù)發(fā)送模塊以及上位機(jī)接收模塊組成。傳感器采集模塊在主控制器的驅(qū)動(dòng)下完成溫度、濕度、氣壓、風(fēng)速數(shù)據(jù)的采集,主控制模塊由使用Cortex—M3內(nèi)核的STM32處理器的最小系統(tǒng)組成,完成對(duì)數(shù)據(jù)采集傳感器模塊的控制以及對(duì)采集數(shù)據(jù)的數(shù)據(jù)處理工作,數(shù)據(jù)處理按照《地面氣象規(guī)范2003》的基本要求執(zhí)行,數(shù)據(jù)存儲(chǔ)模塊使用SD卡來(lái)完成測(cè)量數(shù)據(jù)的本地備份,處理完的數(shù)據(jù)打包成氣象數(shù)據(jù)包使用GPRS模塊通過(guò)GSM網(wǎng)絡(luò)發(fā)送至上位機(jī),上位機(jī)模塊由GPRS模塊和PC組成,上位機(jī)通過(guò)GSM網(wǎng)絡(luò)接收測(cè)量數(shù)據(jù)并進(jìn)一步處理,整體結(jié)構(gòu)如圖1所示。
2 氣象數(shù)據(jù)采集模塊
系統(tǒng)氣壓采集模塊使用BMP085數(shù)字氣壓傳感器,其和STM32通信使用標(biāo)準(zhǔn)的IIC協(xié)議,其內(nèi)置的EEPROM中存儲(chǔ)了補(bǔ)償計(jì)算需要的11個(gè)參數(shù),它們是11個(gè)連續(xù)存儲(chǔ)的16位數(shù)據(jù),存儲(chǔ)地址為0XAA~0XBF,當(dāng)STM32在讀取了測(cè)量數(shù)據(jù)后需要通過(guò)補(bǔ)償計(jì)算得到單位為hpa的測(cè)量數(shù)據(jù)。溫濕度采集模塊使用AM2301數(shù)字溫濕度復(fù)合傳感器,其與STM32通信使用單總線通信協(xié)議,該模塊內(nèi)置了一個(gè)8位的MCU,能自動(dòng)完成數(shù)據(jù)的測(cè)量工作,當(dāng)STM32得到了總線的控制權(quán)后,輸出低電平大于800μs后,AM2301模塊就得到了總線控制權(quán)并輸出80μs的低電平作為響應(yīng)信號(hào)并馬上連續(xù)輸出40bit的測(cè)量數(shù)據(jù),測(cè)量數(shù)據(jù)格式為:40bit=濕度高8位+濕度低8位+溫度高8位+溫度低8位+校驗(yàn)位,其中校驗(yàn)位=濕度高位+濕度低位+溫度高位+溫度低位。風(fēng)速采集模塊使用FY-FS風(fēng)杯式風(fēng)速傳感器,風(fēng)吹動(dòng)風(fēng)杯轉(zhuǎn)動(dòng)會(huì)把風(fēng)速信號(hào)轉(zhuǎn)化為脈沖信號(hào)輸出,STM32使用外部中斷和定時(shí)中斷來(lái)捕獲脈沖頻率并通過(guò)計(jì)算得到實(shí)時(shí)風(fēng)速值。處理完成的數(shù)據(jù)存儲(chǔ)在SD卡中,SD卡是一種存儲(chǔ)容量為1 G的FLASH產(chǎn)品,與STM32通過(guò)SPI協(xié)議通訊。數(shù)據(jù)發(fā)送模塊使用SIM300,利用短信息方式(TEXT模式)通過(guò)GSM網(wǎng)絡(luò)與上位機(jī)通信,STM32使用AT指令通過(guò)串口與SIM300通信,上位機(jī)使用SIM300模塊接收測(cè)量數(shù)據(jù)進(jìn)行下一步處理。
數(shù)據(jù)采集各模塊的關(guān)鍵技術(shù)指標(biāo)見表1,其中溫濕度、氣壓使用平均算法,風(fēng)速使用滑動(dòng)平均算法。
平均算法:測(cè)量一分鐘,每分鐘取樣6次,去掉一個(gè)最大值和最小值,剩下4個(gè)值取算術(shù)平均。
滑動(dòng)平均算法:當(dāng)采集速率每秒一次(t=1),平均期間T=3s,連續(xù)測(cè)量120s,代入下面公式計(jì)算:
式中:n個(gè)樣本值的平均值,:n-1個(gè)樣本值的平均值,Yn:第n個(gè)樣本值,t:采樣時(shí)間,T:平均期間(s)。
3 軟件設(shè)計(jì)
3.1 基于Cortex—M3的μc/os—II移植
μc/os—II是一種典型的具有可剝奪型內(nèi)核的基于任務(wù)優(yōu)先級(jí)調(diào)度的實(shí)時(shí)操作系統(tǒng),可同時(shí)管理多達(dá)64個(gè)任務(wù),由于Cortex—M3不支持32位的ARM指令集,而只支持Thumb-2指令集,這種不向后兼容的方式使Cortex—M3之前平臺(tái)使用的ARM匯編語(yǔ)言程序都不能直接移植到Cort ex—M3上,筆者從μc/os—II和Cortex—M3的內(nèi)核結(jié)構(gòu)研究著手,對(duì)μc/os—II內(nèi)核中INCLUDES.H、OS_CFG.H、OS_CPU.H、OS_CPU_ C.C、OS_CPU_A.ASM五個(gè)與應(yīng)用程序和處理器相關(guān)的文件進(jìn)行修改,在INCLUDES.H中增加了與STM32處理器相關(guān)的外設(shè)寄存器定義和內(nèi)存映射的頭文件,在OS_CFG.H中完成對(duì)μc/os—II內(nèi)核構(gòu)造部分的配置工作,在OS_CPU.H中完成與編譯器相關(guān)數(shù)據(jù)類型的定義、任務(wù)堆棧數(shù)據(jù)類型的定義,以及任務(wù)堆棧方向的設(shè)定工作,在OS_CPU_C.C中根據(jù)Cortex—M3內(nèi)核結(jié)構(gòu)完成系統(tǒng)任務(wù)堆棧結(jié)構(gòu)設(shè)計(jì),由于在C環(huán)境下無(wú)法對(duì)Cortex—M3的寄存器進(jìn)行操作,所以需要在OS_CPU_A.ASM匯編環(huán)境中完成對(duì)臨界區(qū)函數(shù)、上下任務(wù)切換函數(shù)以及中斷服務(wù)子程序中的任務(wù)切換函數(shù)的設(shè)計(jì)工作,在完成以上修改后還需在c環(huán)境下增加系統(tǒng)時(shí)鐘配置和中斷函數(shù)為μc/os—II提供一個(gè)周期性信號(hào)源,在STM32中系統(tǒng)時(shí)鐘是由SysTick定時(shí)器來(lái)提供的。
3.2 μc/os—II任務(wù)設(shè)計(jì)
在μc/os—II架構(gòu)下整體設(shè)計(jì)中需要建立7個(gè)任務(wù),如圖2所示,由于統(tǒng)計(jì)任務(wù)主要作用是計(jì)算當(dāng)前CPU的利用率,需要消耗相當(dāng)?shù)腟TM32內(nèi)部資源,所以為節(jié)約系統(tǒng)資源在這里需要把系統(tǒng)配置OS_TASK_STAT_EN設(shè)置為0,禁止使用統(tǒng)計(jì)任務(wù),空閑任務(wù)是必須的,在沒有其它任務(wù)進(jìn)入就緒狀態(tài)時(shí)投入運(yùn)行,當(dāng)系統(tǒng)開始運(yùn)行前自動(dòng)建立,優(yōu)先級(jí)自動(dòng)配置為最低。由于系統(tǒng)要求在開始多任務(wù)調(diào)度前必須新建一個(gè)任務(wù),所以我們建立了一個(gè)開始任務(wù),開始仟?jiǎng)?wù)作用就是新建另外5個(gè)任務(wù),包括:溫濕度采集任務(wù)、氣壓數(shù)據(jù)采集任務(wù)、風(fēng)速采集任務(wù)、數(shù)據(jù)存儲(chǔ)任務(wù)、數(shù)據(jù)發(fā)送任務(wù),完成這5個(gè)任務(wù)建立后開始任務(wù)就會(huì)自己掛起。完成對(duì)任務(wù)設(shè)計(jì)后還需要對(duì)任務(wù)的優(yōu)先級(jí)進(jìn)行設(shè)置,空閑任務(wù)優(yōu)先級(jí)設(shè)置為最低,風(fēng)速采集任務(wù)頻率最高為1s/次,所以優(yōu)先級(jí)應(yīng)設(shè)置為最高,溫濕度和氣壓采集任務(wù)頻率相同為10s/次,設(shè)置優(yōu)先級(jí)應(yīng)低于風(fēng)速采集任務(wù),數(shù)據(jù)存儲(chǔ)和發(fā)送任務(wù)應(yīng)該都在前面幾個(gè)數(shù)據(jù)采集任務(wù)完成后,所以設(shè)置優(yōu)先級(jí)應(yīng)該更低一些,開始任務(wù)由于在新建任務(wù)后被掛起并不參與任務(wù)調(diào)度,所以優(yōu)先級(jí)可以設(shè)置為次于空閑任務(wù)的最低級(jí)。
3.3 系統(tǒng)整體調(diào)試
在主函數(shù)中需要進(jìn)行初始化工作,主要完成STM32時(shí)鐘系統(tǒng)和μc/os—II時(shí)鐘系統(tǒng)配置,初始化操作系統(tǒng)后新建開始任務(wù)TaskStart后操作系統(tǒng)開始運(yùn)行,在系統(tǒng)剛開始進(jìn)行任務(wù)調(diào)度時(shí)由于只有空閑任務(wù)和開始任務(wù)參與任務(wù)調(diào)度,開始任務(wù)優(yōu)先級(jí)最高所以執(zhí)行開始任務(wù),在開始任務(wù)中又新建氣壓測(cè)量任務(wù)(TaskPre)、溫濕度測(cè)量任務(wù)(TaskTem)、風(fēng)速測(cè)量任務(wù)(TaskV)、數(shù)據(jù)存儲(chǔ)任務(wù)(TaskFlash)、數(shù)據(jù)發(fā)送任務(wù)(TaskSim),完成任務(wù)新建后開始任務(wù)被掛起進(jìn)入休眠狀態(tài),不再參與任務(wù)調(diào)度,根據(jù)事先設(shè)計(jì)好的優(yōu)先級(jí)系統(tǒng)總是執(zhí)行優(yōu)先級(jí)最高的任務(wù),風(fēng)速測(cè)量任務(wù)優(yōu)先級(jí)最高,掛起時(shí)間一到總能得到處理器的使用權(quán),當(dāng)測(cè)量完畢后任務(wù)自動(dòng)掛起不參與任務(wù)調(diào)度,類似的情況,溫濕度測(cè)量、氣壓測(cè)量完成各自測(cè)量數(shù)據(jù)并完成數(shù)據(jù)處理器后也自動(dòng)掛起,并把標(biāo)志為置1表示測(cè)量工作完成,數(shù)據(jù)存儲(chǔ)任務(wù)和數(shù)據(jù)發(fā)送任務(wù)根據(jù)判斷標(biāo)志位決定是否進(jìn)行數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)發(fā)送工作,其主函數(shù)和開始任務(wù)主要代碼如下:
在完成新建任務(wù)后進(jìn)行整體軟件調(diào)試,PC機(jī)通過(guò)USB轉(zhuǎn)串口線接入SIM300模塊后通過(guò)串口調(diào)試助手來(lái)觀察接收到的下位機(jī)測(cè)量的氣象數(shù)據(jù),在這里需要注意的是,在氣壓測(cè)量、溫濕度測(cè)量、風(fēng)速測(cè)量任務(wù)中,為了數(shù)據(jù)讀取和處理方便我們?nèi)〉臄?shù)據(jù)都是整數(shù)的,比如溫度為12.8℃,我們實(shí)際存儲(chǔ)數(shù)據(jù)就是128且是分在三個(gè)變量來(lái)存儲(chǔ)百、十、個(gè)位的,所以為了數(shù)據(jù)的發(fā)送,我們?cè)O(shè)置一個(gè)全局?jǐn)?shù)組data設(shè)計(jì)為一個(gè)數(shù)據(jù)幀來(lái)存儲(chǔ)測(cè)量的數(shù)據(jù),整個(gè)數(shù)據(jù)格式作如下定義:u8 data=濕度數(shù)據(jù)[3位]+溫度數(shù)據(jù)[3位]+氣壓數(shù)據(jù)[5位]+風(fēng)速[3位]來(lái)存儲(chǔ)測(cè)量的數(shù)據(jù),在通過(guò)GPRS發(fā)送數(shù)據(jù)時(shí)只需要通過(guò)AT指令把數(shù)組中的數(shù)據(jù)發(fā)送即可,上位機(jī)接收到數(shù)據(jù)如圖3所示。
4 結(jié)論
本設(shè)計(jì)實(shí)現(xiàn)了μc/os—II在Cortex-M3上的移植并通過(guò)了實(shí)驗(yàn)驗(yàn)證,同時(shí)依照設(shè)計(jì)功能要求在μc/os—II平臺(tái)上完成了氣象數(shù)據(jù)采集系統(tǒng)中各個(gè)任務(wù)的設(shè)計(jì)工作,經(jīng)實(shí)驗(yàn)驗(yàn)證,本系統(tǒng)能正常運(yùn)行,氣象數(shù)據(jù)測(cè)量精度達(dá)到設(shè)計(jì)要求,具有成本低廉,精度高,易于實(shí)現(xiàn)等特點(diǎn),具有較好的實(shí)時(shí)性和穩(wěn)定性。