基于单片机AT89c52与RS485的远程数据采集系统的设计Word下载.doc
《基于单片机AT89c52与RS485的远程数据采集系统的设计Word下载.doc》由会员分享,可在线阅读,更多相关《基于单片机AT89c52与RS485的远程数据采集系统的设计Word下载.doc(47页珍藏版)》请在冰点文库上搜索。
![基于单片机AT89c52与RS485的远程数据采集系统的设计Word下载.doc](https://file1.bingdoc.com/fileroot1/2023-5/7/acdb4ecf-89f4-4931-9fb0-b1092e4558f3/acdb4ecf-89f4-4931-9fb0-b1092e4558f31.gif)
就其采样频率和分辨率来说属于中速类型,适合对数据采样频率要求不是特别高的应用场合。
关键词:
单片机AT89C52温度传感器DS18B20RS-232
总线串行通信RS-485VB6.0
Abstract:
AdesigningmethodwhichusesDS18B20digitalsensorastemperature-collectingtool,andsinglechipcomputerasMicro-controllerunitisintroduced.Itmakesalong-rangeconveyancebyusingRS-485BustosendthecollecteddatatoPCtemperature-measuringsystembyRS-232interface.ThisdesignhasitsclearorderandmainlyhashardwaredesignandsoftwareprocessdesigntwopartsforitsModularthoughts.Thissystemhaswidelyperspectiveintemperaturemeasurementandgoodusevalueforitssimpleandconvenientinterfaces.Asfarassamplingfrequencyandresolutionratio,itbelongstomiddle-speedtype.Itispropertobeusedinapplicationoccasionwithouthighrequirementtodatasamplingfrequency.
Keywords:
SingleChipComputerAT89C52;
TemperatureSensorDS18B20;
RS-232;
BusSerialCommunicationRS-485;
VB6.0
1概述
数据采集广泛应用于各个测试和控制系统,数据采集系统的设计和实现包括很多方面的内容,涉及面也很广。
在日常生活及工农业生产中经常要用到温度的检测及控制,能独立工作的温度检测系统已广泛应用于诸多的领域。
传统的温度检测大多以热敏电阻或热电偶为传感器,它们测出的一般都是电压,再通过相应的A/D转换,转换成对应的温度,这种结构需要比较多的外部硬件支持,硬件电路复杂,软件调试复杂,制作成本高。
在一些测量与控制系统的应用场合中,数据采集点与控制点通常有一定的距离,因此需要将采集的数据从采集现场进行远程传输,而传统的串口通信传输的最大的距离只有15m,因此相要完成远距离的传输,就应对系统的数据传输问题采取新的方法。
为了简化电路,降低成本,提高性价比,增强抗干拢能力和扩大传输距离和使用的灵活性,研究一种新的温度数据远程采集系统也就很有必要。
本设计提出一种利用DS18B20数字式温度传感器作为温度采集的工具,利用单片机对它进行控制,并且通过RS-485总线做远程传送将采集到的数据通过RS-232接口送入PC机测温系统的设计方法。
系统上位机由一台微机构成,软件采用VisualBasic编程,做出十分直观的人机界面,由单片机构成的测温模块检测到的温度数据分别显示在单片机的显示模块和通过串口通信显示在PC机上。
本系统设计完成了对温度数据的采集、数码管显示以及PC机对温度变化的曲线图绘制。
本设计接口简单、使用方便、可靠性好,在温度检测中有较广泛的应用前景,具有较强的使用价值。
2数据采集系统的硬件设计
系统主要由DS18B20数字式温度传感器模块、单片机控制模块、数码管显示模块、RS-485传输总线模块、RS-485/RS-232转换接口模块、上位PC机显示和控制模块五个部分组成,其框图如图1所示,本系统的整体硬件电路图见附录1。
图1远程温度数据采集系统框图
2.1DS18B20数字式温度传感器模块的硬件电路设计[1][2]
为了降低温度采集的硬件复杂性与提高整个设计电路的抗干拢能力,降低成本,数据采集模块中,采用美国达拉斯(DALLAS)公司推出的一种改进型智能温度传感器DS18B20作为检测元件。
它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,特别适合于多点温度测控系统。
2.1.1数字式温度传感器DS18B20
DS18B20数字式温度传感器与传统的热敏电阻不同,可直接将温度转化成数字信号进行处理,每片DS18B20都具有惟一的产品号并可存入其ROM中,便于构成大型温度测控系统时在单线上挂接多个DS18B20芯片,CPU可用简单的协议就可识别。
从DS18B20读出或写入DS18B20信息仅需要一根端口线,其读写及温度变换功率来源于数据总路线,该总路线本身也可以向所挂接的DS18B20供电,而无需额外电源,从而节省大量的引线和逻辑电路。
根据实际需要通过简单的编程实现9~12位的数字值读数方式,分辨率最大可达0.0625℃,测量范围为-55~125℃。
它采用8脚SO封装或3脚PR-35封装,分别如图2、图3所示。
图2DS18B20的8脚SO封装图3DS18B20的3脚PR-35封装
8脚封装的NC为空引脚;
VDD为电源引脚,接3.0~5.5V;
GND接地;
DQ为数据的输入和输出引脚(单线总线),常态下呈高电平。
DS18B20的内部结构如图4所示:
图4DS18B20的内部结构
2.1.2DS18B20的测温原理
DS18B20的内部框图如图5所示,主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器、用于存储用户设定的温度上下限值、触发器存储与控制逻辑、8位循环冗余校验发生器等7部分。
图5DS18B20的内部框图
低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一个频率稳定的计数脉冲。
高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。
初始时,温度寄存器被预置成-55℃,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行直到计数器2计数到0为止。
初始时,计数器1的预置值是和-55℃相对应的一个初始值。
以后计数器1每一个循环的预置数都由斜率累加器提供。
为了补偿振荡器温度特性的非线性,斜率累加器提供的预置值也随温度作相应的变化。
计数器1的预置数也就是在给定温度处使温度寄存器值加1℃所需的计数值。
DS18B20测量温度时使用特有的温度测量技术。
DS18B20内部的低温度系数振荡器能产生稳定的频率信号;
高温度系数振荡器则将被测温度转换成频率信号。
当计数门打开时,DS18B20进行计数,计数门开通时间由高温度系数振荡器决定。
芯片内部有斜率累加器,可对频率的非线性度加以补偿。
测量结果以16位带符号扩展的二进制补码形式存入温度寄存器中。
单片机可以通过单线接口读出数据,读数据时低位在前,高位在后,数据格式以0.0625℃/LSB形式表示。
温度值格式的低、高字节如表1、表2所示。
表1LS字节
23
22
21
20
2-1
2-2
2-3
2-4
表2MS字节
S
26
25
24
当符号位S=0时,表示温度值为正,可以直接将二进制数转换成十进制数;
当符号位S=1时,表示温度值为负,要先将补码变成原码,再计算其对应的十进制数。
表3是部分温度对应的二进制温度数据。
表3DS18B20温度与测得值对应表
温度/℃
二进制表示
十六进制表示
+125
0000011111010000
07D0H
+85
0000010101010000
0550H
+25.0625
0000000110010001
0191H
+10.125
0000000010100010
00A2H
+0.5
0000000000001000
0008H
0000000000000000
0000H
-0.5
1111111111111000
FFF8H
-10.125
1111111101011110
FF5EH
-25.0625
1111111001101111
FE6FH
-55
1111110010010000
FC90H
2.1.3DS18B20中的单总线技术
DALLAS公司推出的1-wireBus技术采用单根信号线,既可传输时钟,又能传输数据,而且数据传输是双向的。
系统中的数据交换、控制都由这根线完成。
主机或从机通过一个漏极开路或态端口连到该数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线。
单总线通常要求外接一个4.7
kΩ的上拉电阻,当总线闲置时,其状态为高电平。
主机和从机之间的通信通过三个步骤完成:
初始化1-wire器件、识别1-wire器件和交换数据。
由于是主从结构,只有主机呼叫时,从机才能应答,主机访问1-wire器件必须严格遵循总线命令时序,即初始化、读ROM、命令功能命令。
如出现混乱,1-wire器件不会响应主机。
1-wire协议定义了复位脉冲、应答脉冲、写0、读0、和读1时序等几种信号类型。
在这些信号中除应答信号外,其它的都是由主机发出同步信号,且发送的所有命令和数据都是低字节在前面。
基本的通信过程为:
主机通过拉低单总线至少480us产生Tx脉冲;
然后由主机释放总线,进入Rx模式。
主机释放总线时,会产生一由低电平跳变为高电平的上升沿;
单总线器件检测到该上升沿后,延时15~60us;
单总线器件通过拉低总线60~240us来产生应答脉冲;
主机接收到从机的应答信号脉冲后,说明有单总线器件在线,然后主机就可以开始对从机进行ROM命令和功能命令操作。
所有的读写时序至少需要60us,且每两个独立的时序至少需要1us的恢复时间。
在写时序中,主机将在拉低总线15us之内释放总线,并向单总线器件写1;
若主机拉低总线后能保持至少60us的低电平,则向单总线写0。
单总线器件仅在主机发出读时序时才向主机传输数据,当主机向单总线器件发出读数据命令后,必须马上产生读时序,以单总线器件能传输数据。
2.1.4温度数据采集的硬件电路图
DS18B20有两种供电方式:
直接由VDD供电、利用DQ线采用寄生电源供电。
当采用DQ线寄生电源供电方式时,在对DS18B20的一些命令操作上会有一些较特殊的要求。
本系统是以DS18B20采用直接VDD供电的方式,即采用图6所示的供电方式,电源电压和单片机电源相同,采用5V供电即可。
图6直接由VDD供电
其中DS18B20采集到的数据从它的DQ引脚输出经过一根数据线传输到单片机的P2.7脚,同时,单片机对DS18B20进行读/写操作也是通过该引脚实现的。
2.2数码管显示模块的设计[3]
LED数码管显示电路采用动态扫描显示方法,将各个数码管的8个笔画段(a、b、c、d、e、f、g、h)同名端并联在一起,由一个8位I/O口控制,形成段选线合用;
而每一位数码管的公共端(位选线)是各自独立地受I/O口控制,实现各位的分时选通。
单片机向字段输出字形码时,所有显示器都接收到相同的字表码,但究竟是哪个数码管亮,则取决于公共端,可通过控制公共端来决定哪一位数码管发亮显示。
动态扫描是采用分时的方法,轮流控制各位数码管的公共端,使各个数码轮流点亮。
在轮流点亮的过程中,每位显示器的点亮时间极为短暂(约1ms),由于人类眼睛的视觉暂留及发光二极管的余辉效应,只要轮流点亮各位二极管是,扫描的频率合适时不会有闪烁感。
本设计采用的4位LED数码管动态显示的电路原理图如图7。
其中段选线占用一个8位I/O口,可用单片机的P1口作为段选线控制的I/O;
位选线占用4位I/O口,可用单片机的P2.0~P2.3,由于采用的是共阳极LED为使亮度足够,每位都采用了一个PNP管进行驱动。
R15-R22是限流电阻,以防止LED被烧坏。
图7数码管显示电路原理图
2.3RS-485总线及其与单片机的接口电路的设计[4][5]
RS-485是一个电气接口规范,属于7层开放系统互连(OpenSystemInterconnection,OSI)模型物理层的协议标准。
它只规定了平衡驱动器和接受器的电特性,没有规定接插件、传输电缆和通信协议。
支持半双工或全双工模式,网络拓扑通常采用终端匹配的总线型结构,不支持环型或星型网络。
由于RS-485是从RS-422基础上发站而来的,RS-485采用平衡传输方式,需要在传输线上接匹配电阻。
RS-485可以采用二线与四线方式,二线制,可实现真正的多点双向半双工通信。
采用四线连接时,只能实现点对多点的全双工通信,即只能有一个主(Master)设备,其余为从设备。
无论是四线还是二线连接方式总线上最多只能接32个设备。
RS-485的共模输出电压在-7~+12V之间,RS-485接收器最小输入阻抗为12kΩ。
RS-485的最大传输距离约为1219m,最大传输速率为10Mb/s。
平衡双绞线的长度与传输速率成反比,在100Kb/s速率以下,才可能使用规定最长的电缆长度。
只有在很短的距离下才能获得最高速率传输。
一般100m长双绞线最大传输速率仅为1Mb/s。
RS-485需要2个匹配电阻,其阻值要求等于传输电缆的特性阻抗。
在短距离传输时可不需要匹配电阻,一般情况下在300m以下不需匹配电阻,匹配电阻接在传输总线的两端(一般接120Ω的匹配电阻即可)。
RS-485常采用平衡发送和差分接收方式来实现通信。
两条传输线采用通常使用双绞线,故具有较强的抗共模干扰能力。
接受灵敏度也相当高,能检测低达200mV的电压,某些芯片已经能检测到低达50mV的电压(如MAX3080等),同时,最大传输速率和最大传输距离也大大提高。
RS-485总线以双绞线为物理介质,通常工作在半双工通信状态,即在同一时刻总线上只能有1个节点为主节点且处于发送状态,其它所有节点必须处于接收状态。
如果同一时刻有2个以上的节点处于发送状态将导致所有发送方的数据发送失败,即所谓总线冲突。
为了避免总线冲突,RS-485总线一般工作在主从模式下。
整个通信总线系统由1个主节点、若干个从节点组成,按照轮循的方式,主节点依次和从节点通信,这样就解决了RS485总线的冲突。
本系统中的主机,即上位PC机和从机,即下位单片机之间的通信也工作在主从模式下的。
在本系统中,除了一个PC机作为主机外,只有一个单片机作为从机。
2.3.1MAX485简介[6]
为了构建满足本系统远程数据传输的RS-485总线,本设计采用了一款专门的电平转换芯片,即MAX485接口芯片。
它是Maxim公司的一种RS-485芯片。
采用单一电源+5V工作,额定电流为300μA,采用半双工通讯方式。
它完成将TTL电平转换为RS-485电平的功能。
其引脚结构图如图8所示。
图8MAX485的内部结构图
从MAX485的内部结构图中可以看出,MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。
RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可;
/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;
当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,只需用单片机的一个管脚控制这两个引脚即可;
A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;
当A的电平低于B端时,代表发送的数据为0。
在与单片机连接时接线非常简单。
只需要一个信号控制MAX485的接收和发送即可。
同时将A和B端之间加匹配电阻,一般可选120Ω的电阻。
2.3.2PC机和单片机之间远程通信的RS-485原理方案[7]
PC机的串行接口为RS-232或USB总线,然而RS-232标准的传送距离最大约为15米,最高速率为20kb/s,并且RS-232是为点对点(即只用一对收、发设备)通讯而设计的,可见RS232只适合于本地通讯使用。
而使用USB总线的话,系统的成本和设计难度将大增加。
为了降低成本和设计难度,本系统采用的是将RS-232接口转换成RS-485接口,再在单片机和PC机之间加入RS-485总线,采用RS-485进行长距离、高速的串行异步通信。
单片机采用RS-485进行串行通信,只需要将TTL电平的串行接口通过芯片转换为RS-485串行接口。
这种转换比较简单,本系统采用MAX485芯片来完成这种转换。
对于PC机现有的RS-232接口,系统中利用一片MAX485芯片和MAX232芯片组成的转换电路来实现RS-485电平与RS-232之间的转换。
此转换电路一边与RS-232标准9针接口相连,另一边与RS-485总线相连。
PC机和单片机之间远程通信的RS-485原理方案,如图9所示。
图9单片机和上位PC机间的RS-485通信方案
2.3.3RS-485总线和单片机接口硬件的设计[8]
在图9中可以看到,数据通信在硬件上采用3线制,将单片机和PC机串口(RS-232C)的3个引脚(TXD、RXD、GND)分别连在一起,即将PC机和单片机的发送数据线TXC和接收数据线RXD交叉连接,两者的地线相连,而其它信号线如握手信号线均不用,采用软件握手的方式。
只不过为了达到数据能远程传输,在下位单片机和上位PC机之间加入了485总线,在单片机系统中使用MAX485芯片,完成单片机TTL电平到RS-485电平之间的转换,在总线末端接一个匹配电阻,吸收总线上的反射信号,使得正常传输信号无毛刺。
匹配电阻的取值应该与总线的特性阻抗相当。
转换电路见图10。
由于MAX485工作在半双工状态,可只用单片机的一个引脚控制它的接收使能端/RE和发送使能端DE,以决定MAX485是工作在接收还是发送状态。
在图11中可以看到,/RE和DE两个引脚连在一起,单片机通过P1.7,即单片机的第9个引脚对它们进行控制,当P1.7输出逻辑0时,MAX485处于接收状态,当P1.7输出逻辑1时,MAX485处于发送状态。
单片机的第11脚是串口接收引脚RXD,和MAX485的接收器输出端RO相连接,从上位机发过来的控制信号将从这个端输入到单片机内,使单片机进行相应的控制操作;
单片机的第12脚为串口发送引脚TXD,和MAX485的驱动器输入端DI相连,单片机的温度数据将通过这个引脚传输到MAX485总线,经过长距离传输后最终送到远程上位PC机上进行显示和处理。
图10MAX485构成的RS-485总线及其和单片机的接口电路
在PC机端用MAX485和MAX232组成的电平转换电路完成TTL电平到PC机的RS-232串口电平的转换。
相应的电路如图11所示。
在总线上没有信号传输时,总线处于悬浮状态,容易受干扰信号的影响。
将总线上的差分信号的正端A+和负端B-之间接一个10kΩ的电阻;
负端B-和地间接一个10kΩ的电阻,形成一个电阻网路。
当总线上没有信号传输时,正端A+的电平大约为3.2V,负端B-的电平大约为1.6V,即使有干扰信号,也很难产生串行通信的起始信号0,从而增加了总线抗干扰的能力。
图11单片机和上位PC机之间的RS-485通信原理图
MAX485采用的串行通信波特率选为4800bit/s,AT89C52的晶振相选用12MHz),可满足系统对波特率误差的要求。
3远程数据采集系统的软件设计
3.1单片机的数据采集模块的程序设计
此系统数据采集模块包含两个方面的内容,一方面是利用单片机控制DS18B20工作,进行温度数据的采集;
另一方面是利用单片机将DS18B20温度传感器采集到的数据传输到显示模组进行显示。
下面将讨论这两方面的内容。
3.1.1单片机的数据采集部分的主要程序[9][10]
DS18B20操作流程DS18B20的一线制总线要求的操作流程:
(1)初始化;
(2)ROM操作命令;
(3)存储器和控制操作命令;
(4)处理/数据。
主控MCU对DS18B20的每一次完整的操作都应遵循上述的流程进行操作。
初始化一线制总线上的所有处理都从初始化开始,初始化包括主控MCU发出的总线复位信号(ResetPlus),以及从器件(本文指DS18B20)发出存在应答信号(PresencePlus)。
存在应答信号让主控MCU知道总线上存在DS18B20器件,并且从器件已准备好接受主控MCU的操作。
ROM操作指令及流程一旦完成初始化后,主控MCU便可以发出对DS18B20的6个ROM操作命令之一,所有ROM操作命令均为8位长。
ROM操作命令的操作流程请参考前面的图2.4,这些命令的描述如下:
ReadROM(读ROM)[33h]
此命令允许总线的主控MCU读DS18B20的8位产品系列编码、唯一的48位序列号以及8位的CRC;
此命令只能在总线上仅有一个DS18B20的情况下可以使用,如果总线上存在多于一个的从属器件,那么当所有从片企图同时发送时将发生数据冲突的现象,漏极开路会产生线与的结果。
MatchROM(匹配ROM)[55h]
匹配ROM命令,即以64位的ROM数据序列与总线上的多个DS18B20器件进行匹配(当然只可能有一个器件与主控MCU发出的匹配ROM数据相匹配),相当于总线主控MCU对多点总线上特定的DS18B20寻址,只有与64位ROM序列严格相符的DS18B20才能对后继的存储器操作命令做出响应,所有与64位ROM序列不符的从片将等待复位脉冲