王子權(quán),范 燚,項 贇,項 超,姚瀟駿
(上海衛(wèi)星裝備研究所總裝中心,上海 200240)
航天產(chǎn)品生產(chǎn)過程對環(huán)境溫濕度具有一定要求。目前,在AIT 中常用的溫度測量裝置的采集周期較長,較難獲得溫度的瞬時變化情況[1-4]。目前,對工業(yè)用溫度、濕度檢測設(shè)備的主要研制思路基本可概括為以某種類型的微控制器作為通信與數(shù)據(jù)處理的核心,以某種類型的傳感器或變送器作為設(shè)備的敏感裝置,以某種界面設(shè)計系統(tǒng)進行人機交互設(shè)計[5-9]。該文在STM32F429 型單片機核心上集成了16 路溫濕度傳感器,通過GPIO 模擬傳感器的IIC 通信時序,使用任務信號量機制實現(xiàn)測量任務間的通信與切換,并設(shè)計了系統(tǒng)上位機。
如圖1所示,系統(tǒng)主要硬件組成包括STM32F429單片機、USB標準輸入電源(5 V)、穩(wěn)壓降壓芯片(5 V→3.3 V)、電源LED指示燈、復位電路、晶振電路、CH340G轉(zhuǎn)串口電路、RGB 燈、SHT20 型傳感器(16 個)。
圖1 系統(tǒng)整體組成
SHT20 型傳感器通過GPIO 外設(shè)轉(zhuǎn)接卡與單片機的通用GPIO 連接,單個傳感器通過單片機的兩個通用GPIO 口與單片機進行通信,包括時鐘線GPIO 的SCK 引腳和數(shù)據(jù)線GPIO 的SDA引腳,傳 感器與單片機共用3.3 V 供電電源。電源LED 指示燈在電源接通時亮起,電源斷開時熄滅。RGB 等通過通用GPIO 與單片機連接,其中R 光(紅光)引腳為PH10,G 光(綠光)引腳為PH11,B 光(藍光)引腳為PH12。單片機通過CH340G 轉(zhuǎn)串口電路實現(xiàn)與上位機的串口通信,串口通信配置設(shè)置:波特率:115 200 bps;奇偶校驗:N;數(shù)據(jù)位數(shù):8;停止位數(shù):1。
如圖2 所示,GPIO 外設(shè)轉(zhuǎn)接卡采用標準的USB接口形式,轉(zhuǎn)接卡接口對應表如表1 所示。以第一個轉(zhuǎn)接卡接口為例,USB 的第5、6 引腳均接地,VSS引腳接地,VCC 引腳接3.3 V 供電電源,數(shù)據(jù)線D-與單片機的PA15 連接,對應第一個SHT20 傳感器的SCK1 引腳,數(shù)據(jù)線D+與單片機的PA14 引腳連接,對應第一個SHT20 傳感器的SDA1 引腳。
圖2 GPIO外設(shè)轉(zhuǎn)接卡電路(單個)
表1 轉(zhuǎn)接卡接口對應表
如圖3 所示,CH340G 轉(zhuǎn)串口電路使用MINI USB接口作為輸入[10-13],并提供標準的5 V 供電電源,串口的RXD 引腳與單片機的PA9 引腳連接,TXD 引腳與單片機的PA10 引腳連接,芯片本身使用12 MHz的晶振。使用CH340G 轉(zhuǎn)串口電路的主要目的是與上位機實現(xiàn)串口通信,將從傳感器采集的溫濕度數(shù)據(jù)發(fā)送至上位機。
圖3 CH340G轉(zhuǎn)串口電路
設(shè)置系統(tǒng)任務共17 個,包括啟動任務和16 個溫濕度測量任務。啟動任務的函數(shù)名為AppTaskStart,溫濕度測量任務的函數(shù)名為AppTask1-AppTask16。啟動任務的堆??臻g為128 B,單個溫濕度測量任務的堆??臻g為512 B。啟動任務的優(yōu)先級為2,溫濕度測量任務的優(yōu)先級均為3。
由于溫濕度測量任務的優(yōu)先級均相同,因此在軟件運行時,PC 指針以時間片輪轉(zhuǎn)調(diào)度的形式在16個溫濕度測量間來回切換。但在實驗中發(fā)現(xiàn),采用時間片輪轉(zhuǎn)調(diào)度的形式,會導致某些任務過量運行,而某些任務基本沒有時間運行,其表現(xiàn)形式:某些任務傳回的數(shù)據(jù)量很多,而某些任務傳回的數(shù)據(jù)量很少。因此需在某種任務間通信或切換機制避免上述現(xiàn)象的產(chǎn)生。
任務信號量是UCOS 操作系統(tǒng)提供的信號量類型之一,該信號量的值包含在任務控制塊中,是任務獨有的信號量通知值。任務信號量釋放函數(shù)名為OSTaskSemPost;任務信號量等待函數(shù)名為OSTask SemPend。每個任務都可以等待該任務的任務信號量,但在其他所有任務或中斷中都可以向該任務釋放信號量,因此,該種信號量機制為實現(xiàn)任務間切換提供了可能。
如圖4 所示,系統(tǒng)整體程序流程首先進行系統(tǒng)初始化[14-16],包括系統(tǒng)時鐘、標準庫、延時函數(shù)、串口、串口DMA、第一個溫濕度傳感器通信總線IIC1、第一個溫濕度傳感器SHT21、第16 個溫濕度傳感器通信總線IIC16、第16 個溫濕度傳感器SHT216、UCOS 操作系統(tǒng)等的初始化。隨后進行任務創(chuàng)建并開啟UCOS 系統(tǒng)。在任務創(chuàng)建中,AppTaskStart 的任務是創(chuàng)建AppTask1-AppTask16 共 16 個任務,在AppTaskStart 任務末尾必須釋放AppTask1 任務信號量,此時AppTask1 才使得到其任務信號量正常運行,AppTask1 任務末尾必須釋放AppTask2 任務信號量,此時AppTask2 任務才可運行,以此類推,AppTask16 任務末尾必須釋放AppTask1 任務信號量,此時PC 指針重新回到AppTask1 重新開始下一輪流程。
圖4 系統(tǒng)整體程序流程
如圖5所示,以第一個溫濕度測量任務流程為例(其余溫濕度測量任務流程基本相同)。圖中,變量err為操作系統(tǒng)運行錯誤信息存儲變量,用于在操作系統(tǒng)運行錯誤時,通過讀取該變量即可查看錯誤信息;i為for循環(huán)變量,cycle為循環(huán)次數(shù);sumTemperatureC1為循環(huán)cycle 次后溫度總和;sumHumidityRH1 為循環(huán)cycle 次后濕度總和;temperatureC1 為當前溫度數(shù)據(jù);humidityRH1 為當前濕度數(shù)據(jù)。系統(tǒng)通過判斷溫度數(shù)據(jù)傳輸正常,計算溫度數(shù)據(jù)總和,通過判斷濕度數(shù)據(jù)傳輸正常,計算濕度數(shù)據(jù)總和,當cycle 次循環(huán)完成后進行溫度和濕度數(shù)據(jù)平均值的計算,平均值計算完成后,先后通過串口向上位機發(fā)送溫度和濕度數(shù)據(jù),其中溫度數(shù)據(jù)以大寫字母A 開頭,濕度數(shù)據(jù)以小寫字母a 開頭,發(fā)送的溫濕度數(shù)據(jù)均保留兩位小數(shù)。串口數(shù)據(jù)發(fā)送完成后將溫度和濕度數(shù)據(jù)清零,進行下一次循環(huán)計算,函數(shù)最后必須釋放AppTask2的任務信號量,系統(tǒng)在延時500 ms 時間內(nèi)可發(fā)起任務調(diào)度,因此并不妨礙其余任務函數(shù)的運行。
圖5 溫濕度測量任務AppTask1任務函數(shù)
若溫度數(shù)據(jù)和濕度數(shù)據(jù)傳輸異常,系統(tǒng)則自動清零溫度和濕度數(shù)據(jù),并向串口發(fā)送“A0.00”和“a0.00”數(shù)據(jù),因此通過上位機查看串口發(fā)送的數(shù)據(jù),若某個通道的數(shù)據(jù)均為0.00,可判斷該傳感器連接異常。第一個溫濕度測量任務以A 和a 作為溫度數(shù)據(jù)和濕度數(shù)據(jù)的首字母,上位機通過判斷數(shù)據(jù)首字母是A 或a,從而將數(shù)據(jù)保存至溫度數(shù)據(jù)文本文件A1.txt 或濕度數(shù)據(jù)文本文件A2.txt,其余第2~16 個溫濕度測量任務分別以B-P 作為溫度數(shù)據(jù)的首字母,分別以b-p 為濕度數(shù)據(jù)的首字母,并將溫度數(shù)據(jù)保存至文本文件B1.txt-P1.txt,濕度數(shù)據(jù)保存至文本文件b1.txt-p1.txt。
基于Matlab GUI 開發(fā)環(huán)境進行系統(tǒng)的上位機設(shè)計,包括主界面、串口配置界面、串口調(diào)試界面、數(shù)據(jù)曲線界面、進入監(jiān)測系統(tǒng)界面等,通過主界面進入各子界面。
如圖6 所示,上位機采用RS232 串口通信方式,以數(shù)據(jù)首字母A-P 作為溫度數(shù)據(jù)判斷依據(jù),共16路,數(shù)據(jù)保存為文本文件:A1.txt-P1.txt。以數(shù)據(jù)首字母a-p 作為濕度數(shù)據(jù)判斷依據(jù),共16 路,數(shù)據(jù)保存至文本文件:a2.txt-p2.txt。通過數(shù)據(jù)曲線顯示界面,可將16 路溫度數(shù)據(jù)和16 路濕度數(shù)據(jù)以實時曲線形式顯示。通過監(jiān)測系統(tǒng)界面,可將當前16 路溫度數(shù)據(jù)和當前16 路濕度數(shù)據(jù)實時顯示,同時可顯示當前16 路溫度分布彩圖和當前16 路濕度分布彩圖。在軟件的串口配置界面可配置串口通信的COM 口、波特率、奇偶校驗位、數(shù)據(jù)位數(shù)、停止位數(shù)。在軟件的串口調(diào)試界面可從終端機接收數(shù)據(jù),以判斷串口通信是否正常。
圖6 上位機設(shè)計
數(shù)據(jù)曲線顯示界面用于顯示16 路溫度曲線和16 路濕度曲線,曲線顯示框通過Matlab(plot 函數(shù))繪圖功能實現(xiàn),顯示框每1 000 點更新一次,曲線重新開始從當前時間點顯示。
進入監(jiān)測系統(tǒng)界面用于顯示當前16 路溫度數(shù)據(jù)和16 路濕度數(shù)據(jù),并實時更新。使用Matlab 二維彩圖繪制方法(pcolor 函數(shù)),在“溫度分布”和“濕度分布”繪制窗口分別將當前的16 路溫度數(shù)據(jù)和16 路濕度數(shù)據(jù)采用彩圖繪制方式進行可視化顯示。
將系統(tǒng)應用于冷氣降溫中。實驗設(shè)備包括冷氣機、PC 機、STM32F429 開發(fā)板、系統(tǒng)GPIO 外設(shè)轉(zhuǎn)接卡、16 個SHT20 型傳感器、恒溫加熱器、傳熱鋁合金板、多層隔熱組件等。恒溫加熱器向傳熱鋁合金板加熱,實驗時將恒溫加熱器的加熱溫度設(shè)定為60 ℃,冷氣機通過內(nèi)徑為30 mm 的PVC 管向傳熱鋁合金板吹冷氣,在鋁合金板上以相等間隔布置4×4的傳感陣列,以在上位機中模擬溫濕度平面分布。
16 路溫度變化曲線和濕度變化曲線如圖7 所示。采集點數(shù)在100 個以內(nèi)時,系統(tǒng)處于常溫狀態(tài)下,此時16 個點的溫度和濕度基本保持一致。打開加熱器后,溫度開始上升,而濕度開始下降,這與實際情況相符,在采集點為200 個左右時,將多層隔熱組件掀開,觀測鋁合金板,此時溫度出現(xiàn)驟降,而濕度出現(xiàn)驟升現(xiàn)象。重新包覆多層隔熱組件后,溫度繼續(xù)上升至50 ℃左右的穩(wěn)態(tài),此時濕度也逐漸降低至26%RH 左右的穩(wěn)態(tài)。打開冷氣機,冷氣隨氣管沖進鋁合金板與多層隔熱組件組成的封閉腔內(nèi),此時溫度逐漸開始下降至38 ℃左右的穩(wěn)態(tài),而濕度逐漸上升至15%RH 左右的穩(wěn)態(tài)。
圖7 溫濕度變化曲線
恒溫加熱器加熱穩(wěn)態(tài)后、冷氣降溫穩(wěn)態(tài)后的溫濕度分布如圖8 所示??芍訜岱€(wěn)態(tài)后,第10 個傳感器的溫度最大,約50 ℃左右,與溫度曲線變化趨勢相符,而其濕度則最低,約12%RH 左右。打開冷氣機冷卻至穩(wěn)態(tài)后,可知第5 個傳感器的溫度最低,約35 ℃左右,而其濕度則最高,約35%RH 左右,這與其最靠近氣管出口有關(guān)。
圖8 溫濕度分布
該文基于STM32F429 單片機與SHT20 型溫濕度傳感器,研制了一種多路溫濕度掃描檢測系統(tǒng),并研制了GPIO 外設(shè)轉(zhuǎn)接卡,在Matlab GUI 開發(fā)環(huán)境中,設(shè)計了系統(tǒng)上位機軟件。在冷氣降溫實驗中,驗證了系統(tǒng)的穩(wěn)定性與可靠性,得到了符合實際的溫濕度變化趨勢,該系統(tǒng)通用性強,功能易擴展,可應用于多種航天產(chǎn)品生產(chǎn)制造現(xiàn)場。