RS-485总线型远程测控系统已得到广泛应用,这主要因为RS-485总线具有传输距离远等特点。在传输速率为9600bit/s时传输距离可达1.2km以上,最高传输速率可达10Mbit/s,且只用普通双绞线即可,同一对双绞线上可以挂接多至256个以上的终端。有许多工业测控模块都是采用RS-485总线型的,比如Adam、Nudan等,但价格较高。本文介绍的RS-485远程测控系统结合传统的分布式测控系统的特点、利用了RS-485总线的特点,而且巧妙地应用了AT89C2051单片机和CD4067多路开关,因而成本低,功能灵活,使用简单。
1、系统设计方案
本系统由一台PC作为主机,多至255台AT89C2051单片机作为从机。主机的RS-232串行口经过外插式的RS-232/RS-485转换器变成RS-485的数字信号总线。PC与单片机之间通过RS-485数字信号总线进行串行通信。
单片机的串行口通过MAX485芯片转换成RS-485规程。单片机的P1.0~P1.3用于作为两片
CD4067(16选1多路开关)的地址选择信号。两片CD4067共同构成一个双16选1多路开关。PC首先发出所要选中的单片机编号m(0~254),然后发送该单片机控制的通道的序号n(0~15),这时第m个单片机的第n个通道选中,其信号与本系统的模拟信号总线相通,并传送到PC并行口(即打印口)上挂接的微型数据采集器上。微型数据采集器对模拟信号进行A/D转换后送入计算机进行记录和显示。如果被选中的通道的模拟信号是电流信号而不是电压信号,则需要在模拟信号总线之间并接一只电阻,以便将电流信号转换成电压信号。为了能有效地传送比较微弱的模拟信号,比如热电偶的热电势信号,系统的模拟信号总线必须使用屏蔽电缆。微型数据采集器应选用带多量程选择和程控放大的型号,以适应各种传感器输出信号的要求。本系统也可以用来远程控制继电器和电机等,此时利用微型数据采集器的D/A转换功能。比如第m个单片机的第n个通道接的是一个固态继电器,首先PC通过串行口发出地址信号选中该通道,然后PC通过微型数据采集器向该通道发出开或关的控制信号(经过D/A转换)。
2、系统硬件设计
主机PC所配的RS-232/RS-485转换器和微型数据采集器都已有市售的产品,价格也较低。RS-485数字信号总线经过MAX485芯片转换成TTL电平的RS-232信号以便与AT89C2051的串行口相配。AT89C2051的P1.0~P1.3分别接到两片CD4067(16选1多路开关)的地址选择端A0~A3.这样当P1.0~P1.3输出某个通道号(比如A3A2A1A0=0001)时,CH1的正端CH1+(即X1端)和CH-(即Y1端)同时选通。选用双端信号方式而不用单端信号方式(此时所有通道负端全部共地)的好处在于各个通道可以相互独立的输出信号或接收控制信号,因而各通道所接的传感器可以公用一个电源。两片CD4067的公共端X和Y分别接到模拟信号总线的正端和负端,整个从机电路用单5V电源供电,功耗大约100mW。
3、系统软件设计
主机PC与各从机的通信以单片机的串行通信方式3进行通信。方式3为波特率可变的9位数据(除1位起始位“0”和1位停止位“1”之外)异步通信方式,是多机通信中用得最多的方式。PC与多AT89C2051单片机的通信软件设计关键在于对单片机的串行控制寄存器SCON的正确编程以及对PC串行口接口的灵活使用。
当AT89C2051工作在方式3时,传送一帧信息共11位:1位起始位(D0=0),8位数据位(D1~D8),1位可编程位(D9)和1位停止位(D10)。其中附加的第9位D9作为“地址帧”和“数据帧”的识别标志位。此位数据在发送端由串行控制寄存器的TB8位产生,在接收端由自动传送到SCON的RB8位中。如果D9=TB8=1,则说明此帧信息为地址,否则为数据。串行控制寄存器SCON中有一位多机通信控制位SM2,当SM2=1时只接收地址帧,当SM2=0时既可接收地址帧也可接收数据帧。
当主机PC与某从机通信时,主机首先发送命令FFH,使各从机的SM2全置1.然后发送该从机的地址m(00H~FFH),注意地址帧的附加位D9=1,所以此时所有从机都进行串行中断响应处理(入口地址:0023H)。各从机中断响应处理为:将接收到的地址号m与自己的编号进行比较,如果不相等,则不予理睬,如果相等,则置SM2=0,并且等待继续接收将要选通的通道号n(0H~FH),再将n送到P3口。最后主机发送通道号n,由于n作为数据帧所以此时置D9=TB8=0.由于此时只有编号为m的从机的SM2=0,所以m号从机的n号通道选通。任何时候只能选通某一个从机的某一个通道。
对主机PC串行口的编程不仅要选择相同的波特率,而且要对通信线路控制器LCR进行巧妙地设置,为了与单片机的方式3相匹配,对LCR的设置为:8位数字长、允许奇偶校验、1位停止位。注意信号的奇偶校验位D9不能设置为固定的0或1,所以必须灵活选择奇校验还是偶校验以便设置D9为0或1.当发送地址帧时,需要D9为1,所以如果此时的地址的二进制码中“1”的个数为奇数,则选择偶校验,若为偶数,则选择奇校验。而发送数据帧时,选择正好相反。