霍英楠,孫金根
(沈陽理工大學 自動化與電氣工程學院,遼寧 沈陽 110159)
在工業制造及室內家居生產等領域,溫度作為重要影響因素需實時監視,有時還需要查看一段時間內的溫度變化趨勢[1].目前,溫度計仍被廣泛應用于溫度檢測,如玻璃溫度計、雙金屬溫度計和壓力式溫度計.這些溫度計存在實時性差、精度低、溫度值讀取麻煩等缺點.隨著單片機技術的成熟以及半導體技術和嵌入式技術的飛速發展,溫度測量系統正逐步轉變為復合型系統,具有很強的適應能力,可以應用于較為惡劣的環境,更重要的是測量精度有了很大的提高[2],正逐步向智能化、集成化和實用化方向發展.
本文基于STM32開發的溫度測量系統實時性好、精度高、成本低、功耗小,與以往溫度測量系統相比,性能有很大提高.首先,系統的集成度更高,無需復雜的組裝;其次,系統采用μC/OS-III進行任務管理,可以完成更多更復雜的任務,不但更加安全可靠,而且后期的修改和維護方便;其三,測量系統添加了溫度監視界面,可以將實時溫度以及相關信息顯示在LCD(liquid Crystal Display)屏幕上,溫度數據的讀取更加方便,系統更具有實用性.
溫度測量系統的開發平臺是正點原子的精英開發板,處理器采用的是意法半導體(ST)公司出品的STM32F103型,芯片為ARM(Advanced RISC Machines)公司生產的Cortex-M3型,屬于32位ARM微控制器,其最高工作頻率為72 MHz,外部Flash為大容量512 kB[3].該系列芯片集成了定時器、USB、ADC(Analog-to-Digital Converter)等多種外設功能,同時具有低功耗、可低壓操作的特點,是一款適用于工業、醫療等多個領域的微控制器[4].
所采用的溫度傳感器集成于STM32F103芯片中,用來實現對工作環境和室內溫度的測量.芯片內部的ADC能夠將傳感器輸出的電壓值轉換成數字傳送至CPU.為了保證測量精度,ADC的模擬輸入采樣時間應不低于17.1 μs,否則會產生很大誤差[5].
該溫度測量系統運行時,ADC內部輸入通道16被激活,按照式(1)計算后,將溫度傳感器傳送的電壓值轉換為實際溫度值,同時將溫度數據傳送給數據顯示模塊,實現溫度數據在監視界面中的顯示.
T={(V25-Vsense)/Avg_Slope}+25
(1)
式中:T為轉換后溫度值;Vsense為溫度傳感器輸出的電壓值;V25為Vsense在25 ℃時的數值;Avg_Slope為溫度與Vsense曲線的平均斜率.
溫度測量系統的軟件部分在MDK5上進行開發,采用ST公司固件庫中的API(Application Programming Interface)函數,使程序簡潔美觀,并在很大程度上降低了開發難度.軟件的主程序流程如圖1所示.需要注意的是,ADC的時鐘頻率應低于14 MHz,否則會影響測量精度,采樣時間設置為239.5個時鐘周期即可.

