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