王建珍
本文給出了一種基于RS-485總線的遠(yuǎn)程溫度控制系統(tǒng)的設(shè)計(jì)方法,不僅可以在本地顯示溫度測量值,還能通過RS-485總線把測量值發(fā)送給主機(jī)端,實(shí)現(xiàn)遠(yuǎn)程通信。
【關(guān)鍵詞】單片機(jī) 溫度 RS-485總線
在倉庫管理、蔬菜大棚等行業(yè),往往需要對各點(diǎn)溫度進(jìn)行測量和控制,而傳統(tǒng)的用溫度計(jì)逐一測量的方法存在測量誤差大、隨機(jī)性強(qiáng)及效率低下的缺點(diǎn)。所以,有必要設(shè)計(jì)一個(gè)高效、高精度、使用方便的溫度控制系統(tǒng)。本文提出了一種遠(yuǎn)程溫控系統(tǒng),該系統(tǒng)能夠?qū)χ匾獢?shù)據(jù)進(jìn)行保存,在主機(jī)端顯示當(dāng)前時(shí)間,設(shè)定溫度上限值并發(fā)送給從機(jī),各從機(jī)通過溫度傳感器自動(dòng)測出當(dāng)前溫度并發(fā)送給主機(jī),當(dāng)溫度超過上限值時(shí),通過蜂鳴器報(bào)警并啟動(dòng)相應(yīng)的風(fēng)扇進(jìn)行降溫。
1 系統(tǒng)總體設(shè)計(jì)
如圖1所示,遠(yuǎn)程溫控系統(tǒng)由主機(jī)端、RS-485總線和各個(gè)從機(jī)端組成。主機(jī)端可置于主控室,各個(gè)從機(jī)端可置于需測量溫度的各個(gè)點(diǎn),如各倉庫。本文以兩個(gè)測量點(diǎn)為例說明。
主機(jī)端包括主機(jī)、按鍵鍵盤、液晶LCD2002、繼電器1、繼電器2、風(fēng)扇1、風(fēng)扇2、時(shí)鐘芯片DS1302、存儲(chǔ)芯片AT24C02及總線接口MAX487組成。其主機(jī)采用單片機(jī)AT89C52,通過按鍵鍵盤設(shè)置溫度上限值和時(shí)間,將設(shè)置的溫度上限值發(fā)送給從機(jī)端,接收從機(jī)端發(fā)來的當(dāng)前溫度測量值,如果從機(jī)1所在測量點(diǎn)當(dāng)前溫度測量值超出上限值時(shí),閉合繼電器1,啟動(dòng)風(fēng)扇1。類似地,如果從機(jī)2所在測量點(diǎn)當(dāng)前溫度測量值超出上限值時(shí),閉合繼電器2,啟動(dòng)風(fēng)扇2。
從機(jī)端由從機(jī)、液晶LCD1602、溫度傳感器DS18B20及總線接口MAX487等組成。從機(jī)也采用單片機(jī)AT89C52,接收主控機(jī)系統(tǒng)發(fā)來的溫度上限值,通過溫度傳感器DS18B20測出當(dāng)前溫度顯示在液晶LCD1602上并發(fā)送給主機(jī)。
主機(jī)和從機(jī)均采用AT89C52單片機(jī),AT89C52有32個(gè)I/O口,內(nèi)含8kB的可反復(fù)擦寫的Flash只讀程序存儲(chǔ)器(ROM)和256B的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM)。單片機(jī)晶振頻率設(shè)為11.0592MHZ。主機(jī)端采用查詢的方式,從機(jī)端采用中斷方式。
主機(jī)端與從機(jī)端通過RS-485總線進(jìn)行通信。RS-485總線工作方式為半雙工方式。網(wǎng)絡(luò)的傳輸線是雙絞線。
RS-485接口芯片選用Maxim公司的MAX487,這是一款半雙工收發(fā)器件。在某一時(shí)刻,一個(gè)發(fā)送,一個(gè)接收。采用差分信號(hào)進(jìn)行數(shù)據(jù)傳輸,在同一個(gè)RS-485總線系統(tǒng)中,其發(fā)送器只能為一個(gè),接收器最多可達(dá)32個(gè),最大傳輸速率為10Mbps,最大傳輸距離為400英尺。
2 硬件電路設(shè)計(jì)
2.1 主機(jī)端
如圖2所示,主機(jī)端電路主要由單片機(jī)、液晶顯示模塊、按鍵鍵盤、蜂鳴器、時(shí)鐘DS1302、存儲(chǔ)器AT24C02、繼電器等組成。液晶顯示模塊用于顯示當(dāng)前時(shí)間和溫度值。按鍵鍵盤由SET、UP、DOWN和OUT四個(gè)按鍵組成,這四個(gè)按鍵一端分別和單片機(jī)的P1.4、P1.5、P1.6、P1.7相連,另一端接地。繼電器RL1、RL2分別和單片機(jī)的P2.0、P2.1相連(圖2中未畫出RL2),接插件J1連接風(fēng)扇電路。當(dāng)主機(jī)接收到從機(jī)1發(fā)來的溫度測量值大于設(shè)定的溫度上限值時(shí),RL1線圈得電,啟動(dòng)相應(yīng)的風(fēng)扇1電路,以達(dá)到降溫的目的。類似地,當(dāng)主機(jī)接收到從機(jī)2發(fā)來的溫度測量值大于設(shè)定的溫度上限值時(shí),RL2線圈得電,啟動(dòng)相應(yīng)的風(fēng)扇2電路。
2.2 從機(jī)端
如圖3所示,從機(jī)端包括單片機(jī)、溫度傳感器DS18B20、液晶顯示模塊、MAX487和蜂鳴器組成。單片機(jī)AT89C52的RXD與TXD分別與MAX487的RO與DI相連,進(jìn)行串行數(shù)據(jù)通信。P3.4與P3.5分別與MAX487的/RE、DE相連,以控制接收器與驅(qū)動(dòng)器使能。采用串行中斷方式。從機(jī)通過DS18B20進(jìn)行溫度采集,然后通過LCD1602進(jìn)行顯示,主機(jī)發(fā)來的溫度上限值顯示于第一行,從機(jī)所在位置的溫度值顯示于第二行。
3 軟件設(shè)計(jì)
3.1 RS-485總線通信協(xié)議
(1)主機(jī)把查詢地址發(fā)送給從機(jī)。
(2)從機(jī)接收查詢地址,并與本從機(jī)地址進(jìn)行比較,如兩地址相同則發(fā)送從機(jī)地址,采集溫度十位、個(gè)位、小數(shù)位,并進(jìn)行累加和校驗(yàn)。
(3)主機(jī)接收從機(jī)發(fā)來的數(shù)據(jù)。
(4)主機(jī)發(fā)送溫度上限值十位、個(gè)位。
(5)從機(jī)接收溫度上限值命令。
(6)主機(jī)如果未查詢完所有的從機(jī),就返回(1)繼續(xù)查詢下一個(gè)從機(jī)
(7)通信速率為9600bps,數(shù)據(jù)幀格式:1位起始位,9位數(shù)據(jù)位,1位停止位,即串行口工作方式為方式3。
(8)主機(jī)發(fā)送從機(jī)地址和溫度上限值的校驗(yàn)方式均為偶校驗(yàn)(每幀數(shù)據(jù)的第8位即D7為偶校驗(yàn)位),主機(jī)接收從機(jī)發(fā)送的匹配地址和采集到的溫度值時(shí)的校驗(yàn)方式為累加和校驗(yàn)。
(9)從機(jī)接收主機(jī)發(fā)送的從機(jī)地址和溫度上限值時(shí)的校驗(yàn)方式為偶校驗(yàn)((每幀數(shù)據(jù)的第8位即D7為偶校驗(yàn)位),從機(jī)發(fā)送匹配地址和采集到的溫度值時(shí)的校驗(yàn)方式為累加和校驗(yàn)。
3.2 主機(jī)端程序設(shè)計(jì)
主機(jī)端程序包括主程序、液晶顯示功能程序、DS1302實(shí)時(shí)時(shí)鐘功能子程序、AT24C02掉電存儲(chǔ)功能子程序、蜂鳴器報(bào)警功能子程序、繼電器輸出控制子程序、按鍵鍵盤子程序及主機(jī)通信子程序。其主程序流程如圖4所示。
首先,進(jìn)行液晶初始化、時(shí)鐘芯片初始化、串行口和T0初始化,然后判斷狀態(tài)標(biāo)志是否為0,如不為0,則進(jìn)入時(shí)間調(diào)整模式;如為0,則進(jìn)入正常工作模式;當(dāng)進(jìn)入正常工作狀態(tài)時(shí),先調(diào)液晶顯示溫度和時(shí)間函數(shù),使顯示溫度和時(shí)間,再調(diào)鍵掃描函數(shù),掃描各功能鍵,設(shè)定溫度上限值。然后調(diào)串行通信函數(shù),串行發(fā)送溫度上限值,最后對接收到的溫度測量值進(jìn)行判斷,如從機(jī)1的溫度測量值大于溫度上限值,則蜂鳴器響1聲報(bào)警;如從機(jī)2的溫度測量值大于溫度上限值,則蜂鳴器響2聲報(bào)警。
主機(jī)通信子程序流程如圖5所示。
3.3 從機(jī)端程序設(shè)計(jì)
從機(jī)端程序包括從機(jī)主程序和從機(jī)通信中斷服務(wù)子程序。從機(jī)主程序流程如圖6所示。
從機(jī)通信中斷服務(wù)子程序流程如圖7所示。
4 結(jié)束語
基于RS485總線的遠(yuǎn)程溫度控制系統(tǒng)具有靈敏度高、精度高、體積小、功耗低的特點(diǎn)。系統(tǒng)結(jié)構(gòu)簡單,開發(fā)成本低,具有較高的性價(jià)比。
參考文獻(xiàn)
[1]張志良.單片機(jī)原理與控制技術(shù)[M].北京:機(jī)械工業(yè)出版社,2008.
[2]甕嘉民等.單片機(jī)典型系統(tǒng)設(shè)計(jì)與制作實(shí)例解析[M].北京:電子工業(yè)出版社,2014.
作者單位
蘇州信息職業(yè)技術(shù)學(xué)院 江蘇省蘇州市 215200