基于RS485 总线的远程数据采集模块的构建设计

1引言
随着现代工业不断向信息化和规模化的方向逐渐发展,工业控制系统需要采集的控制信息越来越多,
对系统数据采集的速度和精度要求也越来越高。传统的数据采集方法无法满足在实际中的要求,
作为应用新的数据采集技术的单片机应运而生。随着单片机技术的不断发展,搭建可靠性高,成本低廉,部署快速的数据采集模块就显得很有必要。复杂电磁环境,须使用有较高抗电磁辐射干扰能力的模块。总线传输模块RS485由于具有较强的抗电磁干扰能力而被发现和使用。基于该模块构建的数据信息传输系统,也就具有了较好的抗电磁干扰能力,
呈现出可靠的稳定性[1]。2设计方案
2.1系统的工作原理
原理:由于RS485总线具有平衡差分传输的特性,其抗干扰能力强,传输距离远,具有很强的级联能力。它可以实现远程多站的通信,成本低,组网方便,并已广泛应用于工业控制领域。这里的上位机选择
“组态王”,下位机选择芯片与单片机。基于RS485总线的远程数据采集模块的连接图如图1所示。
图1基于RS485总线的远程数据采集模块的连接图
A/D 转换模块由单片机进行控制,
单片机读取A/D 转换芯片的数据,并通过RS485总线将数据传输至组态王。工作时,模块作为从设备,等待组态王发送数据查询命令,命令中包括数据类型及所通信的设备地址
单片机与程序内部中的地址相比较,若相同,则建立点对点的连接,通过485接口电路,
将TTL 电平转化为RS485电平进行数据发送。2.2系统的总体设计
通过使用RS485总线,可以使其进行远距离传输。总体结构如图2所示。
【作者简介】蒋雪昀(1995-),男,山东肥城人,从事自动化研究。
基于RS485总线的远程数据采集模块的构建设计
Construction and Design of Remote Data Acquisition Module Based on RS485Bus
蒋雪昀
(青岛工学院机电工程学院,山东青岛266300)
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 RS485bus.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 RS485bus,so that the host computer can monitor in real time.Multiple RS485data acquisition modules can form a master-slave distributed acquisition network with the host computer.
The whole data acquisition module takes AT89C52as the core and is composed of A/D conversion circuit and RS485circuit.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
组态王
RS232/485转换电路
MAX487芯片MAX487芯片MAX487芯片单片机单片机
单片机
A/D 转换A/D 转换A/D 转换模拟信号模拟信号模拟信号
模块1
模块2
模块3
159
图2远程数据采集模块总体结构图
由图2可以看出,系统主电路采用的是以AT89C52为核心,以ADC0808作为模拟量采集端口,MAX487芯片将TTL 电平转换为RS 485电平。传感器检测到的物理量经过信号调理电路转变为0~5V 的标准信号、
由A/D 采样后将数字量传送到单片机系统中,
单片机根据与上位机通信协议来传输送数据,并把测量数据传送到组态王从而实现实时监控。
3系统的硬件设计
3.1单片机最小系统及资源分配
本设计中A/D 转换模块,需要8个IO 口,3位数据地址选择控制端A 、B 、C ,A/D 转换采用循环查询转换方式,需要串行通信接口。单片机AT89C52系统的资源完全可以满足系统设计的资源要求,所以设计中单片机采用AT89C52。3.1.1单片机的微结构
AT89C52单片机最小系统包括数个晶体振荡器、回(复)
位电路,开关电路,
其中晶振方式采用内部时钟方式,外接石英晶体振荡器,接电容C1和C2分别为30pF ,人工复位方式为按键复位,
即单片机复位端RST 通过100Ω的电阻与VCC 电源连接,
按下开关后RST 变高,开关弹起后RST 端经1kΩ电阻后接地,从而实现复位[2]。具体连接如图3所示。
图3单片机的最小系统图
在图3中,晶体振荡器X1的频率为11.0592MHz ,选用这个晶振频率是为了产生各种标准的波特率发生频率为11.0592MHz 。电阻R2和C3电容的电路组成单片机的上电复位电路。在单片机通电的过程中,R2和C3在上电时产生一个负脉冲通过RST 引脚复位。复位时复位信号要使用大于2个机器周期的高电平,R2和C3分别是100Ω和22uF ,满
足时钟宽度要求,按键用于人工复位。EA 为1时,CPU 访问内部程序存储器。3.1.2单片机的资源分配
对于数据采集模块,需要一个串口进行通信,
需要定时器来产生相应的波特率,需要8位数据输出端AD0~AD7,3位数据地址选择控制端A 、B 、C ,地址锁存允许ALE 经分频后输给ADC0808作为时钟信号,AT89C52的资源完全可以满足要求。
3.2A/D 转化模块的硬件设计3.2.1A/D 转换器原理ADC0808是CMOS 单片型逐次逼近式A/D 转换器,
内部结构如图4所示。
图4ADC0808内部结构图
首先输入3位地址,并拉高ALE ,将地址锁入地址锁存器中。此地址经译码后选通8路模拟输入之一到A/D 转换器。START 接收到上升沿时将逐次逼近寄存器复位。下降沿便启动A/D 转换,
之后EOC 被拉低,说明A/D 转换正在进行。A/D 转换完成之后,EOC 被拉高,说明A/D 转换已经完成,数据已存入内部的锁存器,需等待三态门打开才会输出数据,
这个信号可以作为中断申请[3]。当OE 输入“1”时,输出三态门打开,转换结果的数字量输出到数据总
线上。
3.2.2转换芯片硬件连接
图5为ADC0808连接图。
图5
ADC0808连接图
模拟信号
晶振电路
复位电路
ADC0808
AT89C52
MAX487
芯片
R S 485总线
C130pF 30pF 22uF
11.0592MHz X1
C2C3
R2R1
1kΩ
U1
100
19189
293031XTAL1XTAL2RST PSEN ALE EA P0.0/AD0
P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD73938373635343332
2122232425262728
1011121314151617
12345678
P1.0/T2P1.1/T2EX P1.2P1.3P1.4P1.5P1.6P1.7
P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15
P3.0/RXD P3.1/TXD P3.2/NT0P3.3/NT1P3.4/T0P3.5/T1P3.6/WR P3.7/RD
ST
CLK
EOC
OE
VREF (-)
VREF (+)IN0
IN1IN2IN3IN4IN5IN6IN7A B C ALE
D0D1D2D3D4D5D6D7
8路模拟量开关
8
路A/D 转换器
三态输出锁存储
地址锁存与译码器
U2∶A
U2∶B
AT89C52-ALE
U1
IN0IN1IN2IN3IN4IN5IN6IN7
26272812345212019188151417P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0OUT1OUT2OUT3OUT4OUT5OUT6OUT7OUT8ADD A ADD B ADD C ALE
VREF (+)VREF (-)
ADC0808<TEXT>
OE
9P2.1
P2.2
25P2.324P2.423P2.0
221216
106P2.07
74LS74<TEXT>
74LS74<TEXT>
13
89
1012
11
D S Q R
Q
CLK
165
42
3
D S Q R
Q
CLK
CLOCK START EOC
160
由于ADC0808可以与AT89C52单片机直接相连。初始化时,使START 和OE 信号全为低电平。转换通道的地址要连接到ADD A 、ADD B 、ADD C 端口上。当要开始转换时,先将地址输出到ADC0808的ABC 端,再将ALE 拉高,锁定地址,START 接收到一个正脉冲,启动A/D 转换。启动转换后的一
段时间,单片机去读取数据,并发送到上位机,完成一次数据采集。ALE 输出频率为晶振的1/6,约为1.9MHz ,再经过四分频电路后可以得到480kHz 的脉冲,可以满足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.1RS485简介
采用差分信号负逻辑,逻辑低电平以两线间的电压差为
+2V~+6V 表示。逻辑高电平以两线间的电压差为-2V~-6V
表示。RS-232-C 比接口信号电平高,
就不易损坏接口电路的芯片,RS-485接口是采用平衡驱动器和差分,接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。连接RS-485通信链路时用一对双绞线将各个接口的A 、B 端连接起来[4]。
3.3.2RS485电平与TTL 电平的转换
在RS485中规定:接口两端(设为A 、B )的电压差高
于+2V 时为逻辑1,低于-2V 伏时为逻辑0。工作电源为+5V ,额定电流为300μA ,采用半双工通讯方式的MAX487完成将TTL 电平转换为RS485电平的功能。MAX487引脚结构如图6所示。
图6MAX487引脚结构
从图6中能看出MAX487的内部是由驱动器和接收器
组成的。与单片机连接时只需RO 和DI 分别与单片机的RXD 和TXD 相连即可,RO 是接收器的输出,DI 是驱动器的输入端,/RE 是接收使能端DE 是发送使能端,A 端和B 端分
别为接收和发送的差分信号端。同时,A 和B 端加上阻值约为120Ω的匹配电阻。单片机与芯片连接图见图7。
图7单片机与MAX487连接图
4软件设计
程序主体主要分3个部分:命令接收部分、命令分析部分以及A/D 转换部分。其中通信程序中的接收部分的优先级最高,A/D 转换部分优先级最低。其总体流程如图8所示。
图8
总体流程图
4.1单片机的串口设置
为了支持RS-485通信,需要对单片机的串行口进行设置。通信串行口的工作由串行口控制寄存器SCON 和电源管理寄存器PCON 控制。
串行口控制寄存器SCON 用以设定串行口的工作方式、多级通信控制、接收/发送状态,发送/接受中断状态。由于数据采集系统传送的数据是由10位二进制数组成的,所以选择串行口工作方式1,即SM0、SM1设置为“01”,波特率由单片机定时器设置,单片机时钟晶振选为11.0592MHz ,波特率选为19200bit/s ,所以设置SMOD=0,RCAP2H=0xff ;
RCAP2L=0xee [5]。
串口初始化程序如下:void serial_init (){ctrl=0;SCON=0x50;C_T2=0;RCLK=1;TCLK=1;TMOD=0x20;
开始系统初始化
是否完整接收上位机命令
分析命令并发送数据
A/D 转换
GND
RS485总线A
B 120Ω
120Ω
5V
8765
4321DI
DE
/RE RO
VCC
B
A
GND
RXD
TXD P2.5
GND
AT89C52
876
5
1234
RO /RE DE DI
VCC B A GND
R
D
161
RCAP2H=0xff;
RCAP2L=0xee;
TR2=1;/*enable Timer2run*/ES=1;REN=1;EA=1;SM2=1;/*SM2=1时收到的第9位
为1才置位RI 标志*/
}
4.2A/D 转换模块程序的设计
对于A/D 转换模块,当要对其读取数据时,先将ADC0808的START 和ALE 引脚拉低,
此时可以将通道选择地址输入ADC0808的ABC 地址端口。流程见图9。
图9A/D 转换流程图
对应程序如下: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所示。
字头设备地址标志数据地址数据字节数
数据
异或
CR
字头设备地址标志数据地址数据字节数
数据异或CR
字头设备地址数据字节数数据异或CR
开始
结束
输入地址
拉高ALE 锁定地址
让START 产生一个正脉冲,
启动A/D 转换转换完毕后,将数据送至单片机
162
表1上位机所发数据
单位:字节
若正确,
则收到表2所示数据。表2正确数据
单位:字节
4.4采集模块与组态王的通讯
通讯程序需要完成的功能:接收上位机传来的查询命令,需要解析出所查数据类型、变量名、设备地址、数据字节数,完成校验功能。接收上位机命令的流程如图10所示。
图10接收命令流程图
当接收到组态王发来的信息的字头时,开始接收后面的数据,并组成一个数组,
用于做校验及识别组态王命令。单片机在完整接收完组态王发来的命令后,便开始分析命令。分析的流程如图11所示。
图11单片机分析数据流程图
5调试
设计完采集模块后,需要对采集模块进行通信测试。COM1口连接RS232/RS485转换器,转换器的AB 端分别接
到数据采集模块的AB 端。组态王软件中支持ASCII 协议,所以选用组态王进行通信测试。测试之前要对组态王进行设置,之后设定不同的模拟量,观察能否得到正确的A/D 转换结果。
测试两个采集模块,
每个采集模块的AB 端都并联起来,接到RS232/RS485的转换器上即可。5.1组态王设置
因为是在PC 上读取下位机数据,下位机与上位机连接所使用的串口为COM1,因此,在组态王中要选择COM1,首先就要对组态王进行设置,设置步骤如下:①首先新建一个工程,
在工程浏览器中,到设备选项见图12。
图12选择连接串口
②到COM1,在右边选择新建,
选择设备时,到单片机—通用单片机ASCII —串口,之后选择下一步,见图13。
图13选择设备类型
③给设备设置一个名字,之后串口选择COM1,设备地址
中每一个模块都要有自己唯一的地址,用以区分不同的模
块。其余的设置选择默认即可。见图14、15。
图14选择设备
图15选择设备地址
所连接的串口
之后在数据词典中建立相关变量即可。再按照相同的步
4131
45
4231
30
30
31
46
31
31
36
31
0d
设备
地址15
标志读操作字节型不打包
数据地址15
数据字节数1
异或
41
31
45
31
30
36
35
37
36
0d
字头设备地址15
数据字节
数1
数据100
异或
开始
设备地址是否正确
确定数据类型、
地址、字节数生成回应上位机的数据帧
数据帧发送至组态王
结束
开始
是否
结束
完成命令接收标志置1,recok=1
是否接收到结束字符
“0D ”存储后面接收到的字符
是否接收到
起始字符“40H ”
163

本文发布于:2024-09-20 14:55:19,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/90623.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   地址   单片机
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议