如何让can总线传输距离的传输更稳定呢?

查看: 2007|回复: 47
CAN入门,总线是如何传输数据的
主题帖子精华
在线时间51 小时
本帖最后由 YMC 于
17:48 编辑
之前发了两个关于canopen的帖子,很多网友加我问了一些问题,居然还有很多网友对can的认识也是不清不楚的,讲设备地址的问题。其实也怪在一些CAN的文档上这些地方只是一概而过。就像Renesas 的can入门书上也是只说了一句话。其实是很简单很浅的知识,对于CAN总线,与总线相连的单元是没有类似于“地址”的信息。下面把我之前看到的几个文章整理贴出来,很清楚的讲解了数据传送的过程。
1、CAN总线传送到数据是基于消息而不是地址的,每个消息用不同的编号表达(2.0A用11位、2.0B用29位)。在CAN上进行简单传送而自定义传送协议时,要把所有需要传送的命令列出,然后根据传送的紧急程度(优先级)从高到低进行排序,然后把最高优先级的设定一个最低的编号、以此类推...最低优先级的设定最高的编号。因为CAN物理上是不分主从,所以当有几个站点同时发送而发生碰撞时,编号最低的将优先传送。 2、接收和发送消息从总线上接收消息:每个站点可能只对所有协议中的几个消息感兴趣,CAN初始化时,在过滤器中设置本站点需要接收的消息编号,这样一旦总线上有需要的消息将会自动接收,并产生中断,通知CPU收到新消息,CPU在中断程序中接收、处理。 发送消息到总线上:CAN初始化时设置本站点将来需要发送的消息编号,当运行过程中需要发送消息时,填入相关数据,设置相关消息对象发送。 CAN控制器内部一般设有32个消息对象,分成2组,分别各用一组寄存器来操作。一般一组用来接收过滤,另一组用来发送。
STM32普通型芯片的 CAN 有14组过滤器组(互联型有28组过滤器组) ,用以对接收到的帧进行过滤。每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和 CAN_FxR1。a、对于过滤器组, 可以将其配置成屏蔽位模式, 这样 CAN_FxR0中保存的就是标识符匹配值,CAN_FxR1中保存的是屏蔽码。即 CAN_FxR1中如果某一位为1,则CAN_FxR0中相应的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器;& &CAN_FxR1中为0的位表示&&:&&CAN_FxR0中的相应位可不必与收到的帧进行匹配。 b、过滤器组还可以被配置成标识符列表模式,此时 CAN_FxR0和 CAN_FxR1中的都是要匹配的标识符,收到的帧的标识符必须与其中的一个吻合才能通过过滤。注意:CAN_FilterIdHigh 是指高16位 CAN_FilterIdLow 是低16位应该将需要得到的帧的和过滤器的设置值左对齐起。一般我们用的都是普通型的,所以在本文中可以说 STM32有14组过滤器组。
根据配置,每1组过滤器组可以有1个,2个或4个过滤器。这些过滤器相当于关卡,每当收到一条报文时,CAN 要先将收到的报文从这些过滤器上&过&一下,能通过的报文是有效报文,收进 FIFO,不能通过的是无效报文(不是发给&我&的报文),直接丢弃。所有的过滤器是并联的,即一个报文只要通过了一个过滤器,就是算是有效的。
详解每组过滤器组有两种工作模式:标识符列表模式和标识符屏蔽位模式。
在标识符列表模式下,收到报文的标识符必须与过滤器的值完全相等才能通过。
在标识符屏蔽位模式下,可以指定标识符的哪些位为何值时就算通过。这其实就是限定了处于某一范围的标识符能够通过。
在一组过滤器中,整组的过滤器都使用同一种工作模式。另外,每组过滤器中的过滤器宽度是可变的,可以是32位或16位。
按工作模式和宽度,一个过滤器组可以变成以下几中形式之一:
(1) 1个32位的屏蔽位模式的过滤器。
(2) 2个32位的列表模式的过滤器。
(3) 2个16位的屏蔽位模式的过滤器。
(4) 4个16位的列表模式的过滤器。
所有的过滤器是并联的,即一个报文只要通过了一个过滤器,就是算是有效的。每组过滤器组有两个32位的寄存器用于存储过滤用的&标准值&,分别是 FxR1,FxR2。
在32位的屏蔽位模式下:有1个过滤器。FxR2用于指定需要关心哪些位,FxR1用于指定这些位的标准值。
在32位的列表模式下:&&有2个过滤器。FxR1指定过滤器0的标准值,收到报文的标识符只有跟 FxR1完全相同时,才算通过。FxR2指定过滤器1的标准值。
在16位的屏蔽位模式下:有2个过滤器。FxR1配置过滤器0,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值。FxR2配置过滤器1,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值。
在16位的列表模式下:&&有4个过滤器。FxR1的[15-0]位配置过滤器0,FxR1的[31-16]位配置过滤器1。FxR2的[15-0]位配置过滤器2,FxR2的[31-16]位配置过滤器3。
STM32的 CAN 有两个 FIFO,分别是 FIFO0和 FIFO1。为了便于区分,下面 FIFO0写作FIFO_0,FIFO1写作 FIFO_1。
每组过滤器组必须关联且只能关联一个 FIFO。复位默认都关联到 FIFO_0。所谓“关联”是指假如收到的报文从某个过滤器通过了,那么该报文会被存到该过滤器相连的 FIFO。
从另一方面来说,每个 FIFO 都关联了一串的过滤器组,两个 FIFO 刚好瓜分了所有的过滤器组。
每当收到一个报文,CAN 就将这个报文先与 FIFO_0关联的过滤器比较:如果被匹配,就将此报文放入 FIFO_0中。如果不匹配, 再将报文与 FIFO_1关联的过滤器比较, 如果被匹配,该报文就放入 FIFO_1中。如果还是不匹配,此报文就被丢弃。每个 FIFO 的所有过滤器都是并联的,只要通过了其中任何一个过滤器,该报文就有效。
如果一个报文既符合 FIFO_0的规定,又符合 FIFO_1的规定,显然,根据操作顺序,它只会放到 FIFO_0中。每个 FIFO 中只有激活了的过滤器才起作用,换句话说,如果一个 FIFO 有20个过滤器,
但是只激话了5个,那么比较报文时,只拿这5个过滤器作比较。一般要用到某个过滤器时,在初始化阶段就直接将它激活。需要注意的是,每个 FIFO 必须至少激活一个过滤器,它才有可能收到报文。如果一个过滤器都没有激活,那么是所有报文都报废的。
一般的,如果不想用复杂的过滤功能, FIFO 可以只激活一组过滤器组,且将它设置成 32位的屏蔽位模式,两个标准值寄存器(FxR1,FxR2)都设置成0。这样所有报文均能通过。(STM32提供的例程里就是这么做的! )
STM32 CAN 中,另一个较难理解的就是过滤器编号。
过滤器编号用于加速 CPU 对收到报文的处理。收到一个有效报文时, CAN 会将收到的报文以及它所通过的过滤器编号,一起存入接收邮箱中。CPU 在处理时,可以根据过滤器编号,快速的知道该报文的用途,从而作出相
应处理。不用过滤器编号其实也是可以的, 这时候 CPU 就要分析所收报文的标识符, 从而知道报文的用途。
由于标识符所含的信息较多,处理起来就慢一点了。
STM32使用以下规则对过滤器编号:
(1) FIFO_0和 FIFO_1的过滤器分别独立编号,均从0开始按顺序编号。
(2) 所有关联同一个FIFO的过滤器,不管有没有被激活,均统一进行编号。
(3) 编号从0开始,按过滤器组的编号从小到大,按顺序排列。
(4) 在同一过滤器组内,按寄存器从小到大编号。FxR1配置的过滤器编号小,FxR2配置的过滤器编号大。
(5) 同一个寄存器内,按位序从小到大编号。[15-0]位配置的过滤器编号小,[31-16]位配置的过滤器编号大。
(6) 过滤器编号是弹性的。 当更改了设置时,每个过滤器的编号都会改变。但是在设置不变的情况下,各个过滤器的编号是相对稳定的。
这样,每个过滤器在自己在 FIFO 中都有编号。
在 FIFO_0中,编号从0 -- (M-1), 其中 M 为它的过滤器总数。
在 FIFO_1中,编号从0 -- (N-1),,其中 N 为它的过滤器总数。
一个 FIFO 如果有很多的过滤器,,可能会有一条报文, 在几个过滤器上均能通过,这时候,,这条报文算是从哪儿过来的呢?
STM32在使用过滤器时,按以下顺序进行过滤:
(1) 位宽为32位的过滤器,优先级高于位宽为16位的过滤器。
(2) 对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式。
(3) 位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高。
按这样的顺序,报文能通过的第一个过滤器,就是该报文的过滤器编号,被存入接收邮箱中。
CAN验收滤波器有2种工作模式:一种是一般模式;另一种被称为“FullCAN模式”。在一般模式下,当CAN控制器的接收端收到一个完整的标识符时,它将通知接收验收滤波器。验收滤波器响应这个信号,读出CAN控制器编号和标识符大小(标准标识符ll位或扩展标识符29位);然后搜索LUT,查找匹配的标识符。如果找到匹配的标识符,则通知CAN控制器将接收的报文放入CAN控制器接收缓冲中;否则,放弃接收到的这一帧信息。 如果使能FullcAN模式,且CAN控制器报告产生的是一个标准标识符,则验收过滤器首先查询FullCAN标准标识符表,然后在FullCAN模式下处理接收。如果在FullCAN标准标识符表中没有找到匹配的ID,则依次查找下一个存在的表格,直到找到匹配者或查找表结束。一旦发现匹配的ID,就将接收到的报文放入特定的报文缓冲中而不是CAN控制器接收缓冲中,这个特定的缓冲位于验收滤波器的RAM中,而且是在LUT的最后部分。CPU可以在任何时候读取接收到的报文。
CAN滤波器了解CAN总线的人都知道,CAN总线在的帧数据在总线上传送时,其它的CAN控制器是通过验收滤波来决定总线上的数据帧的ID是否和本节点相吻合,如果与本节点吻合,那么总线上的数据就被存入总线控制器的相应寄存器里,否则就抛弃该数据,从而也能够减轻总线控制器的工作量。换句话说,总线上数据帧的ID通过待接收节点的验收滤波后是吻合的,是可以被接收的。那么,总线控制器是如何进行验收滤波的呢?验收滤波分单滤波和双滤波。标准帧和扩展帧由于ID长度不同,它们的两种滤波也有所区别。这里我只重点举一个例子,因为只要理解了一种滤波方式,其它的滤波方式都是类似的,也很容易就理解了。这里就说扩展帧的双滤波方式。所谓双滤波,就是有两次的滤波,但并非两次滤波都需要通过才双通过,两次滤波只要有一次滤波成功那么就默认滤波通过,可以接收数据了。ACR0ACR1ACR2ACR3AMR0AMR1AMR2AMR3ID.28-ID.21ID.20-ID.13ID.28-ID.21ID.20-ID.13如上表所示,ACR寄存器是接收代码寄存器,AMR是接收屏蔽寄存器。ACR一般是需要与对应的ID相吻合的,但是如果AMR的相应位上设置为1的时候,ID的那一位数据可以不和AMR的相应位一样,也就是起到屏蔽的作用。举个例子:如果ACR0=,AMR0=,那么要想通过验收滤波,必须ID.28-ID.21=ACR0=。& && && & 如果AMR0=,那么ID.28-ID.21=时,也可以通过验收滤波,因为此时AMR0的第五位为1,也就是屏蔽了ACR0的第五位。所以ID的相应位可以不合ACR0一致。在扩展帧的双滤波方式下,ACR0\ACR1分别对应ID.28-ID.13 ,ACR2\ACR3分别也对应ID.28-ID.13,这就达到了两次滤波的效果。另外要说明的一点是:通过验收滤波后符合节点要求的数据就存储到节点的相应寄存器里,其它的帧信息并不做存储。
论坛内讲解can过滤器的知识:
CAN总线过滤器学习很好的一点资料 :/forum.php?mod=viewthread&tid=20666&highlight=can%D7%DC%CF%DF
积赞的一些资料和书籍:
17:46 上传
点击文件名下载附件
1.83 MB, 下载次数: 920
17:46 上传
点击文件名下载附件
375.75 KB, 下载次数: 470
17:46 上传
点击文件名下载附件
1.44 MB, 下载次数: 1034
17:46 上传
点击文件名下载附件
14.31 MB, 下载次数: 4324
17:46 上传
点击文件名下载附件
8.77 MB, 下载次数: 10428
17:46 上传
点击文件名下载附件
1.65 MB, 下载次数: 823
17:46 上传
点击文件名下载附件
718.67 KB, 下载次数: 394
17:46 上传
点击文件名下载附件
2.23 MB, 下载次数: 858
---------------------------------------------------
个人论坛博客:
个人淘宝小店:
主题帖子精华
中级会员, 积分 476, 距离下一级还需 24 积分
在线时间83 小时
这里也有一盘不错的文档
主题帖子精华
中级会员, 积分 355, 距离下一级还需 145 积分
在线时间71 小时
赞,精髓,太详细了,以前很模糊的,现在很清晰,必须精华!!!
主题帖子精华
新手上路, 积分 38, 距离下一级还需 12 积分
在线时间3 小时
好厉害的楼主
主题帖子精华
在线时间51 小时
这里也有一盘不错的文档
/forum.php?mod=viewthread&tid=10328&highlight=STM32%2Bcan
恩 很好的文档&&如果能把这些资料全部汇总,其实入门很快的
---------------------------------------------------
个人论坛博客:
个人淘宝小店:
主题帖子精华
在线时间51 小时
好厉害的楼主
---------------------------------------------------
个人论坛博客:
个人淘宝小店:
主题帖子精华
在线时间51 小时
赞,精髓,太详细了,以前很模糊的,现在很清晰,必须精华!!!
恩 大家可以把can入门整理的文档,集中在这,这样新手入门看完帖子就很快入门了
---------------------------------------------------
个人论坛博客:
个人淘宝小店:
主题帖子精华
金牌会员, 积分 1834, 距离下一级还需 1166 积分
在线时间488 小时
不错不错,我看了好几遍各种找资料才把CAN通讯弄到比较清楚。
楼主再加一下通讯的时序和位时序,和位时序的修正就好了
主题帖子精华
中级会员, 积分 476, 距离下一级还需 24 积分
在线时间83 小时
汇总一下,这里还有一份CAN协议方面的资料
主题帖子精华
新手上路, 积分 24, 距离下一级还需 26 积分
在线时间1 小时
主题帖子精华
初级会员, 积分 107, 距离下一级还需 93 积分
在线时间18 小时
STM32中文参考手册_V10里面提到屏蔽位好像1是必须匹配,0是不需要关心,不知道对不对。
主题帖子精华
中级会员, 积分 476, 距离下一级还需 24 积分
在线时间83 小时
主题帖子精华
初级会员, 积分 190, 距离下一级还需 10 积分
在线时间32 小时
谢谢楼主分享!
主题帖子精华
中级会员, 积分 338, 距离下一级还需 162 积分
在线时间49 小时
谢谢楼主,收藏了!!!!
书山有路勤为径,学海无涯苦作舟!
主题帖子精华
中级会员, 积分 270, 距离下一级还需 230 积分
在线时间154 小时
主题帖子精华
中级会员, 积分 427, 距离下一级还需 73 积分
在线时间69 小时
好厉害的楼主
主题帖子精华
中级会员, 积分 419, 距离下一级还需 81 积分
在线时间55 小时
主题帖子精华
初级会员, 积分 182, 距离下一级还需 18 积分
在线时间52 小时
谢谢分享,很全很好的资料!
主题帖子精华
中级会员, 积分 489, 距离下一级还需 11 积分
在线时间165 小时
主题帖子精华
新手上路, 积分 13, 距离下一级还需 37 积分
在线时间2 小时
谢谢分享,很全很好的资料!全部下载
主题帖子精华
新手上路, 积分 18, 距离下一级还需 32 积分
在线时间3 小时
谢谢分享(☆^O^☆)
主题帖子精华
中级会员, 积分 476, 距离下一级还需 24 积分
在线时间83 小时
谢谢分享,很全很好的资料!
主题帖子精华
中级会员, 积分 427, 距离下一级还需 73 积分
在线时间69 小时
谢谢分享(☆^O^☆)
主题帖子精华
金牌会员, 积分 1128, 距离下一级还需 1872 积分
在线时间141 小时
赞,找CAN资料很久了
主题帖子精华
中级会员, 积分 419, 距离下一级还需 81 积分
在线时间55 小时
谢谢分享& && && && && &
主题帖子精华
中级会员, 积分 476, 距离下一级还需 24 积分
在线时间83 小时
谢谢楼主分享!
主题帖子精华
中级会员, 积分 355, 距离下一级还需 145 积分
在线时间71 小时
又来看了一下,回顾一下之前学的都忘了
主题帖子精华
中级会员, 积分 229, 距离下一级还需 271 积分
在线时间50 小时
下载了 希望能看懂
主题帖子精华
中级会员, 积分 224, 距离下一级还需 276 积分
在线时间42 小时
MARK,谢谢分享
主题帖子精华
中级会员, 积分 474, 距离下一级还需 26 积分
在线时间57 小时
顾卫刚出的书《手把手教你学DSP--基于TMS320X281x》第16章关于CAN讲的很好
主题帖子精华
中级会员, 积分 427, 距离下一级还需 73 积分
在线时间69 小时
汇总一下,这里还有一份CAN协议方面的资料
/forum.php?mod=viewthread&tid=17147
谢谢分享.& && && && &&&
主题帖子精华
中级会员, 积分 216, 距离下一级还需 284 积分
在线时间43 小时
说谢谢的,有几个看懂了,反正我没有看懂!!
主题帖子精华
中级会员, 积分 427, 距离下一级还需 73 积分
在线时间69 小时
主题帖子精华
中级会员, 积分 419, 距离下一级还需 81 积分
在线时间55 小时
MARK,谢谢分享
主题帖子精华
新手上路, 积分 4, 距离下一级还需 46 积分
在线时间1 小时
谢谢分享CAN。
主题帖子精华
金牌会员, 积分 1361, 距离下一级还需 1639 积分
在线时间149 小时
谢谢楼主分享,学习了,讲的非常详细。
主题帖子精华
高级会员, 积分 648, 距离下一级还需 352 积分
在线时间72 小时
主题帖子精华
中级会员, 积分 427, 距离下一级还需 73 积分
在线时间69 小时
这里也有一盘不错的文档
/forum.php?mod=viewthread&tid=10328&highlight=STM32%2Bcan
主题帖子精华
中级会员, 积分 419, 距离下一级还需 81 积分
在线时间55 小时
主题帖子精华
中级会员, 积分 476, 距离下一级还需 24 积分
在线时间83 小时
谢谢楼主分享,学习了,讲的非常详细
主题帖子精华
中级会员, 积分 419, 距离下一级还需 81 积分
在线时间55 小时
太详细了,以前很模糊的,现在很清晰,必须精华!!!
主题帖子精华
中级会员, 积分 476, 距离下一级还需 24 积分
在线时间83 小时
好厉害的楼主
主题帖子精华
初级会员, 积分 67, 距离下一级还需 133 积分
在线时间11 小时
很好很厉害
主题帖子精华
中级会员, 积分 427, 距离下一级还需 73 积分
在线时间69 小时
谢谢楼主分享!
主题帖子精华
初级会员, 积分 75, 距离下一级还需 125 积分
在线时间15 小时
主题帖子精华
初级会员, 积分 121, 距离下一级还需 79 积分
在线时间6 小时
正点 开发板&&+& &CANWeb 现场总线技术 是个 完美的 CAN解决方案;
冗余双CANWeb现场总线 正点 开发板Keil工程 C++源程序下载链接:
主题帖子精华
初级会员, 积分 65, 距离下一级还需 135 积分
在线时间5 小时
发表于 3&天前
谢谢楼主,收藏了!!!!
主题帖子精华
新手上路, 积分 48, 距离下一级还需 2 积分
在线时间4 小时
发表于 4&小时前
很好很厉害
Powered byCAN总线呕心沥血教程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
CAN总线呕心沥血教程
&&can总线教程
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢CAN总线要点
CAN总线的应用在现在看来越来越广泛,我厂设备从最初的ARM9与ARM7平台、期间升级过度到CortexA8与Cortex M3平台,再到现在的Cortex M4平台,围绕CAN进行了一系列产品的开发,CAN总线的稳定性是毋庸置疑的。
CAN总线物理结构与特性
CAN总线网络
CAN总线网络主要挂在CAN_H和CAN_L,各个节点通过这两条线实现信号的串行差分传输,为了避免信号的反射和干扰,还需要在CAN_H和CAN_L之间接上120欧姆的终端电阻,但是为什么是120欧姆呢?那是因为电缆的特性阻抗为120欧。
&CAN收发器
CAN收发器的作用是负责逻辑电平和信号电平之间的转换。
即从CAN控制芯片输出逻辑电平到CAN收发器,然后经过CAN收发器内部转换将逻辑电平转换为差分信号输出到CAN总线上,CAN总线上的节点都可以决定自己是否需要总线上的数据。具体的管教定义如下:
CAN总线采用不归零码位填充技术,也就是说CAN总线上的信号有两种不同的信号状态,分别是显性的(Dominant)逻辑0和隐形的(状态逻辑信号电压范围显性Dominant0 隐性recessive1类型标准最高速率描述高速CANCAN/ISO 11839-21Mbit/秒最通用的CAN总线类型低速CANISO/ISO 11839-3125Kbit/秒容错,在一条总线短路的时候仍然能工作单线CANSAE J241150Kbit/秒高速模式可达到100Kbit/s主要用在汽车上,例如通用公司位速率/kbps10005002501251005020105最大距离/m4013027053062013003300670010000域描述仲裁域仲裁域决定了当总线上两个或是多个节点争夺总线时的优先权。数据域包含了0到8字节的数据。CRC域包含了15位的校验和,校验和用来做错误检测。应答槽任何一个已经正确接收到消息的控制器在每一条消息的末端发送一个应答位,发送器检查消息是否存在应答位,如果没有就重发消息。错误类型出错条件出错域帧测单元比特错误
bit error发送的位值与所监控的位值不相符合(填充比特和ACK比特除外)数据帧发送单元
接收单元填充错误stuff error侦测到6个连续相同的电平数据帧(SOF~CRC)
远程帧(SOF~CRC)发送单元
接收单元CRC 错误计算结果和接收到的CRC不同数据帧(CRC)
远程帧(CRC)接收单元格式错误
Form Error某个固定的格式位置出现无效的比特数据帧:
(CRC Delimiter, ACK Delimiter EOF)
(CRC Delimiter,ACK Delimiter)
(Error Frame Delimiter)
(Overload Delimiter)接收单元应答错误
Acknowledgment发送端在应答间隙所监视的位不为显性,即逻辑0,发送器就检测到一个应答错误。数据帧(ACK slot)
远程帧(ACK slot)发送单元
&错误条件Transmit Error CounterReceive Error Counter1RECEIVER端侦测到一个位Error错误,除了发送ACTIVE ERROR FLAG 和OVERLOAD FLAG-+12TRANSMITIER 发送ERROR FLAG+8&3TRANSMITTER发送ACTIVE ERROR FLAG OVERFLAG时侦测到BIT ERROR+8&4当RECEIVER发送ACTIVE ERROR FLAG或OVERFLAG时侦测到BIT ERROR+8&5一个帧被成功发送之后(取得ACK并且知道END OF FRAME完成都没有错误)-1 IF TEC=0,TEC will not be changed-6一个帧被成功接收(知道ACK域都没有检测到错误,并成功发送ACK比特)-1. if 1 &= REC &= 127 -& REC-1
2. if REC = 0 -& REC = 0
3. if REC & 127 -& REC = a value
Between 119 to 1277在总线上检测到128此连续的11个1,"bus off"的节点允许变成不再是"bus off"Cleared to TEC = 0Cleared to REC = 0
阅读(...) 评论()针对CAN总线传输距离问题的两种解决方案
针对CAN总线传输距离问题的两种解决方案
摘要:简单介绍了CAN总线的来源、现状及存在的问题;针对CAN总线传输距离存在的问题提出了两个解决方案,并进行了实验和比较,试验结果证明本文的方法提高了传输距离的可靠性。关键词:现场总线、CAN总线、单片机TwoSolutionsDealWithTheProblemOfCANBusTransportDistanceFANRui-xiaLIWe-ixingAbstract:Inthispaper,theorigin,actualityandproblemsstillexistareintroducedbriefly.TwosolutionsareproposedtodealwiththeproblemofCA
摘&&要:简单介绍了CAN总线的来源、现状及存在的问题;针对CAN总线传输距离存在的问题提出了两个解决方案,并进行了实验和比较,试验结果证明本文的方法提高了传输距离的可靠性。 关键词:现场总线、CAN总线、单片机 Two&Solutions&Deal&With&The&Problem&Of&CAN&Bus&Transport&Distance FAN&Rui-xia&LI&We-ixing Abstract:In&this&paper,&the&origin,&actuality&and&problems&still&exist&are&introduced&briefly.&Two&solutions&are&proposed&to&deal&with&the&problem&of&CAN&bus&transport&distance.&Some&experiments&are&carried&out&and&the&results&are&compared.&The&results&demonstrate&that&the&proposed&method&enhance&the&reliability&the&transport&distance Keywords:Field&bus,&CAN&bus,chip&microcomputer 1、&CAN总线简介   1.1&CAN总线发展概况[1]   CAN网络原本是德国Bosch公司为欧洲汽车市场所开发的,希望此项技术取代原本昂贵的汽车配线。CAN网络具有反映可靠度高的特性,使用于实时处理的场合,例如汽车防锁死系统、安全气囊等。今天此项通讯协议已得到广泛应用,其特色不仅在汽车工业,在工业控制的其他领域也发挥了其强大的能力。CAN总线在国内发展已经二三十年了,很多关于CAN的产品也已经开发和广泛使用,如:变电厂、机场、污水处理厂等。   1.2&CAN总线存在的问题   尽管CAN总线有很多优点,但是下面两点却制约着其发展,即:CAN总线的瓶颈问题。   (1)&传输距离最大只能达到10Km,而且并不是真正的可靠传输;   (2)&节点数量最多只能有110个。   下面将针对CAN总线瓶颈问题(1)做详细的讨论。 2、&针对CAN总线传输距离问题提出的方案   2.1&CAN总线结构[2]   CAN总线系统一般连接结构如图(以芯片82C250为例)所示,R=120Ω。(注:图中仅画出了一个智能设备,实际中可以最多达110个)
图1&CAN总线系统结构示意图   CAN总线一般都是利用在环境比较恶劣,控制室与现场比较远的场合。总线距离达到8Km以上时,其单向线路电阻将达到100Ω,而两端的终端电阻为120Ω(不考虑智能设备本身电阻,认为其电阻为无限大)。其等效电路为图2:
图2&CAN总线电路等效图      对于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总线技术作为一种新型的总线技术由于其具有良好的故障隔离能力、网络的实时响应能力以及CAN具有良好地传输防错设计等,使其已经成为现在最有前途的总线之一。 参考文献   [1]&阳宪惠.&现场总线技术及其应用.&北京:&清华大学出版社,&1999.   [2]&邬宽明.&CAN总线原理和应用系统设计.&北京:&北京航空航天大学出版社,&1996.   [3]&郭湛,宋存义,李海&基于CAN总线的火电厂贮煤筒仓安全监测系统&微计算机信息,)P5~7   作者简介:范瑞霞(1951-),研究员,本科,毕业于北京理工大学,主要研究方向:智能控制,计算机视觉;李位星(1976-),助工,硕士,毕业于北京理工大学,主要研究方向:计算机控制,图像处理。   通讯地址:北京理工大学自动控制系206教研室&邮编:100081
上一篇:已经是第一篇
型号/产品名
天隆有限公司
天隆有限公司
天隆有限公司
天隆有限公司}

我要回帖

更多关于 can总线传输速率 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信