基于单片机at89c52与rs485的远程数据采集系统的设计内容摘要:

用 了一款专门的电平转换芯片,即 MAX485 接口 芯片。 它 是 Maxim公司的一种 RS- 485 芯片。 采用单一电源 +5V工作,额定电流为 300μ A,采用半双工通讯方式。 它完成将 TTL 电平转换为 RS- 485 电平的功能。 其引脚结构图如图 8 所示。 R 2 1 3 4 8 7 6 5 D R O RE DE DI V c c B A GND 图 3 1 M A X 4 8 5 的 引 脚 和 内 部 结 构 图 8 MAX485的内部结构图 从 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Ω 的电阻。 PC 机和单片机之间远程通信的 RS485 原理方案 [7] PC 机的串行接口为 RS232 或 USB 总线 , 然而 RS232 标准的传送距离最大约为 15 米,最高速率为 20kb/s, 并且 RS232 是为点对点(即只用一对收、发设备)通讯而设计的,可见 RS232 只适合于本地通讯使用。 而使用 USB 总线的话,系统的成本和设计难度将大增加。 为了降低成本和设计难度,本系统采用的是将 RS232 接口转换成 RS485 接口, 再 在单片机和 PC 机之间加入 RS485 总线 , 采用 RS485 进行长距离、高速的串行异步通信。 单片机采用 RS485 进行串行通信 , 只需要将 TTL 电平的串行接口通过芯片转换为 RS485 串行接口。 这种转换比较简单 , 本系统采用 MAX485 芯片 来完成这种转换。 对于 PC 机 现有的 RS232 接口 , 系统中 利 用 一片 MAX485 芯片和 MAX232 芯片组成的转换电路 来实现 RS485 电平与 RS232 之间的转换。 此转换 电路 一边与 RS232 标准 9 针接口相连 , 另一边与RS485 总线相连。 PC 机和单片机之间远程通信的 RS485 原理方案,如图 9 所示。 单 片 机 R X D T X D P 1 . 7 G N DM A X 2 3 2T i n T o u t R o u t R i n G N DP C 串 口R X DT X D G N DM A X 4 8 5 B R OA D I / R E D E G N DM A X 4 8 5 R O BD I A / R ED EG N D 图 9 单片机和上位 PC 机间的 RS485 通信方案 RS485 总线 和单片机 接口硬件 的 设计 [8] 在图 9中可以看到, 数据通信 在 硬件上采用 3线制,将单片机和 PC机串口( RS232C)的 3个引脚( TXD、 RXD、 GND)分别连在一起,即将 PC机和单片机的发送数据线 TXC和接收数据线 RXD交叉连接,两者的地线相连,而其它信号线如握手信号线均不用,采用软件握手的方式。 只不过为了达到数据能远程传输,在下位单片机和上位 PC机之间加入了 485总线,在单片机系统中使用 MAX485芯片,完成单片机 TTL电平到 RS485电平之间的转换 , 在总线末端接一个匹配电阻 ,吸收总线上的反射信号 ,使得正常传输信号无毛刺。 匹配电阻的取值应该与总线的特性阻抗相当。 转换电路见图 10。 由于 MAX485 工作在半双工状态,可只用单片机的一个引 脚控制它的接收使能端 /RE 和发送使能端 DE,以决定 MAX485 是工作在 接收还是发送状态。 在图 11 中可以看到, /RE 和 DE 两个引脚连在一起, 单片机通过 ,即单片机的第 9 个引脚对 它们 进行控制,当 输出逻辑 0 时, MAX485 处于接收状态,当 输出逻辑 1 时,MAX485 处于发送状态。 单片机的第 11脚是串口接收引脚 RXD,和 MAX485的接收器输出端RO相连接,从上位机发过来的控制信号将从这个端输入到单片机内,使单片机进行相应的控制操作;单片机的第 12脚为串口发送引脚 TXD,和 MAX485的驱动器 输入端 DI相连,单片机的温度数据将通过这个引脚传输到 MAX485总线 ,经过长距离传输后最终送到远程上位 PC机上进行显示和处理。 A T 8 9 C 5 2R X DT X D P 1 . 7 G N DM A X 4 8 5BAR 71 2 0 ΩR S 4 8 5 总 线R 81 2 0 ΩR O1/ R E23D E4D IG N DABV C C5678V C C 图 10 MAX485 构成的 RS485 总线及其和 单片机的接口电路 在 PC机端用 MAX485和 MAX232组成的电平转换电路 完成 TTL电平到 PC机的 RS232串口电平的转换。 相应的电路如图 11所示。 在总线上没有信号传输时 , 总线处于悬浮状态 , 容易受干扰信号的影响。 将总线上的差分信号的正端 A+和负端 B之间接一个 10kΩ的电 阻 ; 负端 B和地间接一个 10kΩ的电阻 , 形成一个电阻网路。 当总线上没有信号传输时 , 正端 A+的电平大约为 , 负端 B的电平大约为 , 即使有干扰信号 , 也很难产生串行通信的起始信号 0, 从而增加了总线抗干扰的能力。 123456789R S 2 3 2D B 9 接 口V C CD 1I N 4 1 4 8D 2I N 4 1 4 8D 35 . 1 VC 21 0 4C 11 0 4C 31 0 4C 41 0 4C 51 0 4C 61 0 4R 21 2 KR 11 0 0R 31 0 KR 41 0 KR 51 0 KR 61 0 KV C CV C CV C CABV C CV D D C 1 +V C C C 1 T 1 O U T T 1 I N T 2 I NR 1 I NT 2 O U T R 1 O U TR 2 I N R 2 O U T C 2 +V E EG N D C 2 2 131 11 29451 61 41 37861 51 0M A X 2 3 2R O1/ R E23D E4D IG N DABV C C5678M A X 4 8 5 图 11 单片机和上位 PC 机之间的 RS485 通信原理图 MAX485 采用的串行通信波特率选为 4800bit/s, AT89C52 的晶振相选 用 12 MHz),可满足系统对波特率误差的要求。 3 远程数据采集 系统的软件设 计 单 片机的数据采集模块的程序设计 此系统数据采集模块包含两个方面的内容,一方面是利用单片机控制 DS18B20 工作,进行温度数据的采集;另一方面是利用单片机将 DS18B20 温度传感器采集到的 数据 传输到显示模组进行显示。 下面将讨论这两方面的内容。 单片机的数据采集部分的主要程序 [9][10] DS18B20 操作流程 DS18B20 的一线制总线要求的操作流程 : (1) 初始化; (2) ROM 操作命令; (3) 存储器和控制操作命令; (4) 处理 /数据。 主控 MCU 对 DS18B20 的每一次 完整的操作都应遵循上述的流程进行操作。 初始化一线制总线上的所有处理都从初始化开始,初始化包括主 控 MCU 发出的总线复位信号( Reset Plus),以及从器件(本文指DS18B20)发出存在应答信号( Presence Plus)。 存在应答信号让主控MCU 知道总线上存在 DS18B20 器件,并且从器件已准备好接受主控MCU的操作。 ROM 操作指令及流程一旦完成初始化后,主控 MCU 便可以发出对 DS18B20的 6个 ROM 操作命令之一,所有 ROM 操作命令均为 8 位长。 ROM 操作命令的操作流程请参考前面的图 ,这些命令的描述如下: Read ROM(读 ROM) [33h] 此命令允许总线的主控 MCU读 DS18B20 的 8 位产品系列编码、唯一的 48 位序列号以及 8 位的 CRC;此命令只能在总线上仅有一个DS18B20 的情况下可以使用,如果总线上存在多于一个的从属器件,那么当所有从片企图同时发送时将发生数据冲突的现象,漏极开路会产生线与的结果。 Match ROM(匹配 ROM) [55h] 匹配 ROM 命令,即以 64 位的 ROM 数据序列与总线上的多个DS18B20 器件进行匹配(当然只可能有一个器件与主控 MCU发出的匹配 ROM 数据相匹配),相当于总线主控 MCU 对多点总线上特定的DS18B20 寻址,只有与 64 位 ROM 序列严格相符的 DS18B20 才能对后继的存储器操作命令做出响应,所有与 64 位 ROM 序列不符的从片将等待复位脉冲。 此命令在总线上有单个或多个器件的情况下均可使用。 Skip ROM(跳过 ROM) [CCh] 在单点总线系统中,通过此命令允许总线上的主控 MCU 不提供64 位 ROM 编码而访问存储器操作,以此来节省时间;如果在总线上存在多于一个的从属器件,而且在 Skip ROM 命令之后发出读命令 , 那么由于多个从片同时发送数据会在总线上发生数据冲突,漏极开路下拉会产生线与的效果。 Search ROM(搜索 ROM) [F0h] 当系统开始工作时总线上的主控 MCU 可能不知道总线上的从器件个数或者不知道其 64 位 ROM 编码,搜索 ROM 命令允许总线主机使用一种排除查询的方法来识别总线上所有从片的 64 位 ROM 编码;有关搜索 ROM 的具体操作流程,可以参考 DS18B20 器件的数据手册,从该手册可以获取详细的操作说明。 Alarm Search(告警搜索) [ECh] 此命令的流程与搜索 ROM 命令相同 ,但是仅在最近一次温度测量出现告警的情况下 DS18B20 才对此命令做出响应。 告警的条件定义为温度高于 TH 或低于 TL,只要 DS18B20 一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值或者改变 TH 或 TL 的设置,使得测量值再一次位于允许的范围之内,贮存在 EEPROM 内的触发器值用于告警。 在总线上的主控 MCU完成 ROM 操作命令后,主控 MCU 便可以对总线上的 DS18B20 进行存储器操作了(存储器操作包括存储器操作命令和控制操作命令);存储器操作命令有 6 个,描述如下: 写缓冲存储器 Write Scratchpad [4Eh] 此命令将后面跟着的数据写至 DS18B20 的缓冲存储器,从地址 2开始接着写的 3 个字节数据将被保存在缓冲存储器地址 2 到 4 之中;发出一个复位( Reset Plus)便可在任何时刻终止写操作。 读缓冲存储器 Read Scratchpad [BEh] 此命令读缓冲存储器的内容,读开始于字节 0 并继续经过缓冲存储器,直至第 9 个字节( Byte 8) CRC 被读出为止。 主控 MCU可以在任何时候发出总线复位信号以中止读操作。 复制缓冲存储器 Copy Scratchpad [48h] 此命令把缓冲存储器中的 Byte Byte3 和 Byte4 中的数据复制入DS18B20 的 EEPROM 存储器,即把温度触发器字节(高温告警温度值 TH 和低温告警温度值 TL)载入 EEPROM,另外也会将缓冲存储器中的 Configuration Register 的映射字节( Byte4)载入 EEPROM 当中;这样,设置才会真正的生效。 如果总线主机在此命令之后,只要DS18B20 正忙于把缓冲存储器复制入 EEPROM,它就会在总线上输出0; 当复制过程完成之后它将返回 1。 如果由从器件采用寄生电源供电,总线主控 MCU 在发出此命令之后必须能立即强制上拉 10mS 以上。 启动温度转换 Convert T [44h] 此命令开始温度转换,不需要另外的数据。 温度变换被执行后,DS18B20 便保持在空闲状态,如果总线主控 MCU在此命令之后发出读操作,那么只要 DS18B20 正忙于进行温度变换它将在总线上输出 0,当温度变换完成时它便返回 1。 重新调出 EEPROM Recall E2 [B8h] 此命令把贮存在 EEPROM中温度触发器的值以及配置寄存器的值重新调至缓冲存储器,这种重新调出的操作在对 DS18B20 上电。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。