



















Construction and Design of Remote Data Acquisition Module Based on RS485 Bus
JIANG Xue-yun
(School of Mechanical and Electrical Engineering, Qingdao Institute of Technology, Qingdao 266300, China)
【摘? 要】論文設計了基于RS485總線的遠程數據采集模塊。模擬信號經A/D轉換芯片將模擬量轉變為數字量傳輸到單片機中,單片機根據與上位機使用的ASCII協議,經RS485總線把測量的數據傳送到上位機中,以便于上位機進行實時監控。多個RS485數據采集模塊可以和上位機構成一個一主多從的分散式采集網絡。整個數據采集模塊以AT89C52為核心,由A/D轉換電路和RS485電路組成。每個數據采集模塊可以采集8路標準模擬信號,具有接口簡單、可靠性高、使用方便、傳輸距離遠等特點,具有較高的使用價值和研究價值。
【Abstract】This paper designs a remote data acquisition module based on RS485 bus. After the analog signal passes through the A/D conversion chip, the analog quantity is transformed into digital quantity and transmitted to the single chip microcomputer. According to the ASCII protocol used with the host computer, the single chip computer transmits the measured data to the host computer through the RS485 bus, so that the host computer can monitor in real time. Multiple RS485 data acquisition modules can form a master-slave distributed acquisition network with the host computer. The whole data acquisition module takes AT89C52 as the core and is composed of A/D conversion circuit and RS485 circuit. Each data acquisition module can collect eight standard analog signals. It has the characteristics of simple interface, high reliability, convenient use and long transmission distance. It has high use value and research value.
【關鍵詞】AT89C52;數據采集;遠程控制;RS485
【Keywords】AT89C52; data acquisition; remote control; RS485
【中圖分類號】TP274+.2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【文獻標志碼】A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【文章編號】1673-1069(2022)02-0159-06
1 引言
隨著現代工業不斷向信息化和規模化的方向逐漸發展,工業控制系統需要采集的控制信息越來越多,對系統數據采集的速度和精度要求也越來越高。傳統的數據采集方法無法滿足在實際中的要求,作為應用新的數據采集技術的單片機應運而生。隨著單片機技術的不斷發展,搭建可靠性高,成本低廉,部署快速的數據采集模塊就顯得很有必要。復雜電磁環境,須使用有較高抗電磁輻射干擾能力的模塊。總線傳輸模塊RS485由于具有較強的抗電磁干擾能力而被發現和使用。基于該模塊構建的數據信息傳輸系統,也就具有了較好的抗電磁干擾能力,呈現出可靠的穩定性[1]。
2 設計方案
2.1 系統的工作原理
原理:由于RS485總線具有平衡差分傳輸的特性,其抗干擾能力強,傳輸距離遠,具有很強的級聯能力。它可以實現遠程多站的通信,成本低,組網方便,并已廣泛應用于工業控制領域。這里的上位機選擇“組態王”,下位機選擇芯片與單片機。基于RS485總線的遠程數據采集模塊的連接圖如圖1所示。
A/D轉換模塊由單片機進行控制,單片機讀取A/D轉換芯片的數據,并通過RS485總線將數據傳輸至組態王。工作時,模塊作為從設備,等待組態王發送數據查詢命令,命令中包括數據類型及所通信的設備地址,單片機與程序內部中的地址相比較,若相同,則建立點對點的連接,通過485接口電路,將TTL電平轉化為RS485電平進行數據發送。
2.2 系統的總體設計
通過使用RS485總線,可以使其進行遠距離傳輸。總體結構如圖2所示。
由圖2可以看出,系統主電路采用的是以AT89C52為核心,以ADC0808作為模擬量采集端口,MAX487芯片將TTL電平轉換為RS485電平。傳感器檢測到的物理量經過信號調理電路轉變為0~5 V的標準信號、由A/D采樣后將數字量傳送到單片機系統中,單片機根據與上位機通信協議來傳輸送數據,并把測量數據傳送到組態王從而實現實時監控。
3 系統的硬件設計
3.1 單片機最小系統及資源分配
本設計中A/D轉換模塊,需要8個IO口,3位數據地址選擇控制端A、B、C,A/D轉換采用循環查詢轉換方式,需要串行通信接口。單片機AT89C52系統的資源完全可以滿足系統設計的資源要求,所以設計中單片機采用AT89C52。
3.1.1 單片機的微結構
AT89C52單片機最小系統包括數個晶體振蕩器、回(復)位電路,開關電路,其中晶振方式采用內部時鐘方式,外接石英晶體振蕩器,接電容C1和C2分別為30 pF,人工復位方式為按鍵復位,即單片機復位端RST通過100 Ω的電阻與VCC電源連接,按下開關后RST變高,開關彈起后RST端經1 kΩ電阻后接地,從而實現復位[2]。具體連接如圖3所示。
在圖3中,晶體振蕩器X1的頻率為11.059 2 MHz,選用這個晶振頻率是為了產生各種標準的波特率發生頻率為11.059 2 MHz。電阻R2和C3電容的電路組成單片機的上電復位電路。在單片機通電的過程中,R2和C3在上電時產生一個負脈沖通過RST引腳復位。復位時復位信號要使用大于2個機器周期的高電平,R2和C3分別是100 Ω和22 uF,滿足時鐘寬度要求,按鍵用于人工復位。EA為1時,CPU訪問內部程序存儲器。
3.1.2 單片機的資源分配
對于數據采集模塊,需要一個串口進行通信,需要定時器來產生相應的波特率,需要8位數據輸出端AD0~AD7,3位數據地址選擇控制端A、B、C,地址鎖存允許ALE經分頻后輸給ADC0808作為時鐘信號,AT89C52的資源完全可以滿足要求。
3.2 A/D轉化模塊的硬件設計
3.2.1 A/D轉換器原理
ADC0808是CMOS單片型逐次逼近式A/D轉換器,內部結構如圖4所示。
首先輸入3位地址,并拉高ALE,將地址鎖入地址鎖存器中。此地址經譯碼后選通8路模擬輸入之一到A/D轉換器。START接收到上升沿時將逐次逼近寄存器復位。下降沿便啟動 A/D轉換,之后EOC被拉低,說明A/D轉換正在進行。A/D轉換完成之后,EOC被拉高,說明A/D轉換已經完成,數據已存入內部的鎖存器,需等待三態門打開才會輸出數據,這個信號可以作為中斷申請[3]。當OE輸入“1”時,輸出三態門打開,轉換結果的數字量輸出到數據總線上。
3.2.2 轉換芯片硬件連接
由于ADC0808可以與AT89C52單片機直接相連。初始化時,使START和OE信號全為低電平。轉換通道的地址要連接到ADD A、ADD B、ADD C端口上。當要開始轉換時,先將地址輸出到ADC0808的ABC端,再將ALE拉高,鎖定地址,START接收到一個正脈沖,啟動A/D轉換。啟動轉換后的一段時間,單片機去讀取數據,并發送到上位機,完成一次數據采集。ALE輸出頻率為晶振的1/6,約為1.9 MHz,再經過四分頻電路后可以得到480 kHz的脈沖,可以滿足ADC0808的工作要求。模擬信號輸入通道的選擇與地址選擇輸入端的對應為:通道IN0對應輸入地址ADD A:0(字節),ADD B:0(字節),ADD C:0(字節);通道IN1對應輸入地址ADD A:1(字節),ADD B:0(字節),ADD C:0(字節);通道IN2對應輸入地址ADD A:0(字節),ADD B(字節):1,ADD C:0(字節);通道IN3對應輸入地址ADD A(字節):1,ADD B:1(字節),ADD C:0(字節);通道IN4對應輸入地址ADD A:0(字節),ADD B:0(字節),ADD C:1(字節);通道IN5對應輸入地址ADD A:1(字節),ADD B:0(字節),ADD C:1(字節);通道IN6對應輸入地址ADD A:0(字節),ADD B:1(字節),ADD C:1(字節);通道IN7對應輸入地址ADD A:1(字節),ADD B:1(字節),ADD C:1(字節)。
3.3 通訊接口
3.3.1 RS485簡介
采用差分信號負邏輯,邏輯低電平以兩線間的電壓差為+2 V~+6 V表示。邏輯高電平以兩線間的電壓差為-2 V~-6 V表示。RS-232-C比接口信號電平高,就不易損壞接口電路的芯片,RS-485接口是采用平衡驅動器和差分,接收器的組合,抗共模干擾能力增強,即抗噪聲干擾性好。連接RS-485通信鏈路時用一對雙絞線將各個接口的A、B端連接起來[4]。
3.3.2 RS485電平與TTL電平的轉換
在RS485中規定:接口兩端(設為A、B)的電壓差高于+2 V時為邏輯1,低于-2 V伏時為邏輯0。工作電源為+5 V,額定電流為300 μA,采用半雙工通訊方式的MAX487完成將TTL電平轉換為RS485電平的功能。MAX487引腳結構如圖6所示。
從圖6中能看出MAX487的內部是由驅動器和接收器組成的。與單片機連接時只需RO和DI分別與單片機的RXD和TXD相連即可,RO是接收器的輸出,DI是驅動器的輸入端,/RE是接收使能端DE是發送使能端,A端和B端分別為接收和發送的差分信號端。同時,A和B端加上阻值約為120 Ω的匹配電阻。單片機與芯片連接圖見圖7。
4 軟件設計
程序主體主要分3個部分:命令接收部分、命令分析部分以及A/D轉換部分。其中通信程序中的接收部分的優先級最高,A/D轉換部分優先級最低。其總體流程如圖8所示。
4.1 單片機的串口設置
為了支持RS-485通信,需要對單片機的串行口進行設置。通信串行口的工作由串行口控制寄存器SCON和電源管理寄存器PCON控制。
串行口控制寄存器SCON用以設定串行口的工作方式、多級通信控制、接收/發送狀態,發送/接受中斷狀態。由于數據采集系統傳送的數據是由10位二進制數組成的,所以選擇串行口工作方式1,即SM0、SM1設置為“01”,波特率由單片機定時器設置,單片機時鐘晶振選為11.059 2 MHz,波特率選為19 200 bit/s,所以設置SMOD=0,RCAP2H=0xff;RCAP2L=0xee[5]。
串口初始化程序如下:
void serial_init ()? {
ctrl=0;
SCON= 0x50;
C_T2=0;
RCLK=1;
TCLK=1;
TMOD=0x20;
RCAP2H=0xff;
RCAP2L=0xee;
TR2=1;/*enable Timer2 run*/
ES=1; REN=1; EA=1; SM2=1; /*SM2=1時收到的第9位為1才置位RI標志*/
}
4.2 A/D轉換模塊程序的設計
對于A/D轉換模塊,當要對其讀取數據時,先將ADC0808的START和ALE引腳拉低,此時可以將通道選擇地址輸入ADC0808的ABC地址端口。流程見圖9。
對應程序如下:
start=0; //使0808復位
oe=0; //數據三態門不允許輸出
adca=0;adcb=0;adcc=0;start=1;//鎖定地址
start=0;oe=1;for(i=0;i<=40;i++) {} d[1]=P0;//啟動AD轉換,并將轉換后的數據放入P0
for(i=0;i<=40;i++) {} start=0; oe=0; //復位,準備下次轉換
adca=1;adcb=0;adcc=0;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[2]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;
adca=0;adcb=1;adcc=0;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[3]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;
adca=1;adcb=1;adcc=0;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[4]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;
adca=0;adcb=0;adcc=1;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[5]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;
adca=1;adcb=0;adcc=1;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[6]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;
adca=0;adcb=1;adcc=1;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[7]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;
adca=1;adcb=1;adcc=1;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[8]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;
地址鎖存之后,延時一段再將START拉高,便啟動了A/D轉換。延時一小段時間后,便可以向A/D轉換芯片讀取數據。單片機控制A/D轉換芯片循環采集每一路的數據,并且存放于數組中。當組態王發來查詢指令時,根據數據包中的地址來尋找數組中相應的數據,并將其發送到上位機。
4.3 采集模塊與組態王的ASCII協議
①通訊口使用RS-485通訊方式。
上位機所設置的參數必須與單片機中的通訊參數一致,例如,波特率、奇偶校驗等。
②設備地址的格式。
格式:**.*。
前面的兩個字符是設備地址,范圍為0~255,此地址是由單片機中的程序決定。
后面的一個字符是用戶設定是否打包,“0”為不打包、“1”為打包,如果用戶在定義設備沒有確定打包,那么上位機就不會處理下位機的時數打包工作,反之則處理。
③寄存器格式在上位電機的定義。
寄存器名稱:Xdd;dd上限:65535;dd下限:0;數據類型:BYTE、UINT、FLOAT。
注意:在上位機中定義變量時,某一個寄存器根據所選數據類型(如BYTE占用一個字節,FLOAT占用四個字節),不同的數據類型會對應不同的寄存器地址,同一數據區內不可交叉定義不同數據類型的變量。BYTE是單片機從地址0開始的數據類型的變量,相應的變量在上位機中定義的寄存器為X0、X1……每個變量占一個字節。UINT是單片機從地址100開始的數據類型的變量,相應的變量的寄存器為X100、X102、X108……每個變量占兩個字節。FLOAT是單片機從地址200開始的數據類型的變量。在上位機中定義相應的變量的寄存器為X200、X212……每個變量占四個字節。
④上位機與單片機通訊的命令格式。
讀寫格式(除字頭、字尾外所有字節均為ASCII碼):
字頭:1字節1個ASCII碼,40H。
設備地址: 1字節2個ASCII碼,0~255(即0---0x0ffH)。
CR:0x0d[6]。
標志:1字節2個ASCII碼。
數據地址是 2字節4個ASCII碼,0x0000~0xffff。數據字節數是1字節2個ASCII碼,1~100,實際讀寫的數據的字節數。
⑤組態王發送讀命令。
下位機應答:若正常:
例如,讀15號儀表,數據地址為15的數據。其中數據為100,數據類型為字節,不打包。上位機所發命令如表1所示。
4.4 采集模塊與組態王的通訊
通訊程序需要完成的功能:接收上位機傳來的查詢命令,需要解析出所查數據類型、變量名、設備地址、數據字節數,完成校驗功能。接收上位機命令的流程如圖10所示。
當接收到組態王發來的信息的字頭時,開始接收后面的數據,并組成一個數組,用于做校驗及識別組態王命令。
單片機在完整接收完組態王發來的命令后,便開始分析命令。分析的流程如圖11所示。
5 調試
設計完采集模塊后,需要對采集模塊進行通信測試。COM1口連接RS232/RS485轉換器,轉換器的AB端分別接到數據采集模塊的AB端。組態王軟件中支持ASCII協議,所以選用組態王進行通信測試。測試之前要對組態王進行設置,之后設定不同的模擬量,觀察能否得到正確的A/D轉換結果。
測試兩個采集模塊,每個采集模塊的AB端都并聯起來,接到RS232/RS485的轉換器上即可。
5.1 組態王設置
因為是在PC上讀取下位機數據,下位機與上位機連接所使用的串口為COM1,因此,在組態王中要選擇COM1,首先就要對組態王進行設置,設置步驟如下:
①首先新建一個工程,在工程瀏覽器中,找到設備選項見圖12。
②找到COM1,在右邊選擇新建,選擇設備時,找到單片機—通用單片機ASCII—串口,之后選擇下一步,見圖13。
③給設備設置一個名字,之后串口選擇COM1,設備地址中每一個模塊都要有自己唯一的地址,用以區分不同的模塊。其余的設置選擇默認即可。見圖14、15。
之后在數據詞典中建立相關變量即可。再按照相同的步驟,建立地址為4.0的設備。
5.2 采集模塊的調試
對于前四路每個輸入口給定不同的電壓,第一路輸入3 V,第二路輸入0 V,第三路輸入5 V,第四路輸入2.5 V,觀察四路的數據。測試結果見圖16。
對于A/D,0 V對應的數值為0,5 V對應的數值為255,轉換在實際結果中我們可以看到,在輸入不同的模擬量之后,不同地址的模塊也得到了相同的結果,結果見表3、4。至此,數據采集模塊的基本功能已經實現。
6 結語
組態王開發監控系統軟件,是新型的工業自動控制系統,它以標準的工業計算機軟、硬件平臺構成的集成系統取代傳統的封閉式系統。對于企業使用組態王可以很方便直觀的觀察各個傳感器發送的數據,而且軟件靈活度高,功能強大,易于操作,可以省去很多開發時間,提高效率。因而為配合采集模塊,采用了組態王作為監控軟件。因為其靈活性極高,可以用在大多數工廠的應用場合。
【參考文獻】
【1】陳志延,葉曉燕,趙潔.基于AT89C52的遠程溫度數據采集系統設計[J].科技廣場,2008(08):198-200.
【2】彭春明.基于嵌入式的光伏發電自動跟蹤控制系統設計[D].南京:南京理工大學,2012.
【3】張榮.智能電液執行機構控制系統的研究[D].蘭州:蘭州理工大學,2011.
【4】杭和平.單片機原理與應用[M].北京:機械工業出版社,2008.
【5】楊陽.一種多通道的數據采集系統的硬件設計與研究[J].電子世界,2013(10):128.
【6】雷鈞,徐洪勝.基于ASCII的單片機與組態王通訊設計[J].工業控制計算機,2010,23(12):17-19.
【作者簡介】蔣雪昀(1995-),男,山東肥城人,從事自動化研究。