徐道黎 耿子賀 矯越
(山東建筑大學(xué),山東濟(jì)南 250101)
溫度控制在生產(chǎn)和生活中廣泛應(yīng)用,溫度控制系統(tǒng)現(xiàn)在多采用PID 控制算法,輸出采用的是可控硅控制,這種控制系統(tǒng)控制精度高,成本較高,安裝調(diào)時需要專業(yè)人員,在使用過程中出現(xiàn)環(huán)境變化等,PID 的參數(shù)需要重新進(jìn)行調(diào)整,否則控制精度就會受到影響。溫度控制多采用獨立控制的單個溫度控制模塊,溫度的顯示和溫度控制的設(shè)定需要人工在現(xiàn)場進(jìn)行查看和操作,需要多溫度同時顯示和控制的場合使用時,安裝和使用都很復(fù)雜。針對成本敏感和組網(wǎng)需求的應(yīng)用場景,提出并設(shè)計了一種多路溫度控制系統(tǒng)。
溫度控制系統(tǒng)中,通訊協(xié)議、通訊方式對系統(tǒng)設(shè)計有關(guān)鍵的影響,考慮到控制系統(tǒng)的可擴(kuò)展性和分散性特點,從應(yīng)用角度出發(fā),在通信的物理層采用RS-485 總線連接,應(yīng)用層采用MODBUS 協(xié)議進(jìn)行通信??紤]成本和穩(wěn)定性的因素,輸出采用開關(guān)控制。
溫控系統(tǒng)可以獨立運行,也可以聯(lián)網(wǎng)運行。通過溫度傳感器,檢測實時溫度,對檢測的現(xiàn)場溫度和設(shè)定溫度的比較,判斷輸出的狀態(tài),控制繼電器閉合或者斷開,使加熱或降溫設(shè)備間歇運行或停止,來達(dá)到控制溫度的目的。同時,傳感器檢測的溫度數(shù)據(jù)和設(shè)定的溫度存儲在寄存器中,可以通過MODBUS 通信協(xié)議對相應(yīng)的寄存器進(jìn)行讀取或者寫入。系統(tǒng)整體方案如圖1所示。
圖1 系統(tǒng)整體方案圖
MODBUS 通信協(xié)議中的總線上的設(shè)備分兩類,為主設(shè)備和從設(shè)備,在某一時間下,總線上只能其中一個設(shè)備發(fā)送數(shù)據(jù),如果多個設(shè)備同時在總線上發(fā)送數(shù)據(jù),總線就是出現(xiàn)數(shù)據(jù)混亂,任何設(shè)備都無法接受正常數(shù)據(jù)。MODBUS 協(xié)議中通常是由主設(shè)備發(fā)起數(shù)據(jù)發(fā)送,對總線上其中一個從設(shè)備進(jìn)行查詢,從設(shè)備根據(jù)接收到的主設(shè)備發(fā)送的查詢信息作出相應(yīng)的反應(yīng)進(jìn)行回應(yīng),發(fā)送回應(yīng)流程如圖2 所示。為了保證傳輸效率,該系統(tǒng)采用RTU傳輸模式。
圖2 查詢- 回應(yīng)指示圖
MODBUS-RTU 模式要求任何設(shè)備要開始發(fā)送或者結(jié)束發(fā)送時,都要在總線上等待一個3.5 個字符以上的時間間隔。RTU模式中在起始的時間間隔后,先傳輸?shù)氖? 位的設(shè)備地址。接收設(shè)備處于空閑狀態(tài)時,要不停的判斷總線上是不是有數(shù)據(jù)傳輸,這個過程是通過監(jiān)聽總線上是不是有起始的時間間隔。如果接收到起始的時間間隔后,所有的總線上的接收設(shè)備都會接收后來發(fā)送的數(shù)據(jù),當(dāng)設(shè)備接收到第一個部分,也就是設(shè)備地址,所有的接收設(shè)備都會進(jìn)行將收到的設(shè)備地址和自己的地址進(jìn)行比較判斷,收的設(shè)備地址是不是與自己的地址匹配。最后一個部分傳輸完后,發(fā)送設(shè)備需要發(fā)送一個大于3.5 個字符的時間間隔表示該條消息發(fā)送結(jié)束,之后如果再發(fā)送消息重新按照上規(guī)則發(fā)送。
校驗部分是采用的循環(huán)冗余校驗(CRC),應(yīng)用的CRC 校驗是CRC-16 版本,該版本的校驗結(jié)果為16 位,兩個字節(jié)組成。這一個部分是發(fā)送設(shè)備通過計算后放在消息幀中的。接收設(shè)備接收到消息后,需要根據(jù)除了校驗部分以外的部分計算收到消息的CRC 校驗值,與消息中包含的CRC 校驗部分的數(shù)值比較,如果收到的校驗碼和計算的校驗碼不同,就判斷該數(shù)據(jù)幀存在錯誤,接收設(shè)備回復(fù)相應(yīng)的錯誤提示數(shù)據(jù)幀。
消息的發(fā)送是要保證是連續(xù)發(fā)送的,如果傳輸數(shù)據(jù)的過程中出現(xiàn)大于1.5 個字符的時間間隔,接收數(shù)據(jù)的設(shè)備會確定為發(fā)送設(shè)備發(fā)送的消息發(fā)送已經(jīng)傳輸完畢,接收設(shè)備停止接收,處理當(dāng)前接收完畢的不完整的消息,并認(rèn)定接下來發(fā)送的下一字節(jié)的消息是一個全新的消息。這樣接收到的消息CRC 校驗部分的數(shù)值錯誤,這樣接收設(shè)備將其確定為錯誤數(shù)據(jù)。MODBUS-RTU 的消息幀如下所示:
?
電源部分采用LM2596S-5V 電源芯片進(jìn)行第一級降壓,主要作用是驅(qū)動繼電器和單片機供電;第二級降壓采用AMS1117-3.3 電壓芯片,輸出的3.3V 電壓是提供溫度采集的基準(zhǔn)電壓;電源輸入部分支持12-24V 輸入,采用電感進(jìn)行濾波,壓敏電阻、自恢復(fù)保險絲和瞬態(tài)二極管(TVS)組成保護(hù)電路進(jìn)行保護(hù)。通信部分采用MAX485 芯片,同時增加由瞬態(tài)二極管(TVS)和自恢復(fù)保險管組成的通信保護(hù)電路,由限流電阻和LED 指示燈組成的通信收發(fā)指示燈。繼電器驅(qū)動采用ULN2003達(dá)林頓驅(qū)動芯片,溫度采集的部分采用電阻進(jìn)行分壓。硬件系統(tǒng)結(jié)構(gòu)如圖3 所示。
圖3 硬件系統(tǒng)結(jié)構(gòu)圖
溫度采集電路采用分壓電路進(jìn)行實現(xiàn),采用的基準(zhǔn)電壓為3.3V,增加電容去除干擾,溫度傳感器采用外接方式,采用2.54mm 間距的接口與NTC 溫度傳感器進(jìn)行連接。因為傳感器采用外接方式,為了方便安裝時確定傳感器是否正常,在設(shè)計中,每一路溫度傳感器都增加了指示燈,通過指示燈可以直觀顯示傳感器狀態(tài)。溫度采集電路設(shè)計如圖4 所示。
圖4 溫度采集電路
根據(jù)溫度采集電路的設(shè)計,ADC 采集的電壓值和熱敏電阻阻值的關(guān)系:
轉(zhuǎn)換得到熱敏電阻的阻值:
電源輸入保護(hù)主要包括防止電源反接保護(hù),系統(tǒng)內(nèi)部短路保護(hù),過電壓保護(hù)。電路部分采用自恢復(fù)保險和二極管組成反接保護(hù)和短路保護(hù)電路,壓敏電阻進(jìn)行過電壓保護(hù),增加電感對輸入的電源進(jìn)行濾波,保證系統(tǒng)運行穩(wěn)定,如圖5 所示。
圖5 輸入保護(hù)電路
通信保護(hù)電路主要保證通信的穩(wěn)定,防止通信線路的故障對系統(tǒng)造成損壞。主要保護(hù)策略包括總線短路和過流的保護(hù),總線間過電壓保護(hù),單總線過電壓保護(hù)。電路設(shè)計上,采用自恢復(fù)保險絲對短路和過流保護(hù),采用雙向瞬態(tài)二極管和單向瞬態(tài)二極管對總線間過電壓和單線過電壓保護(hù),通信保護(hù)電路如圖6。
圖6 通信保護(hù)電路
主程序首先完成對相關(guān)外設(shè)的初始化設(shè)置,并啟動相應(yīng)的單片機外設(shè),之后完成對其他子程序的調(diào)用;通信子程序?qū)崿F(xiàn)通信協(xié)議的解析和收發(fā),完成對寄存器數(shù)據(jù)的讀取和寫入;看門狗子程序通過異常狀態(tài)復(fù)位保證模塊穩(wěn)定性,斷電記憶子程序?qū)⒃O(shè)定溫度進(jìn)行寫進(jìn)EEPROM保存,啟動時讀取。溫度采集處理、溫度比較和輸出控制實現(xiàn)控制邏輯。
對于溫度檢測采用的是NTC 熱敏電阻溫度傳感器,采用單片機內(nèi)置10 位ADC 對電壓值進(jìn)行采集,根據(jù)熱敏電阻的溫度- 電阻特性曲線計算得到熱敏電阻的溫度值。
根據(jù)負(fù)溫度系數(shù)電阻與溫度關(guān)系得:
其中RNTC為熱敏電阻的當(dāng)前阻值,R1為分壓電阻阻值,UVCC為基準(zhǔn)電壓,UADC為ADC 采集的輸入的電壓值,B 為材料常數(shù),由NTC 熱敏電阻特性決定,R0為熱敏電阻常溫(25℃)的標(biāo)稱阻值,T0為常溫時的溫度,TNTC為熱敏電阻當(dāng)前阻值對應(yīng)的溫度,其中T0、TNTC采用開氏溫度計算。
R1分壓電阻為39K,UVCC基準(zhǔn)電壓為3.3V,UADC為采集的實時電壓值,B 值為3950,R0的阻值為10K,T0為常溫25℃。將已知數(shù)據(jù)帶入公式(5)計算可以得到實時的溫度。
Modbus 通信接收起始和停止標(biāo)志判斷程序是通過串口中斷配合定時器和定時器中斷實現(xiàn)的,初始狀態(tài)時,設(shè)備處于接收狀態(tài),總線空閑時,串口沒有數(shù)據(jù)接收,不會產(chǎn)生中斷;當(dāng)有數(shù)據(jù)傳輸時,串口接收數(shù)據(jù)并在每一個字節(jié)(8 位)接收完畢后都會產(chǎn)生一個中斷。在數(shù)據(jù)傳輸過程中,串口中斷會不斷清零定時器的初值,定時器不會達(dá)到計數(shù)上限。當(dāng)數(shù)據(jù)傳輸完畢后,串口接收不會再產(chǎn)生中斷,此時定時器初值不會被清零,定時器會計數(shù)達(dá)到計數(shù)上限,然后產(chǎn)生定時器中斷,這樣就表明這一個消息幀接收完畢。定時器產(chǎn)生的中斷可以啟動后續(xù)的數(shù)據(jù)處理程序。
定時器計數(shù)上限的確定,計數(shù)器采用16 位制動重裝載模式,時鐘設(shè)置為CPU 時鐘12 分頻,計數(shù)上限設(shè)置根據(jù)波特率、系統(tǒng)頻率和分頻系數(shù)設(shè)置,計算公式如下:
其中,Ttim為定時器的定時周期,SYSclk 為系統(tǒng)時鐘,Nmax為定時器的計數(shù)上限值。
波特率與接收或發(fā)送時間的關(guān)系:
其中T 為發(fā)送一位所需要的時間,baudRate 為通信的波特率。
SYSclk 系統(tǒng)時鐘為11059200Hz,通信波特率為9600,需要的時間間隔為3.5 字符。一個字節(jié)加上停止位和起始位需要11位。計算得到所需要的定時器計數(shù)上限。
考慮了成本和穩(wěn)定性等因素,設(shè)計了一種多路溫控系統(tǒng),支持四路獨立溫度測量和四路獨立繼電器輸出控制。設(shè)計中,增加了多重保護(hù)電路,實現(xiàn)穩(wěn)定運行;增加了記憶存儲功能,模塊斷電恢復(fù)時免去重復(fù)設(shè)置;采用MODBUS 協(xié)議,組網(wǎng)使用方便?;谝陨咸攸c,該多路溫控系統(tǒng)可以應(yīng)用在多種需要溫度控制的現(xiàn)場,提高效率和質(zhì)量,降低成本。