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