郝結(jié)來,王子權(quán),林 華
(1.安徽省汽車工業(yè)學(xué)?,F(xiàn)代制造系,安徽合肥 231131;2.上海衛(wèi)星裝備研究所總裝中心,上海 200240;3.合肥工業(yè)大學(xué)機械工程學(xué)院,安徽合肥 230009)
農(nóng)業(yè)、林業(yè)、環(huán)保等工程中經(jīng)常需要得到土壤的溫濕度數(shù)據(jù)[1-2],文獻[3]提出了一種基于射頻識別技術(shù)傳感標(biāo)簽的農(nóng)田土壤環(huán)境監(jiān)測方法,設(shè)計分析了一種無源射頻識別溫濕度傳感標(biāo)簽。文獻[4]對土壤的溫濕度數(shù)據(jù)進行取樣,探究溫濕度對高寒草甸土壤氮礦化的影響;文獻[5]測量出了土壤溫濕度數(shù)據(jù),研究了不同的覆蓋方式對土壤溫濕度的影響。工程中通常采用電子儀表對土壤進行溫濕度測量[6-7]。文獻[8]利用虛擬儀器技術(shù),基于51 單片機搭建了一套農(nóng)田土壤溫濕度監(jiān)測平臺,實現(xiàn)了單個土壤溫濕度的測量與顯示,裝置的測量通道數(shù)較少,并行處理能力較弱。相較于51 單片機和DSP 處理器,STM32 單片機具有更強大的計算能力和豐富的參考資料與設(shè)計案例[9-12]。文獻[13]利用PWM 輸出功能實現(xiàn)了對LED 燈的亮度調(diào)節(jié)。文獻[14]基于STM32,針對分布式光纖拉曼測溫系統(tǒng)中定標(biāo)光纖和雪崩光電二極管的溫控要求,設(shè)計了一套高精度恒溫控制系統(tǒng)。文獻[15]在STM32 單片機中移植了UCOS 操作系統(tǒng),設(shè)計了一種智能在線分析儀。
文中基于STM32F103ZET6 單片機,在單片機上移植UCOS 操作系統(tǒng),實現(xiàn)了多任務(wù)的并行處理功能;進行了8 通道溫濕度采集系統(tǒng)硬件、電路、軟件等的設(shè)計,通過按鍵設(shè)置溫濕度報警值,并對報警信號進行功率放大,基于STemWin 設(shè)計制作操作簡便、友好的人機交互界面。
系統(tǒng)的整體組成如圖1 所示,主要包括8 對傳感器組件,即溫度傳感器1~8、濕度傳感器1~8,溫度傳感器通過單總線與單片機連接;PCF8591A 和PCF8591B 分別與濕度傳感器1~4 和濕度傳感器5~8連接,PCF8591 模數(shù)轉(zhuǎn)換芯片通過自身的IIC 總線與單片機連接。
圖1 系統(tǒng)整體組成
復(fù)位電路、晶振電路等為單片機正常工作的基本電路,留有串口電路的目的有兩個:程序燒寫和與上位機通信;通過按鍵設(shè)置溫濕度的報警值;對8 個傳感器組分別設(shè)置LED 指示燈,當(dāng)LED 等亮起時表明對應(yīng)的傳感器組在工作;設(shè)置報警信號的功率放大電路的目的是保證報警信號的響度足夠大,以使人員及時感知報警。
SEN0114 土壤濕度傳感電路如圖2 所示。該傳感器是一種簡易的水分傳感器,可用于檢測土壤的水分。當(dāng)土壤缺水時,傳感器輸出值減小,反之增大。采用4 線制進行模擬量的采集,其中,VCC 和GND 分別表示電源的高電平和地。當(dāng)濕度低于或高于設(shè)定值時,DO 輸出高電平或低電平。AO 為濕度模擬量的輸出端口,該接口與PCF8591 連接,用于實現(xiàn)模擬量到數(shù)字量的轉(zhuǎn)換。
圖2 土壤濕度傳感電路
A/D 轉(zhuǎn)換模塊集成了2 塊PCF8591 芯片,該芯片內(nèi)部集成了IIC 總線,占用單片機2 個GPIO 端口,所以兩塊芯片共用IIC 總線。芯片的A0、A1 和A2 為器件地址配置端口,PCF8591A 配置為0x01 時,A0 為高電平,A1 和A2 均為低電平;PCF8591B 配置為0x00時,A0、A1 和A2 均為低電平。STM32 單片機可通過IIC 通信功能與其連接,轉(zhuǎn)換芯片的模擬量輸入端口為AIN0~AIN4,所以每個芯片可與4 個濕度傳感器連接。PCF8591 模數(shù)轉(zhuǎn)換芯片如圖3 所示。
圖3 PCF8591模數(shù)轉(zhuǎn)換芯片
DS18B20 溫度傳感器的電路簡單、測溫精度較高,遵循單總線通信協(xié)議,可使用STM32 單片機的通用GPIO 引腳實現(xiàn)與DS18B20 的數(shù)據(jù)通信。配置8個DS18B20 的單總線引腳分別為PB0、PB1、PC5、PC6、PA0、PA1、PE2 和PE3。
設(shè)計使用4.3 英寸電容觸摸屏,其分辨率為800×480 像素,采用16 位真彩顯示。相對電阻式觸摸屏而言,電容觸摸屏只需輕微的手指觸碰就能激活,容易進行多點觸摸,采用硬度較大的鋼化玻璃材料,使用壽命長[16]。
在按鍵設(shè)計中,共設(shè)置了7 個按鍵,其中一個為復(fù)位按鍵,其余6 個為濕度×10、濕度×1、濕度×0.1,溫度×1、溫度×0.1、溫度×0.01,分別表示濕度相對變化量10、1、0.1,溫度相對變化量1、0.1 和0.01。配置6個按鍵的GPIO 分別為PA11、PA12、PB8、PB9、PB10和PB11,按鍵引腳的初值化值均配置為高電平,通過人機交互界面可進一步設(shè)置溫濕度報警值。
為提高報警器的響度,降低單片機的負載,使用D2822A 芯片完成對報警信號的單聲道音頻功率放大,如圖4 所示。Input 為音頻輸入端,可與音頻設(shè)備進行連接。揚聲器接口配置為USB 標(biāo)準的4 接口方式,接口的第一位和第三位為音頻線,第二位和第四位為地線,圖4 中USB4 元器件的1 和3 腳為音頻線,2 和4為地線。
圖4 音頻功率放大電路
系統(tǒng)軟件設(shè)計主要包括系統(tǒng)任務(wù)配置、人機界面設(shè)計、互斥信號量配置、系統(tǒng)程序整體流程、溫濕度測量任務(wù)等。
系統(tǒng)任務(wù)主要包括任務(wù)創(chuàng)建函數(shù)start_task、觸摸屏刷新任務(wù)touch_task、人機界面顯示與刷新任務(wù)emwin_task、報警任務(wù)boom_task、按鍵檢測任務(wù)key_task、系統(tǒng)工作指示任務(wù)led_task、溫濕度測量任務(wù)THmer_task1~THmer_task8。
start_task 用于創(chuàng)建其他任務(wù),執(zhí)行完畢后掛起,配置該任務(wù)的優(yōu)先級為8,堆棧容量為128 B。touch_task 用于觸摸屏的刷新任務(wù),配置該任務(wù)的優(yōu)先級為3,堆棧容量為128 B。emwin_task 用于人機交互界面的顯示與刷新,配置該任務(wù)的優(yōu)先級為5,堆棧容量為512 B。報警任務(wù)boom_task 用于輸出報警信號至功率放大芯片的音頻輸入端,配置該任務(wù)的優(yōu)先級為7,堆棧容量為64 B。按鍵檢測任務(wù)key_task 用于實時檢測哪個按鍵按下,同時將按鍵的對應(yīng)值在觸摸屏上刷新,配置該任務(wù)的優(yōu)先級為9,堆棧容量為128 B。led_task 用于通過led 的亮滅判斷系統(tǒng)是否已經(jīng)開始工作,配置該任務(wù)的優(yōu)先級為10,堆棧容量為64 B。THmer_task1~THmer _task8為溫濕度測量任務(wù),通過調(diào)用溫度和濕度的測量函數(shù)完成對溫濕度數(shù)據(jù)的采集,并將處理后的數(shù)值顯示在觸摸屏的對應(yīng)位置,配置該任務(wù)的優(yōu)先級為6,堆棧容量為512 B,時間片長度為50 ms。
友好的人機界面可大大提高系統(tǒng)的工作效率,文中主要設(shè)計了溫濕度報警值設(shè)置界面、溫濕度值顯示界面,兩界面可相互切換,以方便設(shè)置與觀測。
2.2.1 溫濕度報警值設(shè)置界面
溫濕度報警值設(shè)置界面為系統(tǒng)初始化界面,即系統(tǒng)開機時自動進入該界面,如圖5 所示。按住“START”按鈕并釋放,系統(tǒng)開始工作,按住“STOP”按鈕并釋放,系統(tǒng)停止工作。按住“Temperature Set”按鈕并釋放,此時系統(tǒng)進入溫度設(shè)置狀態(tài),通過溫度設(shè)置按鍵即可完成溫度報警值的設(shè)置。按住“Humidity Set”按鈕并釋放,此時系統(tǒng)進入濕度設(shè)置狀態(tài),通過濕度設(shè)置按鍵即可完成濕度報警值的設(shè)置?;瑒娱L條的作用是通過觸摸屏對溫濕度值進行設(shè)置。在溫度和濕度設(shè)置中,長條的運動單位分別為0.01和0.1。
圖5 溫濕度報警值設(shè)置
設(shè)置好溫濕度報警值后,按住“ENTER”按鈕并釋放,系統(tǒng)進入溫濕度值顯示界面。在此界面下,“RETURN”按鈕不起作用。
2.2.2 溫濕度值顯示界面
溫濕度值顯示界面較簡便地顯示了各通道的溫濕度數(shù)值,如圖6 所示,T1~T8 和H1~H8 分別表示第1~8 通道的溫度和濕度數(shù)據(jù)。當(dāng)測量到溫濕度數(shù)值時,在對應(yīng)位置顯示溫濕度數(shù)值,當(dāng)沒有測量到溫濕度數(shù)值時,在對應(yīng)位置顯示“NULL”字符串。在此界面中,按住“RETYRN”按鈕并釋放,界面返回到報警值設(shè)置界面,“ENTER”按鈕不起作用。
圖6 溫濕度值顯示界面
由于2 個PCF8591 芯片共享一組IIC 總線,因此每次只能讀取一個芯片上的數(shù)據(jù),為了避免由共享總線導(dǎo)致的數(shù)據(jù)串聯(lián),配置了一個互斥信號量以防止優(yōu)先級反轉(zhuǎn),同時保證單片機在一次通信周期里只與一個轉(zhuǎn)換芯片進行通信。
在程序中配置一個任務(wù)標(biāo)志變量TASK_FLAG,用于記錄每個任務(wù)的狀態(tài),變量的位數(shù)為32 位。通過配置32 位中部分位的邏輯功能,可標(biāo)志不同任務(wù)的運行狀態(tài)。其位邏輯設(shè)置如表1 所示。
表1 TASK_FLAG位邏輯
系統(tǒng)的整體程序流程如圖7 所示[17]。程序首先完成系統(tǒng)所必須的初始化過程,如單片機時鐘初始化、程序庫的初始化、串口初始化等。在UCOS 操作系統(tǒng)初始化后,進行start_task 任務(wù),開始創(chuàng)建系統(tǒng)所需的其他任務(wù),運行結(jié)束后掛起。任務(wù)都包含在任務(wù)池中,其中,emwin_task 任務(wù)完成人機界面的顯示。系統(tǒng)初始化后進入報警值界面,在該界面設(shè)置好數(shù)值后,通過“START”按鈕使系統(tǒng)正式進入工作狀態(tài),通過“ENTER”按鈕進入數(shù)值顯示界面。在數(shù)值顯示界面,通過“RETURN”按鈕返回到報警值界面。
圖7 系統(tǒng)整體流程
溫濕度測量任務(wù)的主要工作是調(diào)用溫度、濕度測量函數(shù),得到溫濕度數(shù)據(jù),通過一定的數(shù)據(jù)處理,將溫濕度值顯示在觸摸屏上,其任務(wù)流程如圖8 所示。圖中,變量err 是操作系統(tǒng)必須定義的變量,用于存儲程序運行錯誤信息。由于溫度測量函數(shù)沒有共享數(shù)據(jù)總線,所以調(diào)用溫度測量函數(shù)無需增加互斥信號量的判斷,而濕度測量函數(shù)必須進行互斥信號量的判斷。
濕度測量函數(shù)如圖9 所示。在進行器件地址判斷之前,需要請求互斥信號量,當(dāng)請求到信號量時,繼續(xù)執(zhí)行后續(xù)程序,若沒有請求到信號量,則一直執(zhí)行請求操作。PCF8591 的AD 轉(zhuǎn)換的數(shù)字量為8 位,以相對濕度最大為100 進行計算,可得相對濕度處理函數(shù)為:
式中,d為數(shù)字量(d≤255),對應(yīng)圖9 中的函數(shù)變量ad。
圖8 溫濕度測量任務(wù)
圖9 濕度測量函數(shù)
如圖10 所示,實驗裝置主要包括溫度傳感器、濕度傳感器、變送器、STM32F103ZET6 開發(fā)板、觸摸屏、功率放大器、PCF8591 芯片組、LED 指示燈等。其中,變送器與濕度傳感器連接,用于得到準確的模擬量電信號。
圖10 實驗調(diào)試裝置
調(diào)試結(jié)果表明,土壤濕度傳感器經(jīng)過變送器后將模擬量的電信號傳送到PCF8591 芯片組,經(jīng)過模數(shù)轉(zhuǎn)換后得到了濕度數(shù)據(jù),同時得到溫度傳感器的溫度數(shù)據(jù);界面顯示正常,按鈕功能正常,能夠在報警值界面和數(shù)值顯示界面間切換;數(shù)據(jù)顯示正常,測量任務(wù)運行正常,溫度測量函數(shù)和濕度測量函數(shù)調(diào)用正常;功率放大器正常,在溫濕度到達報警值時能夠發(fā)出響度較大的報警信號。
基于STM32F103ZET6 單片機與UCOS 操作系統(tǒng)設(shè)計實現(xiàn)了多通道并行土壤溫濕度測量裝置,實現(xiàn)了8 通道的溫濕度并行采集與顯示。裝置不僅可用于土壤的溫濕度測量,也可用于環(huán)境溫度、盆栽綠植、流體溫度及濕度等的測量中,可方便地擴展裝置的通道數(shù),并對裝置增加其他測量功能。