程邵華,周 驊
(貴州大學大數據與信息工程學院,貴陽550025)
氣壓與人們的日常生活密切相關。在工業生產中,更加需要對氣壓進行控制,例如在特定的氣壓環境下對某些物品進行保存,或者是在特定的氣壓環境下對某些產品的性能進行檢測等等[1]。為進一步挖掘氣壓控制技術的潛力,在此設計一款恒壓控制系統,采用STM32F407單片機作為系統的主控單元,從硬件電路組成和軟件系統實現兩方面進行論述,并結合PID控制算法提高控制系統的性能。
所設計氣壓控制系統的總體框圖如圖1所示。設計采用12V無刷直流微型氣泵,其作用是對系統進行抽氣和充氣,它通過單片機上面的GPIO輸出的12V電壓進行供電。在電磁閥部分,內部設計有封閉腔,在不同的位置開有通孔,每個孔通向不同的油管。腔中間是閥,兩邊是兩塊電磁鐵,電磁鐵線圈通電后,相應閥體就會被吸引過去,以此通過控制閥體的移動來擋住或露出不同的排氣孔。進氣孔是常開的,高壓氣體會進入不同的排氣管,然后通過氣動電磁閥的氣壓來推動氣缸活塞,這樣通過控制氣動電磁閥的電壓就能夠控制整個電磁閥的機械運動[2]。在本系統中,每個電磁閥都通過導線連接到單片機上對應的GPIO口上。當軟件設置為高電平時,對應的GPIO輸出12V電壓,此時電磁閥導通,氣體能通過該電磁閥;當軟件設置為低電平時,電磁閥關閉[3]。真空箱是實驗中要用到的氣室。系統的實驗任務即是控制真空箱內的氣壓為恒定氣壓值。在真空箱的內部放置氣壓傳感器測量壓力的部分,氣壓傳感器的供電部分則通過真空箱內特制的密閉管道引出,連接在單片機上相應的接口,從而單片機就能不斷獲得真空箱內當前的氣壓值并與設定的目標氣壓值進行對比,通過誤差范圍來控制電磁閥和氣泵執行相應的動作[4]。

圖1 系統總體方案設計
系統中有一個容量為3L的小型氣壓罐,其作用有兩點:當真空箱內氣壓與設定氣壓值差別很小時,關閉氣泵和其他閥門,只開通微調閥,利用微調閥比其他閥門細很多的管道,根據氣壓罐和真空箱之間的氣壓差,對真空箱內的氣壓進行微調;當氣泵對系統進行充氣或者抽氣時,氣壓罐能夠起到緩沖的作用,使得氣壓變化相對平穩。
系統采用ST公司設計的STM32F407芯片作為主控單元。該款芯片基于ARM的cortex-M4內核,擁有高達1MB的FLASH和多達17個的定時器,支持以太網、UART串口、SPI總線等外設接口,主頻高至168MHz[5]。
在以STM32F407芯片作為主控單元的基礎上,根據系統實際需要,設計相應的電路外設[6]。設計用到的STM32單片機電路板實物圖如圖2所示。

圖2 STM32電路板實物圖
電路板上有氣壓傳感器接口、調試串口、驅動7個控制氣體流通的電磁閥和氣泵的GPIO口、氣壓傳感器接口、USART串口等外設。
電源電路設計圖如圖3所示。電路板上不同芯片和GPIO引腳對電壓的需求各有不同,部分引腳需要5V供電;電路板主控芯片為3.3V供電,串口對應的多數引腳也是3.3V供電。因此該部分電路設計由兩部分構成,第一部分以MP1584EN芯片為核心,負責5V輸出;第二部分則以LM1117MP-3.3芯片為核心,負責輸出3.3V電壓。

圖3 電源模塊設計電路圖
實際工作中,總電源接在220V交流電源上,經過轉接器轉換,到STM32電路板中已成為12V輸入,再經MP1584EN芯片轉換,變成5V電壓輸出,以滿足局部電路的電壓需求;再經過LM1117MP-3.3芯片轉換,成為3.3V電壓輸出,用來為氣壓傳感器供電。
電磁閥和氣泵的驅動電路如圖4所示。當程序設置輸入為高電平時,經過單片機電路的相關電壓轉換,高電平會轉為5V電壓為電磁閥驅動電路供電。此時發光二極管D54導通,紅燈會發光,隨后光耦隔離部分導通,右側FQD60N03的N溝道MOS管導通,右側12V與地線GND之間形成回路,電磁閥P26兩端電壓為12V,此時電磁閥導通。
當程序設置輸入為低電平時,電磁閥兩端電壓為0,此時電磁閥關閉。
系統以STM32作為控制的核心單元,通過氣壓傳感器不斷采集真空箱當前的氣壓數值,并且對真空箱當前氣壓和設定的目標氣壓值進行比較,根據當前計算出來的差值做出相應的處理動作[7]。根據7個電磁閥以及氣泵的開和關,可以做成如表1所示的真值表。其中0表示該電磁閥或氣泵處于關閉狀態,1表示處于開通狀態。

