除非启动延迟时间长或连接了总线分析仪,否则为什么我的CAN收发器不会收到消息?


8

我正在使用16位MCU PIC24HJ64GP504编写基于CAN的应用程序。基本上,这是我的电路板与另一个节点之间的通信,该通信持续不断地以1 Mbit / s的速度使用CAN向我的电路板发送数据。我正在将PIC24中的ECAN模块配置为以1 Mbit / s的速度工作。我以这样的方式编写代码:在开始的10毫秒内,ECAN模块将接受来自另一侧的所有消息,然后,我将ECAN模块重新配置为仅接受消息ID为0x13的那些消息。

现在出现问题了。另一个节点和我的电路板同时启动。另一个节点在通电后约40毫秒后开始传输消息。但是我无法从董事会上收到任何消息。现在,如果我先给板子加电,给它一些时间用新的滤波器重新配置ECAN模块,然后安定下来再给另一个节点加电,那么一切就可以正常工作。

现在是最奇怪的部分。.如果我在电路板和另一个节点之间连接了CAN总线分析仪,并且即使我同时为两个节点加电,则一切正常……不需要先为电路板加电。我已经使用来自不同制造商的三种不同的总线分析仪进行了尝试,并获得了相同的结果。

在我看来,在重新配置ECAN模块期间,需要一些时间才能解决。随着总线中总线分析仪的引入,这段时间被缩短了,以便一切正常。但是我不确定到底是什么问题。

在过去的七天里,我一直在努力解决这个问题。

PS:今天我检查了一个示波器,发现如果另一个节点在加电后170毫秒后开始传输,则整个工作正常。在此之前,除非连接了总线分析仪,否则我的设备不会收到任何消息。最糟糕的部分是我无法延迟其他节点的传输,该节点的固件是专有的。

我也在今天的一个论坛上读到,CAN需要在节点处使用120电阻才能使其正常工作(即使我的节点没有电阻并且工作正常,只要在重新配置后有一定的时间来解决)。我怀疑总线分析仪的引入会以某种方式更改某些网络的电气参数,从而缩短我的节点在重新配置后建立所需的时间。但我不确定.. :(


1
您能给我们链接到您正在使用的所有产品吗?这使得更容易制定具体答案。
2012年

您是否可以对电路板进行更改,或者期望/希望使用纯软件解决方案?
vicatcu 2012年

即使您自己的节点未启动并正在运行,您是否确定另一个节点仍在继续传输?某些CAN实现使用错误计数器,并且如果错误计数器溢出(例如,由于未接收到任何节点),则传输节点将停止。
谢德勒2012年

Answers:


9

您“在论坛上阅读” CAN总线需要电阻的地方吗? 认真!!

这是设计不可或缺的一部分。如果要使用CAN,则需要了解它,这意味着阅读相关文档。

斯皮尔森是对的,但出于错误的原因。您可能拥有的差分CAN总线(您没有说要使用什么接口芯片,但可能每个节点上都有由MCP2551之类的东西驱动的标准差分CAN总线)在线路之间需要一个电阻。这是因为通过被动拉在一起的两条线来指示隐性状态,并且通过将它们主动拉开来将显性状态信号化。在这种意义上,线之间的电阻等效于集电极开路的上拉电阻。当没有东西驱动公交车时,如果没有东西把线拉在一起,公交车就无法工作。

正如spearson所指出的,电阻器还用作终结器。通常将两条双绞线用于双绞线。它的阻抗约为120Ω。这种类型的差分CAN总线被定义为在线之间具有60Ω的拉力,因此可以在每条120Ω的情况下实现以终止总线并避免反射。

 


“ spearson”指的是什么?名为“ spearson”的用户留下了评论(自从删除后还是用户更改了屏幕名称?)?一本书(作者姓名)?
彼得·莫滕森

@彼得:显然是的。
奥林·拉斯特罗普

4

在正常的CAN操作中,节点将重复其传输,直到被确认或超出错误计数为止。当您将CAN分析仪连接到网络时,当它检测到来自您的第一个节点的帧时,它将发出ACK位,从而使传输成功。如果您使用的是Microchip CAN BUS分析仪,则可以将其配置为“仅侦听”模式,这意味着它不会发出任何ACK位,因此不会影响网络。因此,您应该能够在分析仪显示中看到重复的CAN帧,直到第二个节点发出ACK或第一个节点由于错误计数而退出发送。

无论任何地址过滤如何,接收节点都会将ACK位置1(如果帧完整且正确)。

您的第一个节点很可能由于未确认帧而到达错误状态。您应该使用CiINTF寄存器在软件中检测到这一点。您也可以使用CiINTE寄存器将PIC配置为发出针对错误情况的中断。

如果您的示波器无法解码CAN帧,请尝试Saleae逻辑分析仪。它将解码CAN帧并显示ACK / Error位。它比Microchip CAN分析仪可靠得多。


3

CAN帧中有一个ACK插槽(两位)。如果节点A正在发送数据,并且总线上还有五个其他节点,则在发送之后,无论哪个节点接收到该帧,都将把主要位放在ACK时隙中。这表明消息已成功发送。否则,CAN控制器会将其视为总线上的错误。

添加CAN分析仪时,它将发送ACK到发送器。发送器认为总线良好,并继续发送。在没有CAN分析仪的情况下,当您重新配置CAN控制器时,发送器不会收到ACK,并认为总线上有错误,因此它将停止发送。

我希望你明白了。

确保ACK正确获取。重新配置时,也请尽量不要完全关闭CAN接收器。

另一个技巧(我不确定它是否将始终有效)是在重新配置后发送零DLC和零ID帧。这将告诉发送器节点总线处于活动状态,并且它将开始发送。

注意:必须使用 120Ω电阻!!!。在任何总线上,终止电阻都是重要的事情。


在初始化后发送零DLC和零ID帧的技巧实际上已经在标准中,称为启动消息。它的ID与心跳相同(0x700 +节点ID),并且单个DLC为1。分析器工具应该可以识别这一点。
BullBoyShoes 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.