王子權,范 燚,項 贇,項 超,姚瀟駿
(上海衛星裝備研究所總裝中心,上海 200240)
航天產品生產過程對環境溫濕度具有一定要求。目前,在AIT 中常用的溫度測量裝置的采集周期較長,較難獲得溫度的瞬時變化情況[1-4]。目前,對工業用溫度、濕度檢測設備的主要研制思路基本可概括為以某種類型的微控制器作為通信與數據處理的核心,以某種類型的傳感器或變送器作為設備的敏感裝置,以某種界面設計系統進行人機交互設計[5-9]。該文在STM32F429 型單片機核心上集成了16 路溫濕度傳感器,通過GPIO 模擬傳感器的IIC 通信時序,使用任務信號量機制實現測量任務間的通信與切換,并設計了系統上位機。
如圖1所示,系統主要硬件組成包括STM32F429單片機、USB標準輸入電源(5 V)、穩壓降壓芯片(5 V→3.3 V)、電源LED指示燈、復位電路、晶振電路、CH340G轉串口電路、RGB 燈、SHT20 型傳感器(16 個)。

圖1 系統整體組成
SHT20 型傳感器通過GPIO 外設轉接卡與單片機的通用GPIO 連接,單個傳感器通過單片機的兩個通用GPIO 口與單片機進行通信,包括時鐘線GPIO 的SCK 引腳和數據線GPIO 的SDA引腳,傳 感器與單片機共用3.3 V 供電電源。電源LED 指示燈在電源接通時亮起,電源斷開時熄滅。RGB 等通過通用GPIO 與單片機連接,其中R 光(紅光)引腳為PH10,G 光(綠光)引腳為PH11,B 光(藍光)引腳為PH12。單片機通過CH340G 轉串口電路實現與上位機的串口通信,串口通信配置設置:波特率:115 200 bps;奇偶校驗:N;數據位數:8;停止位數:1。
如圖2 所示,GPIO 外設轉接卡采用標準的USB接口形式,轉接卡接口對應表如表1 所示。以第一個轉接卡接口為例,USB 的第5、6 引腳均接地,VSS引腳接地,VCC 引腳接3.3 V 供電電源,數據線D-與單片機的PA15 連接,對應第一個SHT20 傳感器的SCK1 引腳,數據線D+與單片機的PA14 引腳連接,對應第一個SHT20 傳感器的SDA1 引腳。

圖2 GPIO外設轉接卡電路(單個)

表1 轉接卡接口對應表
如圖3 所示,CH340G 轉串口電路使用MINI USB接口作為輸入[10-13],并提供標準的5 V 供電電源,串口的RXD 引腳與單片機的PA9 引腳連接,TXD 引腳與單片機的PA10 引腳連接,芯片本身使用12 MHz的晶振。使用CH340G 轉串口電路的主要目的是與上位機實現串口通信,將從傳感器采集的溫濕度數據發送至上位機。

圖3 CH340G轉串口電路
設置系統任務共17 個,包括啟動任務和16 個溫濕度測量任務。啟動任務的函數名為AppTaskStart,溫濕度測量任務的函數名為AppTask1-AppTask16。啟動任務的堆??臻g為128 B,單個溫濕度測量任務的堆棧空間為512 B。啟動任務的優先級為2,溫濕度測量任務的優先級均為3。
由于溫濕度測量任務的優先級均相同,因此在軟件運行時,PC 指針以時間片輪轉調度的形式在16個溫濕度測量間來回切換。但在實驗中發現,采用時間片輪轉調度的形式,會導致某些任務過量運行,而某些任務基本沒有時間運行,其表現形式:某些任務傳回的數據量很多,而某些任務傳回的數據量很少。因此需在某種任務間通信或切換機制避免上述現象的產生。
任務信號量是UCOS 操作系統提供的信號量類型之一,該信號量的值包含在任務控制塊中,是任務獨有的信號量通知值。任務信號量釋放函數名為OSTaskSemPost;任務信號量等待函數名為OSTask SemPend。每個任務都可以等待該任務的任務信號量,但在其他所有任務或中斷中都可以向該任務釋放信號量,因此,該種信號量機制為實現任務間切換提供了可能。
如圖4 所示,系統整體程序流程首先進行系統初始化[14-16],包括系統時鐘、標準庫、延時函數、串口、串口DMA、第一個溫濕度傳感器通信總線IIC1、第一個溫濕度傳感器SHT21、第16 個溫濕度傳感器通信總線IIC16、第16 個溫濕度傳感器SHT216、UCOS 操作系統等的初始化。隨后進行任務創建并開啟UCOS 系統。在任務創建中,AppTaskStart 的任務是創建AppTask1-AppTask16 共 16 個任務,在AppTaskStart 任務末尾必須釋放AppTask1 任務信號量,此時AppTask1 才使得到其任務信號量正常運行,AppTask1 任務末尾必須釋放AppTask2 任務信號量,此時AppTask2 任務才可運行,以此類推,AppTask16 任務末尾必須釋放AppTask1 任務信號量,此時PC 指針重新回到AppTask1 重新開始下一輪流程。

