彭 杰,李星月,郎佳紅,鄭詩程
(安徽工業大學 電力電子與運動控制重點實驗室,安徽 馬鞍山 243002)
隨著社會的快速發展,生產生活中對于能源的需求越來越大,用戶對于生活質量的要求也越來越高。目前,市面上的太陽能熱水器盈千累萬,但大多容易出現數據采集有誤、監控有效范圍過短、上水量控制不合理等問題。本文為解決此類問題設計了一種基于STM32的太陽能熱水器控制系統。以STM32為主控制芯片,結合其他硬件電路和設計完成對太陽能熱水器的本地監控和遠程監控,其中本地監控模塊采用MCGS為系統的人機交互界面,能夠向用戶傳達信息。遠程監控采用GPRS模塊與用戶的手機或電腦連接,使用戶在各個地方都能對系統進行監控。整個系統優化了傳感器的選取,同時與物聯網技術結合,有針對性地解決了傳統控制系統中的不足,使用戶能夠隨時隨地查看熱水器的狀態并進行操控,滿足了用戶需求,節省了更多能源,提升了用戶體驗。
系統是由主控制器、傳感器、電輔熱裝置、上水控制裝置、GPRS通信模塊、云服務平臺、本地監控和遠程監控端組成。其中,電輔熱裝置和上水控制裝置由繼電器和執行器組成,執行器分別為加熱棒和電磁水閥。本地監控端通過MCGS觸摸屏來實現監控,遠程監控端則是使用PC機實現監控。
通過單總線技術實現STM32與外部傳感器的通信,并把從溫度傳感器和液位傳感器得到的水溫和水位轉換成可傳輸的電信號,再將電信號傳輸給核心主控制模塊,主控制模塊對接收的數據進行加工、處理和顯示。通過RS 485通信電路將數據傳輸給MCGS觸摸屏。MCGS觸摸屏會顯示出采集到的實時水溫和水位,用戶可以直接在觸摸屏上進行簡單的操作。在執行器模塊設計中,當水位采集值低于設定值時,主控制器會做出相應動作,使得繼電器和電磁水閥通電開始工作,直至達到用戶設定的理想水位;當水位采集值高于設定值時,主控制器會做出相應動作,使得繼電器和電磁水閥斷電停止工作,即已實現用戶的需求時就不再進行上水。同理,由于控制電路和繼電器的選擇相同,則加熱棒的工作情況也與上述相同。溫度傳感器和液位傳感器在斷電后會自動保存數據,這一功能使得用戶設置的參數會保留在單片機的存儲空間中,這種“記憶功能”方便了用戶再次通電使用。系統中加入了GPRS通信模塊,主控制器通過GPRS通信模塊將數據傳輸至云服務平臺,云服務平臺與電腦監控端相連接,方便用戶對系統進行控制。監控系統還具備定時功能,用戶可以根據需求設置加熱和上水的時間。本文設計的智能控制系統結構如圖1所示。本系統彌補了傳統控制系統數據測量不精確、智能化水平不高等不足,不僅可以給用戶的生活帶來極大的便利,而且也使用戶的生活環境更加愜意和安全。

圖1 太陽能熱水器系統結構
主控制器作為控制和模塊協調的中樞,其選擇必須面面俱到。對現有系統的發展需求進行分析,設計了兩個USART接口分別實現本地和遠程監控,1個A/D口實現水位檢測,以及1個單總線和多個I/O口實現更多功能。此外,還需要對用戶的使用數據進行記錄和處理。綜合上述要求,選定STM32F103ZET6作為本系統的主控制器。
本系統需要對水溫進行精確測量,其水溫范圍約為0~100 ℃。因此,選定DS18B20作為本系統的溫度測量模塊。DS18B20是一種單總線接口的數字化溫度傳感器,遵循單總線通信協議。通過STM32單片機的通用GPIO引腳來實現與溫度傳感器的通信,并把從溫度傳感器得到的數據傳輸到顯示屏上。
DS18B20內部結構框圖如圖2所示,圖中ROM的64位序列號是DS18B20的地址序列碼,因此一條總線上可以同時掛接多個DS18B20,不會出現混亂現象。此外,用戶可以根據需求自定義非易失性溫度報警上限值TH和下限值TL,斷電后此數據依舊被保存。當DS18B20完成測溫后,所測數值會自動與用戶設定的TH和TL的觸發值相比較,如果測溫結果不在設定值范圍內,DS18B20內部的告警標志就會被置位,表示溫度值超出了設定范圍。

