现场总线CANbus与RS-485之间透明转换的实现
扫描二维码
随时随地手机看文章
1 CANbus简述
CAN现场总线技术是德国BOSCH公司于80年代初为解决现代汽车业中众多的控制与测试仪器之间的数据交换而开发,目前已逐步应用到其它领域的一种符合国际标准的串行数据通信协议。CAN的主要技术特点有:
(1)对等网络结构,网络上任意节点可在任意时刻向网络其它节点发送信息,不分主从,通信方式灵活。
(2)采用非破坏性总线仲裁技术,网络中的节点可以分成不同的优先级,当多个节点同时向网络上传送信息时,优先级低的节点主动暂停数据发送,而优先级高的节点可不受影响地继续传送数据。之后,按优先级高低,其它节点在总线空闲时依次进行被暂停的数据传送,有效地避免了总线冲突。
(3)每一帧的有效字节数最多为8个,帧传送时间短,受干扰概率小,重发时间短。每一帧信息都有CRC校验及其它检错措施,通信误码率低。
(4)网络节点在错误严重的情况下,具有自动关闭总线接口的功能,避免影响总线上的其它节点的正常操作。
(5)通信距离最远达10km(5kB/s),通信速率最高可达到1MB/s(40M),节点数目实际可达110个。通信介质采用双绞线,也可用光纤。
2 实现方法
CAN现场总线与RS-485总线的主要区别是:CAN总线是以帧为单位进行数据通信的,且每帧均携带对应的ID标示符,而RS-485是以字节为单位进行数据通信,不带任何其它附属信息。如果不考虑帧中的ID标示符,那么这二种总线传输的信息就可以认为完全相同。考虑到绝大多数应用CAN总线的场合都不可能分配完系统中的ID标示符资源,因而在系统中可以另分配一至多个ID标示符给RS-485总线数据,即给总线透明转换电路所用,收、发数据的ID标识符可以不相同。CAN总线系统中的公用主控设备一般被设置成直通状态,它可通过发送、接收具有不同ID标示符的不同数据帧,方便地对网络中的各种设备进行管理和控制。对那些纯粹靠帧数据本身而忽略ID标示符的系统来说,这种不同总线之间的转换更加简单。
实现二种总线之间的透明转换的基本过程是这样的:电路加电进入正常状态后,首先以电路中保存的参数(如未初始化则以缺省参数)对二个总线通信端口分别进行初始化,并将所有通讯端口设置成中断接收工作方式,在启动内部看门狗(Watchdog)后,电路等待外来数据的中断。一旦某一总线端口有有效数据进入,电路首先将这些数据读入内部数据缓冲区,置相关内部标志,关闭其它端口的中断,以使接收端数据能及时被接收到。在下一数据到来之前,电路将及时通过另一端口将缓冲区中的数据转发出去,直到缓冲区空。在这种转换过程中,如果数据是自CANBUS一端流入,则电路只将帧内数据读入到缓冲区。相反,则电路在转发数据之前自动按设置将设定ID标示符加到发送信息中,一旦转换过程结束,所有端口又被允许中断接收。电路中缓冲区一般可配置8k~32K字节的静态RAM。
在未进入转换工作时,电路允许参数设置端口的设置中断进入。参数设置包括:设置RS-485的通信波特率(当然端口数据格式也可设);设置CANBUS的通信波特率、接收码(accept-code)、屏蔽字(mask-code)、发送标示符。参数设置好后将立即生效,通过该端口还可查询当前电路中的各运行参数值。电路工作的主要流程图如图1所示。
3 实现电路
图2是一种可选的线路原理示意图。电路中使用的单片机是ATMEL公司的AT89S8252,它是一种内带8K Flash RAM、2K EEPROM、同时内嵌独立的硬件Watchdog电路,最高工作主频为24MHz的新型单片机。所配数据缓冲器62256为32K 字节的静态RAM。配置较大缓冲区的明显好处是提高了对二种不同速率总线的适应能力。图中RS232口是专用来设置二总线端口的工作参数,所设参数均保存在CPU的2K EEPROM中。另外,为提高线路的可靠性,对CANBUS端采用了电隔离措施,RS-485端所使用的MAX1480也是一种内部电隔离的芯片。图中VCC与VCC1为相互隔离的二组5V电源。
对于那些对总线响应速度要求比较苛刻的场合,可采用双CPU控制电路,即每个CPU分别负责一端总线的通信事务。数据缓冲区仍采用公用的单口或双口RAM。相应的控制算法必须增加一些有关对公共数据区的管理操作,在此不做详述。
以上电路多适用于二种总线并存于同一系统的场合,以实现二种总线之间的有机结合,使新老设备能很好地同时运行,节省系统开支。这种透明转换电路在已研制的分布式数据采集系统中应用以后,效果良好。
对以上电路稍做修改,即将MAX1480换成MAX232芯片就可设计出一种能在CAN现场总线与RS-232之间实现透明转换的电路。这种电路可用于那些需要用便携机与现场设备之间实现通信(如现场调试等)的场合,因为目前便携机一般只配RS-232接口。另外,如将电路的二个总线端口设计成相同的接口,那么它还可以用在使用同一种总线,但不同的区域却有不同通信速率的应用场合。
对于那些首次接触CANBUS技术的开发人员来说,以上电路还是一种很好的端点开发辅助设备,即开发人员只要对该电路设置合适的端口参数,并将用户电路与之连接好后,开发人员即可在一相对熟悉的环境下专心开发自己的应用电路。
参考文献
1 SJA1000 Stand-alone CAN controller.Philips Semiconductors,1997; (04)
2 8-Bit Microcontroller with 8K Bytes Flash,AT89S8252.ATMEL,0401D-A-12/97
3 邬宽明.CAN总线原理和应用系统设计.北京:北京航空航天大学出版社,1996