表1 電磁閥和氣泵開關真值表
根據此真值表可寫出開關函數。通過調用相應函數即可實現相應的控制功能。例如,如需對真空箱充氣,那就調用實現真空箱充氣這個功能的函數即可。當真空箱氣壓和目標氣壓差距較大時,直接調用控制函數進行充氣和抽氣;當真空箱當前氣壓和目標氣壓差值在一個很小的范圍時,關閉氣泵和其他電磁閥,只開通微調閥,利用真空箱和氣壓罐的壓力差對氣壓進行微調。微調閥通氣管道很細,所以導氣速度相對較慢,結合PID算法,便可在氣壓誤差很小時進行細微調控[8]。
PID控制是一種閉環控制,它包含比例控制、積分控制、微分控制三個控制單元,原理框圖如圖5所示。

圖5 PID控制原理框圖
其中,r(t)為設定的輸入值,c(t)為輸出值,e(t)為設定值與輸出值之間的誤差,即:e(t)=r(t)-c(t),作為經過控制器計算得到的輸出結果。計算公式為:

將該公式進行離散化處理和簡化,得到增量式PID公式:

式中,Ki、Kp、Kd分別為比例系數、積分系數和微分系數。Δu(k)是PID運算一次得到的增量。
按照設計,當真空箱當前實際氣壓值和設定目標氣壓值的誤差值處于一個較小的區間時,就采用PID控制結合微調閥來進行調節。通過多次測量與分析,定量地得出微調的速度。再找到經過PID計算得到的增量與微調速度之間的對應關系,把PID計算的增量經過數學處理,作為微調閥的微調時間。當氣壓誤差在允許的范圍內時,所有的電磁閥關閉;當氣壓誤差較大時,通過氣泵對真空箱抽氣或充氣做出調節;當氣壓誤差較小時,只有微調閥開通,這時候利用真空箱與氣壓罐之間的壓差進行微調。
系統的軟件部分選用KeilμVision5開發平臺進行設計,包括外設初始化、電磁閥控制函數、氣壓傳感器接收數據處理等。用C語言編寫和實現PID控制器,主要由main函數組成。系統軟件流程圖如圖6所示。
主函數是程序的入口,主要實現相關外設的初始化。氣壓傳感器采集真空箱當前氣壓值,交由控制器與設定氣壓值進行比較,得出氣壓誤差值,根據誤差決定下一步的動作。經過多次調試和實驗,最終決定把氣壓誤差分為幾個區間來進行處理。當氣壓誤差大于2時,對真空箱直接充氣;當誤差在0.2到2之間時,因為與目標氣壓相距很小,此時采用PID控制算法對氣壓微調充氣;當誤差在±0.2以內時,因為此誤差值處于允許誤差范圍以內,此時所有電磁閥關閉,系統不動作;當誤差小于-2時,對真空箱抽氣;當誤差在-2到-0.2之間時,采用PID算法對氣壓進行微調抽氣;當氣壓誤差絕對值在0.2到2之間時,進行微調充氣或者微調抽氣。
為確定微調時間,需要借助于實驗和相關的測試,摸索出PID算法計算值與微調速度之間的關系。將PID計算出來的增量經過一系列的運算,將其作為微調充氣或者抽氣的時間。
經多次實驗,系統能夠把氣壓誤差穩定控制在±0.2hPa以內。部分實驗結果數據如表2所示,顯示了當真空箱目標氣壓設為不同數值時對應的一個小時以內的控制效果。

表2 不同目標氣壓值控制效果單位:hPa
基于STM32F407主控芯片設計的氣壓控制系統,采用PID控制算法,實現了實時信息采集,并經過快速比較與計算,準確執行相應的動作。經過多次實驗測試,該系統能夠把真空箱內的氣壓控制在目標氣壓的±0.2h P a以內,控制效果頗為理想。