圖2 DS18B20內部結構框圖
本系統的壓力傳感器選用的是KY系列壓力傳感器,在STM32單片機的控制下,模擬量通過A/D轉換,可以保證采集到的數據有較高的精度。
壓力傳感器的應用電路如圖3所示,它采用的是硅壓阻式差壓壓力芯體,P-out端口的輸出電壓與檢測口處的壓強呈正比例線性關系。根據帕斯卡定律,液體內部壓強與液體深度有關。因此將檢測口放于水箱底部,通過測量P-out端口的輸出電壓,即可計算出水箱水位。使用前須將檢測口放置在太陽能熱水器蓄水箱底端,導氣管高于水箱頂部,這樣當液面高于檢測口時,測量點處的壓強即為液體壓強。使用時VCC端口接5 V的電壓,GND端口接5 V所對應的GND,P-out端口接控制器的A/D引腳,通過對該引腳的電壓進行采樣轉換即可得出水箱的水位。

圖3 壓力傳感器電路
本系統的執行器模塊設計包括電輔熱模塊和上水控制模塊。電輔熱模塊包含繼電器和電加熱棒,上水控制模塊包含繼電器和電磁水閥。繼電器是具有隔離功能的“自動開關”元件,是實現外部設備控制的主要手段,因此繼電器的有效控制是執行器模塊安全穩定運行的保證。本系統通過分析電加熱棒和電磁水閥的功率,最終選用了HRS4H-S-DC12 V型繼電器。主控制器通過繼電器驅動電路實現對繼電器的控制,從而達到加熱、上水和停止執行的目的。
繼電器驅動電路如圖4所示,結合電路圖介紹執行加熱動作的工作過程。圖中的SIGNAL-IN1連接主控制器的PB3口,執行器為電加熱棒。當需要打開加熱開關時,控制器使該I/O口輸出高電平信號,此時MC1413輸入引腳4腳為高電平,輸出引腳13腳為低電平,繼電器K2通電吸合,使得繼電器輸出側2A和2B導通,輸出回路中的加熱棒通電工作,系統開始對水箱中的水進行加熱,同時指示燈LED6發光。當加熱到指定值時,控制器使PB3口輸出低電平,MC1413的13腳輸出為高電平,繼電器斷電釋放,電加熱棒斷電停止工作,加熱動作結束。

圖4 繼電器驅動電路
上水與加熱的控制電路原理與繼電器驅動電路原理相同,兩個繼電器都選擇了MC1413進行控制,僅僅是執行器的不同,由電加熱棒換成了電磁水閥。本方案選用的電磁水閥是AC 220 V常閉銅電磁水閥。當接入220 V交流電時開關開啟,斷電時開關閉合,分別執行相應動作。為防止加熱棒在水中腐蝕過快,選擇的加熱棒是經久耐用的AC 220 V整體防水加熱管,其正常工作時的功率為1 000 W。所選的HRS4H-S-DC 12 V型繼電器輸出側最高可承受2 500 W功率,即所選加熱棒正常工作時的功率在繼電器可承受的功率范圍內。
本系統設計兩個通信模塊,實現本地監控和遠程監控。選用RS 485實現本地監控,主控制器通過RS 485與本地客戶端完成數據交互,RS 485的連接方式如圖5所示。遠程監控是讓控制器與SIM800C模塊相連接,將SIM800C作為傳 輸中介來實現與遠程監控客戶端的數據交互。

