RS-485遠(yuǎn)程測控系統(tǒng)
RS-485 總線型遠(yuǎn)程測控系統(tǒng)已得到廣泛應(yīng)用,這主要因為 RS-485總線具有傳輸距離遠(yuǎn)等特點。在傳輸速率為9600bit/s時傳輸距離可達(dá)1.2km以上,最高傳輸速率可達(dá)10Mbit/s,且只用普通雙絞線即可,同一對雙絞線上可以掛接多至256個以上的終端。有許多工業(yè)測控模塊都是采用 RS-485總線型的,比如 Adam、Nudan 等,但價格較高。本文介紹的 RS-485遠(yuǎn)程測控系統(tǒng)結(jié)合傳統(tǒng)的分布式測控系統(tǒng)的特點、利用了 RS-485總線的特點,而且巧妙地應(yīng)用了 AT89C2051 單片機(jī)和 CD4067 多路開關(guān),因而成本低,功能靈活,使用簡單。
1 系統(tǒng)設(shè)計方案
本系統(tǒng)由一臺 PC 作為主機(jī),多至255 臺AT89C2051 單片機(jī)作為從機(jī),如圖1所示。主機(jī)的 RS-232 串行口經(jīng)過外插式的 RS-232/RS-485 轉(zhuǎn)換器變成 RS-485的數(shù)字信號總線。PC與單片機(jī)之間通過 RS-485數(shù)字信號總線進(jìn)行串行通信。
圖1 系統(tǒng)原理圖
單片機(jī)的串行口通過 MAX485 芯片轉(zhuǎn)換成 RS-485 規(guī)程。單片機(jī)的 P1.0~P1.3 用于作為兩片
CD4067(16選1多路開關(guān))的地址選擇信號。兩片 CD4067 共同構(gòu)成一個雙16選1多路開關(guān)。PC首先發(fā)出所要選中的單片機(jī)編號m(0~254),然后發(fā)送該單片機(jī)控制的通道的序號n(0~15),這時第m個單片機(jī)的第n個通道選中,其信號與本系統(tǒng)的模擬信號總線相通,并傳送到PC并行口(即打印口)上掛接的微型數(shù)據(jù)采集器上。微型數(shù)據(jù)采集器對模擬信號進(jìn)行A/D轉(zhuǎn)換后送入計算機(jī)進(jìn)行記錄和顯示。如果被選中的通道的模擬信號是電流信號而不是電壓信號,則需要在模擬信號總線之間并接一只電阻,以便將電流信號轉(zhuǎn)換成電壓信號。為了能有效地傳送比較微弱的模擬信號,比如熱電偶的熱電勢信號,系統(tǒng)的模擬信號總線必須使用屏蔽電纜。微型數(shù)據(jù)采集器應(yīng)選用帶多量程選擇和程控放大的型號,以適應(yīng)各種傳感器輸出信號的要求。本系統(tǒng)也可以用來遠(yuǎn)程控制繼電器和電機(jī)等,此時利用微型數(shù)據(jù)采集器的D/A轉(zhuǎn)換功能。比如第m個單片機(jī)的第n個通道接的是一個固態(tài)繼電器,首先PC通過串行口發(fā)出地址信號選中該通道,然后PC通過微型數(shù)據(jù)采集器向該通道發(fā)出開或關(guān)的控制信號(經(jīng)過D/A轉(zhuǎn)換)。
2 系統(tǒng)硬件設(shè)計
主機(jī)PC所配的RS-232/RS-485轉(zhuǎn)換器和微型數(shù)據(jù)采集器都已有市售的產(chǎn)品,價格也較低。從機(jī)單片機(jī)及其外圍電路的組成見圖2。RS-485數(shù)字信號總線經(jīng)過MAX485芯片轉(zhuǎn)換成TTL電平的RS-232信號以便與AT89C2051的串行口相配。AT89C2051的P1.0~P1.3分別接到兩片CD4067(16選1多路開關(guān))的地址選擇端A0~A3。這樣當(dāng)P1.0~P1.3輸出某個通道號(比如A3A2A1A0=0001)時,CH1的正端CH1+(即X1端)和CH-(即Y1端)同時選通。選用雙端信號方式而不用單端信號方式(此時所有通道負(fù)端全部共地)的好處在于各個通道可以相互獨立的輸出信號或接收控制信號,因而各通道所接的傳感器可以公用一個電源。兩片CD4067的公共端X和Y分別接到模擬信號總線的正端和負(fù)端,整個從機(jī)電路用單5V電源供電,功耗大約100mW。
圖2 從機(jī)單片機(jī)及其外圍電路
3 系統(tǒng)軟件設(shè)計
主機(jī)PC與各從機(jī)的通信以單片機(jī)的串行通信方式3進(jìn)行通信。方式3為波特率可變的9位數(shù)據(jù)(除1位起始位“0”和1位停止位“1”之外)異步通信方式,是多機(jī)通信中用得最多的方式。PC與多AT89C2051單片機(jī)的通信軟件設(shè)計關(guān)鍵在于對單片機(jī)的串行控制寄存器SCON的正確編程以及對PC串行口接口的靈活使用。
當(dāng)AT89C2051工作在方式3時,傳送一幀信息共11位:1位起始位(D0=0),8位數(shù)據(jù)位(D1~D8),1位可編程位(D9)和1位停止位(D10)。其中附加的第9位D9作為“地址幀”和“數(shù)據(jù)幀”的識別標(biāo)志位。此位數(shù)據(jù)在發(fā)送端由串行控制寄存器的TB8位產(chǎn)生,在接收端由自動傳送到SCON的RB8位中。如果D9=TB8=1,則說明此幀信息為地址,否則為數(shù)據(jù)。串行控制寄存器SCON中有一位多機(jī)通信控制位SM2,當(dāng)SM2=1時只接收地址幀,當(dāng)SM2=0時既可接收地址幀也可接收數(shù)據(jù)幀。
當(dāng)主機(jī)PC與某從機(jī)通信時,主機(jī)首先發(fā)送命令FFH,使各從機(jī)的SM2全置1。然后發(fā)送該從機(jī)的地址m(00H~FFH),注意地址幀的附加位D9=1,所以此時所有從機(jī)都進(jìn)行串行中斷響應(yīng)處理(入口地址:0023H)。各從機(jī)中斷響應(yīng)處理為:將接收到的地址號m與自己的編號進(jìn)行比較,如果不相等,則不予理睬,如果相等,則置SM2=0,并且等待繼續(xù)接收將要選通的通道號n(0H~FH),再將n送到P3口。最后主機(jī)發(fā)送通道號n,由于n作為數(shù)據(jù)幀所以此時置D9=TB8=0。由于此時只有編號為m的從機(jī)的SM2=0,所以m號從機(jī)的n號通道選通。任何時候只能選通某一個從機(jī)的某一個通道。
對主機(jī)PC串行口的編程不僅要選擇相同的波特率,而且要對通信線路控制器LCR進(jìn)行巧妙地設(shè)置,為了與單片機(jī)的方式3相匹配,對LCR的設(shè)置為:8位數(shù)字長、允許奇偶校驗、1位停止位。注意信號的奇偶校驗位D9不能設(shè)置為固定的0或1,所以必須靈活選擇奇校驗還是偶校驗以便設(shè)置D9為0或1。當(dāng)發(fā)送地址幀時,需要D9為1,所以如果此時的地址的二進(jìn)制碼中“1”的個數(shù)為奇數(shù),則選擇偶校驗,若為偶數(shù),則選擇奇校驗。而發(fā)送數(shù)據(jù)幀時,選擇正好相反。