徐菁菁張 宇*楊俊清王月柔
(1.南昌大學前湖學院,江西南昌 330031;2.南昌大學信息工程學院,江西南昌 330031)
隨著計算機技術和微電子技術的不斷發(fā)展,嵌入式實時操作系統(tǒng)應用的領域越來越廣泛[1]。傳統(tǒng)的開發(fā)方法控制單一,效率低,而FreeRTOS 嵌入式實時操作系統(tǒng)可實現(xiàn)用戶自主配置內(nèi)核功能且多平臺支持,該操作系統(tǒng)經(jīng)長時間的更新已經(jīng)較完善[2-3]。FreeRTOS 支持多任務,可采用搶占式和時間片輪轉(zhuǎn)混合的調(diào)度機制,縮短程序運行時間,低功耗tickless 模式降低系統(tǒng)功耗,極大地增加系統(tǒng)電源使用壽命,F(xiàn)reeRTOS 操作系統(tǒng)可以更好地保證程序運行可靠性和實時性[4-5]。
同時基于車輛健康狀態(tài)監(jiān)測的需求日益增加[6],提出基于FreeRTOS 的車輛狀態(tài)監(jiān)測系統(tǒng),在FreeRTOS 系統(tǒng)下建立系統(tǒng)運行指示、信息采集、發(fā)送數(shù)據(jù)包至物聯(lián)平臺等任務,通過對任務優(yōu)先級設定實現(xiàn)任務切換,保證了系統(tǒng)的實時性,同時設置低功耗模式降低功耗。實際測試表明,系統(tǒng)實現(xiàn)了車輛狀態(tài)的實時監(jiān)測。
車輛狀態(tài)監(jiān)測系統(tǒng)的系統(tǒng)功能結(jié)構(gòu)框圖如圖1所示。車輛狀態(tài)監(jiān)測系統(tǒng)以STM32 單片機為核心,還包含數(shù)據(jù)采集模塊、通信模塊、電源模塊、云平臺顯示等組成部分[7]。
圖1 系統(tǒng)功能結(jié)構(gòu)框圖
數(shù)據(jù)采集模塊包括OBD 模塊、溫濕度模塊、加速度模塊,主要用于采集車速、轉(zhuǎn)速、油門開度、溫度、濕度、加速度等數(shù)據(jù);STM32 微控制器,主要用于控制數(shù)據(jù)處理、低功耗等操作;物聯(lián)顯示平臺包括網(wǎng)頁端和客戶端,主要用于查看數(shù)據(jù);通信模塊采用NB-IoT 模塊,主要用于單片機與云平臺之間的數(shù)據(jù)傳輸。
STM32 從各個數(shù)據(jù)采集模塊中讀取數(shù)據(jù)并處理后,通過NB-IoT 通信模塊將數(shù)據(jù)打包發(fā)送至物聯(lián)云平臺,用戶可直接從物聯(lián)平臺讀取數(shù)據(jù)。
本設計由主控芯片STM32F103RCT6、DHT12 溫濕度傳感器模塊、ADXL345 加速度傳感器模塊、以ELM327 作為協(xié)議轉(zhuǎn)換芯片的OBD 模塊、NB-IoT 通信模塊等部分組成。其系統(tǒng)硬件結(jié)構(gòu)圖如圖2所示。
圖2 系統(tǒng)硬件結(jié)構(gòu)圖
DHT12 溫濕度傳感器以I2C 的方式通信,傳輸車輛的溫度和濕度給主控芯片。ADXL345 采集車輛加速度的運動信息,通過I2C 的方式傳輸給主控。上位機發(fā)送AT 指令給OBD 模塊,OBD 反饋車速、轉(zhuǎn)速、油門開度等數(shù)據(jù)給主控。NB-IoT 通信模塊將主控芯片采集的數(shù)據(jù)以數(shù)據(jù)包的方式發(fā)送至云平臺,并接收云平臺的應答信息,通過串口的方式與主控芯片通信。
系統(tǒng)以基于 ARM Cortex -M3 內(nèi)核的STM32F103RCT6 控制器作為控制核心,程序存儲器容量為256KB,具有64 個引腳,支持I2C、SPI 和串口等外設[8]。最小系統(tǒng)的實現(xiàn)電路圖如圖3 所示。
圖3 STM32 最小系統(tǒng)電路圖
本設計采用輸出為7.2 V 的鋰電池為系統(tǒng)提供電源,系統(tǒng)需要為部分傳感器供電的5 V 和為微控制器供電的3.3 V。5 V 和3.3 V 直流電源可分別利用穩(wěn)壓芯片LM2940 和LM1117[7]降壓獲得。
采集模塊由DHT12 溫濕度傳感器、ADXL345加速度傳感器和OBD 車載診斷模塊組成。
DHT12 數(shù)字式溫濕度傳感器是一款含有已校準數(shù)字信號輸出的溫濕度復合型傳感器,具有超小體積、低功耗的優(yōu)點。
ADXL345 是一款完整的3 軸加速度測量系統(tǒng),可采用低功耗、休眠等模式,降低功耗,本系統(tǒng)采用低功耗模式。可采用I2C 和SPI 數(shù)字通信。
OBD 使用ELM327 作為協(xié)議轉(zhuǎn)換芯片,將OBD協(xié)議數(shù)據(jù)轉(zhuǎn)換為RS232 輸出。目前常用的車載數(shù)據(jù)通信協(xié)議主要有CAN 總線通信與K 線通信2 種方式,本系統(tǒng)選用ISO15765(CAN-BUS)總線協(xié)議。ELM327[9]外圍電路如圖4 所示。
圖4 ELM327 外圍電路
BC20 是一款高性能、低功耗、多頻段、尺寸緊湊的NB/GNSS 無線通信模塊,具有-40 ℃~+85 ℃超寬工作溫度范圍。由于支持多星座衛(wèi)星系統(tǒng)解調(diào)算法,其定位更加精準,抗多路徑干擾能力更強。系統(tǒng)應用TCP 傳輸模式,發(fā)送數(shù)據(jù)協(xié)議中包含0x7e、報文頭、報文體、校驗碼和0x7e,其中報文頭包括報文ID、ICCID、發(fā)送時間和流水號;報文體依據(jù)發(fā)送類型設定。NB-IoT 模塊電路圖如圖5 所示。
圖5 NB-IoT 模塊電路圖
車輛狀態(tài)監(jiān)測系統(tǒng)基于FreeRTOS 操作系統(tǒng)開發(fā)的軟件結(jié)構(gòu)圖如圖6 所示,根據(jù)監(jiān)測的要求需要建立5個主應用任務:系統(tǒng)初始化任務、系統(tǒng)運行指示任務、數(shù)據(jù)采集任務、數(shù)據(jù)處理任務、通信任務。使用FreeRTOS 的搶占式任務調(diào)度器來協(xié)調(diào)各任務運行[10],多任務運行可以很好地提高系統(tǒng)的運行效率,同時設置FreeRTOS 系統(tǒng)為tickless 模式降低系統(tǒng)功耗。
車輛狀態(tài)監(jiān)測系統(tǒng)上電啟動,傳感器、串口等模塊初始化大概需要1 s,然后進行NB-IoT 配置,大概需要13 s 到19 s 左右,再根據(jù)任務執(zhí)行的順序執(zhí)行。任務1 是LED 閃爍任務,表明系統(tǒng)處于工作狀態(tài);任務2 是采集監(jiān)測系統(tǒng)的各個狀態(tài)數(shù)據(jù)值,并以隊列或者信號量的形式存儲,可使用定時器定時發(fā)送也可使用ADXL345 閾值超出中斷發(fā)送,本系統(tǒng)使用閾值中斷發(fā)送,可以很好地降低系統(tǒng)功耗;任務3是將數(shù)據(jù)打包發(fā)送至云平臺。車輛狀態(tài)監(jiān)測系統(tǒng)程序流程圖如圖7 所示。
圖6 軟件結(jié)構(gòu)圖
圖7 整體軟件流程圖
從官網(wǎng)下載FreeRTOS 源碼,并將之添加到創(chuàng)建的FreeRTOS 文件夾中,portable 文件夾只保留keil、MemMang 和RVDS。再將croutine.c、event_groups.c、list.c、queue.c、tasks.c 和timers.c 移植到新建的FreeRTOS_CORE 文件夾中,同時將port.c 和heap_4.c 移植到新建的FreeRTOS_PORTABLE 文件夾中。最后將官方的Demo 中FreeRTOSConfig.h 系統(tǒng)配置文件添加至工程。此時編譯可能出現(xiàn)port.c、stm32f10x_it.c 中有重復定義的中斷函數(shù),這里選擇將stm32f10x_it.c 中重復的函數(shù)屏蔽掉。至此,F(xiàn)reeRTOS 操作系統(tǒng)的移植便完成了[11]。
車輛狀態(tài)監(jiān)測系統(tǒng)在實現(xiàn)時劃分為4 個任務進行實現(xiàn),任務函數(shù)名稱、優(yōu)先級分配、任務功能如表1 所示[12]。
表1 任務信息
FreeRTOS 的任務創(chuàng)建函數(shù)為xTaskCreate,任務創(chuàng)建代碼如下:
本系統(tǒng)使用隊列實現(xiàn)任務間的數(shù)據(jù)傳遞,代碼如下:
車輛狀態(tài)監(jiān)測系統(tǒng)接收短信指令后被喚醒,向監(jiān)控系統(tǒng)鑒權(quán)。成功應答后,監(jiān)控系統(tǒng)實時發(fā)送溫濕度等狀態(tài)值數(shù)據(jù)包至物聯(lián)平臺。監(jiān)測系統(tǒng)網(wǎng)頁測試結(jié)果如圖8 所示。測試過程中,可借助串口調(diào)試助手及遠程連接查看指令收發(fā)情況及監(jiān)測狀態(tài)參數(shù)。溫濕度、加速度數(shù)據(jù)如圖9 所示。OBD 監(jiān)測車輛的車速、轉(zhuǎn)速、油門開度等參數(shù)數(shù)據(jù)如圖10 所示。
圖8 監(jiān)測系統(tǒng)網(wǎng)頁測試結(jié)果
圖9 溫濕度、加速度監(jiān)測
圖10 OBD 數(shù)據(jù)監(jiān)測
研究了基于FreeRTOS 的車輛狀態(tài)監(jiān)測系統(tǒng),設計并搭建硬件電路,多任務運行實時采集車輛狀態(tài)的各項參數(shù),并將數(shù)據(jù)實時上傳到云平臺。通過測試表明,該系統(tǒng)可以實時穩(wěn)定地讀取各個車輛狀態(tài)參數(shù),并在網(wǎng)頁端查看數(shù)據(jù),實現(xiàn)對車輛狀態(tài)的監(jiān)測,達到了系統(tǒng)設計的目標。FreeRTOS 操作系統(tǒng)具有多任務、低功耗、實時性和穩(wěn)定可靠等優(yōu)點,使該系統(tǒng)具有運行穩(wěn)定、數(shù)據(jù)實時上傳、精度高和功耗低等優(yōu)點,適用于各種復雜的場合內(nèi)長時間使用。