圖5 RS 485連接
RS 485串口通信電路如圖6所示。從圖6可以看出:STM32單片機采用SP3485作為收發器,A、B接口用于連接485總線;通過STM32F1的PD7控制SP3485的收發,當PD7=0時為接收模式,當PD7=1時為發送模式。兩個偏置電阻用來保證總線空閑時,A、B之間的電壓差都大于200 mV,從而避免因總線空閑引起的A和B壓差不定、邏輯錯亂以及出現亂碼的現象。USART2 TX和USART2 RX分別與主控制器的PA2、PA3相連。控制器輸出的TTL電平通過SP3485芯片轉成了485電平,485電平信號通過RS 485串口線可被MCGS或其他設備接收。同樣地,由MCGS或其他設備發出的485電平也可通過該芯片轉換為控制器可識別的TTL電平,從而實現主控制器與其他監控設備的數據交換。

圖6 RS 485串口通信電路
SIM800C通信模塊采用高性能工業級GPRS開發板,可以在低功耗的情況下實現與遠程監控客戶端的數據交互,其電路原理如圖7所示。

圖7 SIM800C模塊原理
使用時需要插入一張SIM卡,明確遠程客戶端的IP地址后,主控制器通過串口發送AT指令,此時模塊向遠程客戶端的IP地址發送數據,遠程客戶端的TCP服務器在接收到數據后將其轉化為可視數據顯現給用戶。同時,遠程客戶端也可以向SIM卡反饋指令,SIM800C接收到指令后將其轉送到主控制器,主控制器解析控制指令并做出響應。此外,系統能夠根據需求隨時開啟或暫停SIM800C通信模塊。
在主循環程序中,首先完成主控制器與客戶端的自動配網,實現信息交互。然后,對傳感器模塊的子程序進行調用,讀取檢測實時數據。根據采集到的數據判斷系統工作狀態有無異常,若有異常,則跳轉至異常狀態處理子程序;若無異常,則判斷是否接收到控制指令。本地監控端和遠程監控端均可對系統發出控制指令,若接收到控制指令,則響應相應指令;若沒有接收到控制指令,則繼續執行執行器子程序,讓系統處于正常的工作狀態。聯網后,不斷調用數據顯示子程序,并讓主程序一直處于循環狀態,將有效數據可視化地通過本地監控端和遠程監控端呈現給用戶,其流程如圖8所示。

圖8 主程序流程
執行器子程序包括控制上水和加熱動作的操作過程。由于兩者的執行過程大致相同,下面僅以加熱動作為例,介紹執行器子程序的運行流程,其流程如圖9所示。

圖9 加熱流程
將檢測到的實時溫度值與設定溫度值進行比較,當實時溫度值高于或等于設定溫度值時,主控制器通過驅動電路控制繼電器斷電,加熱棒電源被斷開,加熱停止;當實時溫度值低于設定溫度值時,判斷系統是否處于可以進行加熱的狀態,即判斷當前水箱中的水位是否達到可加熱水位下限值,防止出現干燒的情況。若水位過低,則控制器向客戶端發出低水位告警指令;若水位符合加熱要求,主控制器通過驅動電路控制繼電器吸合,加熱棒電源被開啟,開始加熱,直至實時溫度值達到設定溫度值時,加熱棒電源被斷開,停止加熱。
異常情況通常表現為水位過低和水溫過高造成干燒、炸管等現象,異常狀態檢測與處理流程如圖10所示。

