(閩南理工學(xué)院 電子與電氣工程系,福建 石獅 362700)
遠(yuǎn)程溫度檢測(cè)系統(tǒng)在日常的工業(yè)生產(chǎn)中應(yīng)用廣泛。由于RS-485總線采用平衡發(fā)送和差分接收,因此具有抑制共模干擾的能力[1],適用于遠(yuǎn)程的數(shù)據(jù)通信系統(tǒng)。在20Kbps的傳輸速率以下,RS-485總線最大的傳輸距離可達(dá)到1219米[2,3]。RS-485總線只需要一對(duì)雙絞線就可以構(gòu)成多點(diǎn)采集系統(tǒng)[4],具有布線簡(jiǎn)單,成本低廉等優(yōu)點(diǎn),因此,本文采用RS-485總線進(jìn)行遠(yuǎn)程通訊,將檢測(cè)到的溫度通過(guò)RS-485總線傳輸至主機(jī),進(jìn)行溫度的顯示。
該遠(yuǎn)程溫度檢測(cè)系統(tǒng)主要由前端溫度檢測(cè)模塊、RS-485收發(fā)模塊和主機(jī)接收通訊模塊三大部分組成,系統(tǒng)的總體框圖如圖1所示。該系統(tǒng)主要實(shí)現(xiàn)的功能是將前端檢測(cè)到的溫度通過(guò)RS-485總線進(jìn)行遠(yuǎn)距離的發(fā)送,由另一單片機(jī)接收后,再通過(guò)串口傳輸至PC機(jī)進(jìn)行溫度的顯示。
圖1 遠(yuǎn)程溫度檢測(cè)系統(tǒng)總體框圖Fig1 Block diagram of the remote temperature detecting system
前端溫度檢測(cè)模塊負(fù)責(zé)溫度的檢測(cè),主要由溫度檢測(cè)模塊、液晶顯示模塊、單片機(jī)控制模塊等部分組成。溫度檢測(cè)模塊采用單總線溫度傳感器DS18B20將檢測(cè)到的溫度發(fā)送至AT89C51單片機(jī),并在液晶LCD1602上顯示檢測(cè)到的溫度,其總體硬件電路原理圖如圖2(a)所示。
圖2 遠(yuǎn)程溫度檢測(cè)系統(tǒng)硬件電路圖(a)前端溫度檢測(cè)模塊 (b)RS-485 收發(fā)模塊(c)主機(jī)接收通訊模塊Fig2 Schematic of the remote temperature detecting system(a)Front-end temperature detecting module(b)RS-485 transceiver module(c)PCreceiving communication module
溫度檢測(cè)模塊采用DS18B20作為溫度傳感器。DS18B20采用“1-wire總線”的接口,其溫度檢測(cè)的范圍為-55℃~+125℃,精度可達(dá) 0.0625℃,最大的轉(zhuǎn)換時(shí)間為200ms[5]。本系統(tǒng)中將DS18B20的數(shù)據(jù)接口DQ接到51單片機(jī)的P3.7,并給I/O線提供一個(gè)上拉電阻。
液晶顯示模塊采用LCD1602,顯示DS18B20檢測(cè)到的溫度,為了充分發(fā)揮DS18B20的精度,顯示四位小數(shù)。
單片機(jī)控制模塊負(fù)責(zé)將DS18B20檢測(cè)到的溫度在LCD1602上進(jìn)行顯示,并且將數(shù)據(jù)發(fā)送至RS-485總線。
由于單片機(jī)在讀取DS18B20的溫度數(shù)據(jù)時(shí),每次讀取兩個(gè)字節(jié),先讀低8位,再讀高8位,每一位代表不同的溫度加權(quán)值。因此需要由單片機(jī)控制模塊進(jìn)行數(shù)據(jù)處理,得到溫度的實(shí)際數(shù)值后,再分別將百位、十位、個(gè)位、小數(shù)點(diǎn)后四位的數(shù)值分離出來(lái),在LCD1602上進(jìn)行顯示。
前端溫度檢測(cè)模塊的軟件流程圖如圖3所示。系統(tǒng)上電復(fù)位后,對(duì)串口進(jìn)行初始化,設(shè)置其工作方式以及波特率,然后對(duì)DS18B20進(jìn)行讀寫操作,將讀取到的數(shù)值轉(zhuǎn)換為對(duì)應(yīng)的溫度值,通過(guò)串口發(fā)送至RS-485總線。
圖3 前端溫度檢測(cè)程序流程圖Fig3 Program flow of front-end temperature detection
常見的RS-485總線驅(qū)動(dòng)芯片有TI公司的SN系列,美信公司的MAX系列,為了該溫度檢測(cè)系統(tǒng)具有更好的可擴(kuò)展性,本設(shè)計(jì)選擇MAX487作為RS-485收發(fā)器。MAX487可驅(qū)動(dòng)128個(gè)節(jié)點(diǎn),其電路圖如圖2(b)所示。MAX487的發(fā)送和接收功能轉(zhuǎn)換是由芯片的端控制的:當(dāng)時(shí),MAX487處于發(fā)送狀態(tài);當(dāng)時(shí),MAX487處于接收狀態(tài)。
在本系統(tǒng)中,由前端溫度檢測(cè)模塊采集并處理后的溫度數(shù)據(jù)經(jīng)過(guò)一片MAX487驅(qū)動(dòng)后發(fā)送到485總線,經(jīng)遠(yuǎn)程傳輸后,由另一片MAX487接收,傳輸給與上位機(jī)進(jìn)行通訊的單片機(jī)。
經(jīng)過(guò)處理的溫度數(shù)據(jù)由RS-485總線遠(yuǎn)程傳輸后,采用另外一片AT89C51進(jìn)行溫度數(shù)據(jù)的接收。單片機(jī)將接收到的溫度數(shù)據(jù)通過(guò)串口傳送到上位機(jī)(PC機(jī))。在單片機(jī)與PC機(jī)之間需要接入一個(gè)MAX232,以實(shí)現(xiàn)TTL-RS232的電平轉(zhuǎn)換。溫度數(shù)據(jù)接收模塊的電路圖如圖2(c)所示,串口的波特率設(shè)置為9600,程序流程圖如圖4所示。
圖4 接收溫度模塊程序流程圖Fig4 Program flow of temperature receiving module
在PC機(jī)上,采用Visual C++6.0平臺(tái),結(jié)合ActiveX通信控件 (Microsoft Communications Control,version 6.0)實(shí)現(xiàn)串口通訊。
人機(jī)交互界面的設(shè)計(jì)如圖5所示,設(shè)置了五個(gè)功能按鍵:打開串口,開始接收,停止接收,清除內(nèi)容,關(guān)閉串口;界面右邊的編輯框顯示了接收溫度的時(shí)間以及當(dāng)前的實(shí)時(shí)溫度。點(diǎn)擊“打開串口”按鈕后,再點(diǎn)擊“開始接收”,前端實(shí)時(shí)檢測(cè)到的溫度數(shù)據(jù)就可以在PC機(jī)上進(jìn)行顯示(如圖5所示),以實(shí)現(xiàn)遠(yuǎn)程溫度檢測(cè)。
圖5 PC機(jī)接收到的溫度數(shù)據(jù)Fig5 The temperature data of PCreceived
本系統(tǒng)以溫度傳感器DS18B20測(cè)量溫度,采用51單片機(jī)作為控制單元,將所測(cè)得的溫度數(shù)據(jù)通過(guò)RS485收發(fā)器,經(jīng)過(guò)RS485總線傳輸;同時(shí),在PC機(jī)上編寫VC++面向?qū)ο蟪绦颍瑢?shí)現(xiàn)與單片機(jī)的串口通訊,最終實(shí)現(xiàn)溫度在PC機(jī)上顯示。
在設(shè)計(jì)的過(guò)程中,由于工業(yè)控制環(huán)境的復(fù)雜性,必然存在噪聲,因此數(shù)據(jù)可能會(huì)產(chǎn)生錯(cuò)誤,可以進(jìn)一步在保證系統(tǒng)效率的前提下,設(shè)計(jì)濾波算法,保證數(shù)據(jù)的正確。
[1] 何青,胡漢春,代剛,張邦力.基于RS-485總線的PC機(jī)與單片機(jī)串行通訊仿真系統(tǒng)的設(shè)計(jì) [J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新,2011,24(1):147-148.
[2] 秦貞臻,于斌.簡(jiǎn)述RS-485的優(yōu)點(diǎn)與應(yīng)用[J].品牌與標(biāo)準(zhǔn)化,2011(4):26.
[3] 李良.影響RS-485總線可靠性的因素 [J].內(nèi)江科技,2011(1):53,74.
[4] 甕嘉民,任鵬飛.基于Proteus的RS-485總線系統(tǒng)仿真設(shè)計(jì)[J].河南科學(xué),2012,30(2):227-230.
[5] 趙亮,侯國(guó)銳.單片機(jī)C語(yǔ)言編程與實(shí)例[M].北京:人民郵電出版社,2003:307-308.