CAN现场总线传输距离问题的两种解决方案
1、CAN总线简介
1.1CAN总线发展概况
CAN网络原本是德国Bosch公司为欧洲汽车市场所开发的,希望此项技术取代原本昂贵的汽车配线。CAN网络具有反映可靠度高的特性,使用于实时处理的场合,例如汽车防锁死系统、安全气囊等。今天此项通讯协议已得到广泛应用,其特色不仅在汽车工业,在工业控制的其他领域也发挥了其强大的能力。CAN 总线在国内发展已经二三十年了,很多关于CAN的产品也已经开发和广泛使用,如:变电厂、机场、污水处理厂等。
1.2CAN总线存在的问题
尽管CAN总线有很多优点,但是下面两点却制约着其发展,即:CAN总线的瓶颈问题。
(1)传输距离最大只能达到10Km,而且并不是真正的可靠传输;
(2)节点数量最多只能有110个。
下面将针对CAN总线瓶颈问题(1)做详细的讨论。
2、针对CAN总线传输距离问题提出的方案
2.1CAN总线结构
CAN总线系统一般连接结构如图(以芯片82C250为例)所示,R=120Ω。(注:图中仅画出了一个智能设备,实际中可以最多达110个)
图1CAN总线系统结构示意图
CAN总线一般都是利用在环境比较恶劣,控制室与现场比较远的场合。总线距离达到8Km以上时,其单向线路电阻将达到100Ω,而两端的终端电阻为120Ω(不考虑智能设备本身电阻,认为其电阻为无限大)。其等效电路为图2:
图2CAN总线电路等效图
对于CAN接收器而言能够识别的电压要大于0.8V,一般为0.9V以上。
2.2针对传输距离问题所作的尝试方案
从上面的电路图以及数据分析可以看出:在距离偏远时,总线线电压已经处于临界识别状态,其数据很难正常接收(已经没有可靠性可言)。为此我们尝试采用以下几个方案进行了实验。
2.2.1在线路中直接加两个发送芯片
该方案就是在总线线路中直接加入两个发送芯片(采用82C250为例)[3],并把发送芯片的管脚TXD和RXD对连。其连接电路如下:
图3发送芯片连接电路图
整个电路看似很正常,把左边的数据传输到右边,右边的数据传输到左边,实际上此电路是无法使用的。此电路接入总线后,只要在总线上有一个显性电平出现,那么整个电路将永远呈现显性电平。原因在于每个期间都有延迟(虽然是仅仅几个ns延迟),假设从电路左边收到一个显性电平,经过左右两个82C250 芯片延迟Tns后传输到右边CAN总线,另外82C250芯片本身具有同时发送、接收功能,那么右边的82C250芯片同时把右边CAN总线的显性电平又传送到左边,这样就形成了一个回路,使得总线永远处于显性状态。
2.2.2加入逻辑控制电路进行隔离
从上面可以看出,在发送数据时应该防止数据重传形成回路。为此我们做了如下规定:在有显性电平时只能够有一个方向传输(哪个方向先来显性电平开通哪个方向,同时到来则选择任一个方向开通);发送端显性电平结束后,所有方向都停止T1时间(Tns
利用CPLD很容易实现上面的规定逻辑。利用此方案把该电路先连接在总线10Km处,并在10Km不远处连接一个接收设备,实验能够接收正常,并且其接收端总线电压差为1.32V,是单连设备接收电压差的1.55倍。
2.2.3线路中间加入CAN卡中转实现远距离数据传输(中继器)
在距离达到10Km时,其接收数据不正常的原因是由于总线电压差值较小的缘故。为此,有的采用升压和降压电路是不现实的,因为每个接收器都得加入一个调理电路,造价很明显就上去了。另外,即使升压了,由于CAN总线按照仲裁发送决定了总要遇到方案二中提到的由于延迟总线形成闭合回路的问题。
为了达到远距离传输,可以在中间加入中继器,相当于把总线距离缩短了一倍。中继器的结构如下:
图4中继器结构示意图
选择使用两个8031单片机目的在于能够及时处理CAN总线上的数据,使得设计也变得比较简单,不需考虑CAN总线两边的数据发送冲突。只要每个单片机有1K的缓存就可以。
具体实现思路:单片机接收CAN总线数据,把数据进行缓存,在空闲阶段把数据传输到另一个单片机(两者之间通过SPI协议实现通信),同时把从另一个单片机传输来的数据发送出去。
在实际的工程中我们是利用此方案实现远距离传输的,主要原因是可以满足数据传输的可靠性,利用此方案的电路我们进行过节点数达到100的测试,其性能正常、可靠,能够满足实际的需要。
3、总结
本文的创新点提出了解决CAN现场总线传输远距离问题的可实施方案,第一个(加入逻辑电路)比较简单,而且不用考虑数据存储,仅仅是一个硬件实现;而第二
CAN现场总线传输距 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)