打印

CAN让ARM跑死了

[复制链接]
3192|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
陈定一|  楼主 | 2007-8-16 09:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位工程师:
   1、我第一个问题是想请教:CAN总线的终端匹配电阻是如何计算的?我们都知道需要在总线两端加上120欧的终端电阻,但这个电阻的阻值是根据什么计算出来的,我在网上搜索了很久,也没有确定的答案。希望您能告诉我它的原理,或告诉我什么书或资料能找到上有就很感谢了啊!
      还有通过背板的形式走CAN总线,PCB布线上面有什么讲究?
   2、我的第二个问题就是讲述昨天我们在调试电路时遇到的奇怪现象,希望您能给我建议。
      我们的现象:CAN总线让ARM程序跑死了。
      我们设计了多个CPU模块,它们是通过CAN通信。这些模块电路板通过接插件连接到背板(Backplanes)上,背板上有CAN总线和5V的电源线。这些CPU模块中的主模块是AT91RM9200,CAN通信是MCP2510+TJA1050。而从模块是Infieon的XC164CS, CAN通信是TJA1050(cpu自己有can控制器)。供电系统是外部电源+24V通过DC-DC电源模块转换为5V,给各个模块供电。我们的实验是在背板上插上一个主模块,一个从模块,让他们通过CAN通信。
       奇怪的现象是:给系统上电后必须再按下主模块的复位键才能建立起CAN通信。更奇怪的是如果去掉24V变5V的电源模块,直接让外部提供5V电源供给,每次上电不用复位都能成功建立CAN通信。这让我们开始把主要精力放在查电源模块问题上了。但随后进一步发现也许真正出问题并非一定是电源供给模块。应为我们通过程序验证,不能建立CAN通信是因为ARM(AT91RM9200),程序跑飞了,相当于死机了。而且是我们把从模块去掉,主模块虽然收不到数据但也不会跑死。
       在这期间我们遇见了许多有趣的现象,比如我把示波器挂在主模块的CANH和CANL上,不会跑死,也收不到从模块来的数据。
       并且我通过调整安放终端电阻的位置,还是没有任何效果。
       后来我们通过在ARM里面加看门狗实现了上电CAN通信。但真正电路上的问题还是悬而未决啊!!!
       我希望各位大侠,高工,给于我指点。更希望所有看了的人都能讨论。

相关帖子

沙发
农民讲习所| | 2007-8-16 10:05 | 只看该作者

很可能软件问题

比如:协议制定不严格,ARM解析协议陷入死循环怪圈。
数据缓冲区不够大
初始化工作没做好

使用特权

评论回复
板凳
农民讲习所| | 2007-8-16 10:06 | 只看该作者

硬件上也可能

比如PCB设计走线和地面积不够
CAN连线没加ESD保护

使用特权

评论回复
地板
Ice_River| | 2007-8-16 10:19 | 只看该作者

菜鸟回答一下

我觉得应该是软件的问题,你可以好好的考虑CAN处理的机制。120欧,属于阻抗匹配,如果速度不高可以不予考虑。

使用特权

评论回复
5
陈定一|  楼主 | 2007-8-16 10:46 | 只看该作者

感谢上面师兄回答

但是为什么上电后再按复位键就能正常工作呢?我个人认为是电气特性不佳引起的。刚得到一个搞笑的现象.有一块主模块(at91am9200)可以上电就能正常通信(没有开看门狗)。其它还是不行。

使用特权

评论回复
6
农民讲习所| | 2007-8-16 10:52 | 只看该作者

上电过程,可能有无效数据接收。这个时刻是控制器、IO不确

协议不完整,解析过程就会陷入死循环。

你可以把软件解析部分去掉再评估。但要防止缓冲区溢出。缓冲区一定要使用队列方式,不要用数组方式,常识。

使用特权

评论回复
7
BitFu| | 2007-8-16 11:11 | 只看该作者

CAN电源地和CPU电源地间接一个小高压小电容试试

我曾经遇到过这样的事。

使用特权

评论回复
8
xfarm| | 2007-8-16 11:30 | 只看该作者

我遇到过类似2的问题:

1.不同电缆有一个特性阻抗,就是要配的终端电阻.
2.布线问题,最有可能是到背板布线过长,线上做个匹配电阻试试.

使用特权

评论回复
9
mytempid| | 2007-8-16 16:34 | 只看该作者

我觉得软件问题可能性大

使用不同电源现象不一样可能是由于上电次序不同引起的
应该先检查是哪一部分程序导致ARM死机,再确认原因。
现在范围太广了

使用特权

评论回复
10
陈定一|  楼主 | 2007-8-21 15:54 | 只看该作者

读取数据部分去掉后就不会跑死了

按照农民讲习所师兄的说法,把读取数据部分去掉后就不会跑死了
而MCP2510只有两个接收缓冲区,这样是否容易产生溢出呢?
在这种情况下应该如何设置成队列模式呢?

使用特权

评论回复
11
xuring| | 2007-8-22 12:58 | 只看该作者

CAN让ARM跑死了

我的系统加CAN口都没有加上去,我用的是AT9200 ,MCP2510,不知道怎么加到系统里面去,那位有驱动,能不能贡献一份出来,谢谢了!xuring@21cn.com

使用特权

评论回复
12
watercat| | 2007-8-24 10:43 | 只看该作者

5V能用24V不能用的话……

MCP2510的电源和地有没有与数字电路主电源用感容隔离?MCP2510到TJA1050之间有没有光藕(TJA1050的供电应该从CAN总线电源那边取)?所有供电模块之间是不是严格隔离了(共地也不成)?PCB板上两边是否有足够的距离?

一般来说,如果在5V下能正常使用,就完全不必考虑软件设计上的问题了

另外,在抗干扰方面,软件永远只能做很少的事,尤其在ARM9这种层次上,软件抗干扰个人认为根本是不可能的,一切还是应该以强健的硬件设计作为依据

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

82

帖子

0

粉丝