圖1 主程序流程
系統啟動后,首先初始化操作系統、ADC、LCD、定時器,并配置相關的外設引腳,接下來創建系統所需的任務.其中,LED的主要功能是在系統正常運行時每秒閃爍一次;STemWin包含了溫度數據采集和GUI(Graphical User Interface)刷新顯示數據兩個功能.當系統正常運行時,LED不斷閃爍,監視界面會顯示實時溫度數據以及提示信息,同時繪制出溫度曲線,以便查詢某段時間的歷史溫度數據并預測溫度變化趨勢.
移植操作系統是為了充分利用CPU資源.GUI運行時應該對CPU和內存資源進行合理使用.操作系統具有豐富的可調用庫函數,能夠縮短系統開發時間.移植操作系統使工程易于修改和維護,且有利于在工程中創建更多更復雜的任務.
μC/OS-III是實時性強的嵌入式操作系統,可移植性好,可管理任務數多,是μC/OS的第三代內核;其源代碼是開放的,非常便于學習和研究[6].相比于μC/OS-II,它添加了時間片輪轉調度算法,能夠高效快速地完成系統的進程調度,使CPU資源得以充分利用[7].μC/OS-III還支持STemWin、μCGUI等GUI庫,具有很強的可擴展性,在實際應用中運行穩定.
首先從官方網站下載源碼;然后將源碼解壓,找到系統移植所需要的文件并添加到已有工程的μC/OS-III分組中;添加源碼后,需要參照移植流程和μC/OS-III移植手冊進行以下操作:①在bsp.c中將CTRL寄存器的bit0置1,開通時鐘計數功能;②對stm32f10x_it.o文件中名為PendV_Handler的函數進行屏蔽;③在os_cfg_app.h文件中配置μC/OS-III內部任務的優先級;④將sys.h文件中SYSTEM_SUPPORT_UCOS的宏定義值改為1,使系統文件支持μC/OS.
μC/OS-III系統移植操作完成后,在工程中建立簡單的跑馬燈任務,用于測試μC/OS-III系統是否移植成功.
GUI是指用圖形方式顯示數據處理狀態和結果的用戶計算機操作界面.與使用命令行界面相比,圖形界面內容豐富多彩,功能多樣.圖形用戶界面的廣泛應用給非專業用戶帶來了極大的便利.
STemWin是一個包含曲線、文本、按鈕等多種控件的嵌入式圖形庫,適用于ST公司的MCU(Microprogrammed Control Unit).ST的芯片可以免費使用,但不開源,且以lib的形式提供[8].
移植STemWin時,同樣需要首先到ST官網上下載源碼,且要下載STM32F103對應的Cube;然后將源碼解壓,找到移植系統所需要的文件,添加到已經移植好的μC/OS-III操作系統的工程中去;最后,需要根據STM32F1 EMWIN開發手冊進行以下操作:①需要在GUIConf.c文件中為STemWin分配內存,但其大小不能超過64 kB; ②將GUIConf.h文件中的GUI_OS宏定義值改為1,使其能夠支持操作系統;③將用于打點、讀點、填充的函數定義在GUIDRV_Template.c文件中;④刪除LCDConf_FlexColor_Template.c文件中調用LCD驅動的函數(這是因為實際應用中STemWin自帶的驅動程序對一些LCD驅動電路不支持).
開發監視界面之前,還需要實現漢字顯示功能.在PC機上制作的漢字字庫通過SD卡被刷入外部Flash中,并在工程中添加定義字體和查找字庫的文件,即可實現漢字的顯示.接下來,借助GUIBuilder工具和STemWin庫的API函數,完成監視界面的開發.GUIBuilder工具操作簡單,控件齊全,是emWin官方提供的一款用于GUI設計的軟件.打開GUIBuilder軟件,添加實驗需要的FRAMWIN、GRAPH和TEXT等小工具,小工具添加完成后,點擊顯示save選項而自動生成FramewinDLG.c文件;打開新生成的文件,在_cbDialog函數中完成所有控件的初始化,并利用GRAPH_DATA_YT_AddValue函數將溫度數據添加到GRAPH工具中,從而實現溫度曲線的繪制(溫度曲線最右側的溫度值對應實時溫度值);最后在文件中加入用戶自定義函數以及開發監視界面所需要的頭文件,將文件名改為Mygui.c,并將其添加到工程中,即可完成監視界面的開發.監視界面開發流程如圖2所示.

圖2 監視界面的開發流程
基于μC/OS-III和STemWin移植系統,在main()主函數中創建LED任務,用來顯示系統運行狀態;創建STemWin任務,實現溫度監視界面,以便將溫度信息顯示在界面中;最后在確認工程編譯鏈接無報錯后,將程序下載到開發平臺上,在實驗室中對溫度測量系統進行模擬實驗.為了檢測溫度測量系統的性能,首先利用吹風機升高開發平臺周圍的環境溫度,再利用風扇降低環境溫度.由于條件所限,測量的溫度范圍為20~40 ℃.實驗的溫度測量系統監視界面如圖3所示.

圖3 實驗的溫度測量系統監視界面
由圖3可以看出,實時溫度為25.0 ℃,屏幕下方可顯示室內環境溫度狀態.查看實時溫度曲線可知,實驗平臺的環境溫度由低升高、又由高降低進行變化.通過該溫度測量系統監視界面可了解溫度變化所經歷的時間,有利于隨時掌握工作環境的溫度變化情況.
基于STM32處理器和LCD開發出一種溫度測量系統.該測量系統能夠利用STM32內部的溫度傳感器測量周圍環境的溫度,并在監視界面中顯示實時溫度數據以及提示信息,同時繪制出溫度變化曲線.經實驗測試,該溫度測量系統監視界面簡潔直觀,溫度數據清晰,系統實時性好,成本低,具有很強的實用性.