圖4 系統整體程序流程
如圖5所示,以第一個溫濕度測量任務流程為例(其余溫濕度測量任務流程基本相同)。圖中,變量err為操作系統運行錯誤信息存儲變量,用于在操作系統運行錯誤時,通過讀取該變量即可查看錯誤信息;i為for循環變量,cycle為循環次數;sumTemperatureC1為循環cycle 次后溫度總和;sumHumidityRH1 為循環cycle 次后濕度總和;temperatureC1 為當前溫度數據;humidityRH1 為當前濕度數據。系統通過判斷溫度數據傳輸正常,計算溫度數據總和,通過判斷濕度數據傳輸正常,計算濕度數據總和,當cycle 次循環完成后進行溫度和濕度數據平均值的計算,平均值計算完成后,先后通過串口向上位機發送溫度和濕度數據,其中溫度數據以大寫字母A 開頭,濕度數據以小寫字母a 開頭,發送的溫濕度數據均保留兩位小數。串口數據發送完成后將溫度和濕度數據清零,進行下一次循環計算,函數最后必須釋放AppTask2的任務信號量,系統在延時500 ms 時間內可發起任務調度,因此并不妨礙其余任務函數的運行。

圖5 溫濕度測量任務AppTask1任務函數
若溫度數據和濕度數據傳輸異常,系統則自動清零溫度和濕度數據,并向串口發送“A0.00”和“a0.00”數據,因此通過上位機查看串口發送的數據,若某個通道的數據均為0.00,可判斷該傳感器連接異常。第一個溫濕度測量任務以A 和a 作為溫度數據和濕度數據的首字母,上位機通過判斷數據首字母是A 或a,從而將數據保存至溫度數據文本文件A1.txt 或濕度數據文本文件A2.txt,其余第2~16 個溫濕度測量任務分別以B-P 作為溫度數據的首字母,分別以b-p 為濕度數據的首字母,并將溫度數據保存至文本文件B1.txt-P1.txt,濕度數據保存至文本文件b1.txt-p1.txt。
基于Matlab GUI 開發環境進行系統的上位機設計,包括主界面、串口配置界面、串口調試界面、數據曲線界面、進入監測系統界面等,通過主界面進入各子界面。
如圖6 所示,上位機采用RS232 串口通信方式,以數據首字母A-P 作為溫度數據判斷依據,共16路,數據保存為文本文件:A1.txt-P1.txt。以數據首字母a-p 作為濕度數據判斷依據,共16 路,數據保存至文本文件:a2.txt-p2.txt。通過數據曲線顯示界面,可將16 路溫度數據和16 路濕度數據以實時曲線形式顯示。通過監測系統界面,可將當前16 路溫度數據和當前16 路濕度數據實時顯示,同時可顯示當前16 路溫度分布彩圖和當前16 路濕度分布彩圖。在軟件的串口配置界面可配置串口通信的COM 口、波特率、奇偶校驗位、數據位數、停止位數。在軟件的串口調試界面可從終端機接收數據,以判斷串口通信是否正常。

圖6 上位機設計
數據曲線顯示界面用于顯示16 路溫度曲線和16 路濕度曲線,曲線顯示框通過Matlab(plot 函數)繪圖功能實現,顯示框每1 000 點更新一次,曲線重新開始從當前時間點顯示。
進入監測系統界面用于顯示當前16 路溫度數據和16 路濕度數據,并實時更新。使用Matlab 二維彩圖繪制方法(pcolor 函數),在“溫度分布”和“濕度分布”繪制窗口分別將當前的16 路溫度數據和16 路濕度數據采用彩圖繪制方式進行可視化顯示。
將系統應用于冷氣降溫中。實驗設備包括冷氣機、PC 機、STM32F429 開發板、系統GPIO 外設轉接卡、16 個SHT20 型傳感器、恒溫加熱器、傳熱鋁合金板、多層隔熱組件等。恒溫加熱器向傳熱鋁合金板加熱,實驗時將恒溫加熱器的加熱溫度設定為60 ℃,冷氣機通過內徑為30 mm 的PVC 管向傳熱鋁合金板吹冷氣,在鋁合金板上以相等間隔布置4×4的傳感陣列,以在上位機中模擬溫濕度平面分布。
16 路溫度變化曲線和濕度變化曲線如圖7 所示。采集點數在100 個以內時,系統處于常溫狀態下,此時16 個點的溫度和濕度基本保持一致。打開加熱器后,溫度開始上升,而濕度開始下降,這與實際情況相符,在采集點為200 個左右時,將多層隔熱組件掀開,觀測鋁合金板,此時溫度出現驟降,而濕度出現驟升現象。重新包覆多層隔熱組件后,溫度繼續上升至50 ℃左右的穩態,此時濕度也逐漸降低至26%RH 左右的穩態。打開冷氣機,冷氣隨氣管沖進鋁合金板與多層隔熱組件組成的封閉腔內,此時溫度逐漸開始下降至38 ℃左右的穩態,而濕度逐漸上升至15%RH 左右的穩態。

圖7 溫濕度變化曲線
恒溫加熱器加熱穩態后、冷氣降溫穩態后的溫濕度分布如圖8 所示??芍訜岱€態后,第10 個傳感器的溫度最大,約50 ℃左右,與溫度曲線變化趨勢相符,而其濕度則最低,約12%RH 左右。打開冷氣機冷卻至穩態后,可知第5 個傳感器的溫度最低,約35 ℃左右,而其濕度則最高,約35%RH 左右,這與其最靠近氣管出口有關。

圖8 溫濕度分布
該文基于STM32F429 單片機與SHT20 型溫濕度傳感器,研制了一種多路溫濕度掃描檢測系統,并研制了GPIO 外設轉接卡,在Matlab GUI 開發環境中,設計了系統上位機軟件。在冷氣降溫實驗中,驗證了系統的穩定性與可靠性,得到了符合實際的溫濕度變化趨勢,該系統通用性強,功能易擴展,可應用于多種航天產品生產制造現場。