圖10 異常狀態檢測和處理流程
系統根據實時水位和水溫與設定值進行比較,當水位低于10%時,客戶端將會收到低水位警告。此時,若水溫低于90 ℃,系統執行上水動作;若水溫高于90 ℃,大概率會發生炸管的情況,系統發出警示并不執行上水動作。當水位低于20%時,同樣可能會發生干燒的情況,系統發出警示并設置系統不可加熱。當水位高于20%時,符合加熱時的水位要求,即可設置系統執行加熱動作。當判斷系統處于異常狀態時,客戶端會收到警示,同時系統會做出保護動作。
本文設計了以MCGS組態軟件為基礎的太陽能熱水器本地監控系統,系統對數據做出采集、分析和顯示。對異常數據進行報警提醒,實現設備精準化維護。由于嵌入式版可視化程度較高、功能較多,因此將其作為觸摸屏組態軟件搭建的基礎環境。完成組態后,主控制器與MCGS通過Modbus協議實現串行通信。利用腳本開發MCGS設備通信驅動,驅動開發結束后,可以與系統實行通信,執行太陽能熱水器的信息采集。數據傳輸通過TCP/IP協議實現,將屏幕與主控制器的通信接口互聯,經過以太網將數據上傳至主機,實現實時監控。
完成硬件連接后,MCGS向主控制器發送查詢指令,主控制器接收到指令后,按照傳輸協議傳輸數據,MCGS接收到數據后會將其寫入實時數據庫定義的變量中。這些變量與用戶窗口上的控件關聯,當變量值改變,用戶窗口上的數據會隨之改變。若MCGS需要對變量做出更改,MCGS將向主控制器發送寫指令,控制器接收到指令后,將對變量值進行更改,同時會按照傳輸協議回應一串數據,MCGS讀取到數據后表示修改完成,也可以控制執行上水、加熱等操作。
所設計的硬件平臺在接入12 V直流電源后,系統正常工作。將MCGS與控制板通過RS 485串口線連接,實現了MCGS與主控制器的持續通信,并將采集的數據發送給MCGS,在觸摸屏上顯示。在用戶窗口中設置小窗口,用戶可根據需要對參數和工作狀態進行修改。
MCGS觸摸屏與LCD顯示屏的測試對比如圖11所示。當設定好水位后,點擊上水按鈕,其開關狀態會立即發生變化,對應的繼電器指示燈會被點亮。LCD顯示屏中S1、S2分別表示上水開關和加熱開關,S1置1,S2仍置0。Temp表示當前水溫,Depth表示當前水位,其值在不斷更新變化。Mode表示當前系統工作模式,顯示為Auto即自動模式。T1表示上水時間,A1表示設定水位;T2表示加熱時間,A2表示設定溫度。MCGS觸摸屏中水管不斷有液體填充,實時水位也在不斷檢測和更新。此外,可以看出MCGS觸摸屏中顯示的數據與LCD顯示屏中的數據完全一致。經過測試表明,MCGS完全實現了本地監控的功能。

圖11 MCGS觸摸屏與LCD顯示屏測試對比
遠程客戶端是在Qt5.8開發環境下所編寫的TCP服務器界面。主控制器借由SIM800C模塊與遠程監控客戶端實現,由于SIM800C發送或接收的數據經由GPRS傳輸,因此用戶只要能夠連接到網絡,即可對太陽能熱水器的參數和狀態進行查看和更改。SIM800C與該界面通過GPRS進行數據傳輸,通信協議為TCP/IP協議。
打開上位機監控界面后,主控制器會自動與監控系統連接,之后就可以進行數據交互。主控制器將收集的數據通過SIM800C發送至遠程監控界面,監控系統接收到數據后將其顯示給用戶,當用戶在界面上進行操作時,界面也會有相應變化。當用戶在界面上點擊加熱按鈕時,會向控制器發送指令,主控制器通過SIM800C接收到指令后控制加熱繼電器吸合,加熱指示燈亮的同時LCD屏中的系統狀態參數也會隨之更改。由圖12所示的測試結果可知,設計的遠程監控系統能夠實現對太陽能熱水器的監測和控制。

圖12 上位機監控界面與LCD顯示屏測試對比
本文將太陽能熱水器控制系統與物聯網技術深度融合,為監控操作受位置影響較大等問題提供了新的解決途徑。其中主控制器的選取是設計新型智能控制系統的關鍵,本地監控和遠程監控是系統設計的核心環節。另外,由于已有的太陽能熱水器中存在傳感器測量不精確、智能化程度不高等問題,因此本文還在系統中設計了手動、自動、智能三種模式進一步實現智能化,優化了太陽能熱水器控制系統。