【问题标题】:Regarding CAN bus关于 CAN 总线
【发布时间】:2012-03-15 12:45:09
【问题描述】:

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

现在问题来了……另一个节点和我的板同时通电。另一个节点在上电后 40 毫秒左右开始传输消息。但我无法在我的板上收到任何消息。现在,如果我先给我的电路板加电,给它一些时间用新的过滤器重新配置 ECAN 模块并稳定下来,然后再给另一个节点加电,那么一切都会正常工作。

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

在我看来,在重新配置 ECAN 模块期间,需要一些时间来安定下来。并且随着总线分析器在总线中的引入,这段时间不知何故被缩短了,这样一切都可以完美运行。但我不确定问题到底是什么。

【问题讨论】:

标签: microcontroller pic can-bus


【解决方案1】:

问题可能是缺少 ACK。 CAN-Analyzer 可能会确认帧并且设备不会切换到被动错误。

我会在整个总线初始化之前推迟发送。

【讨论】:

  • 我的设备没有传输任何东西。它只是消耗数据,就是这样。另一个节点的固件也不在我的控制之下。我将无法将其传输开始时间从 40 毫秒更改为 100 毫秒。顺便说一句,今天我检查了一个示波器,发现如果另一个节点在 170 毫秒后开始传输,那么整个事情就可以正常工作了。但如果它在此之前传输,我的设备上不会收到任何消息。
  • @Philipp 我不敢相信 CAN 分析器会产生 ACK,它应该始终处于只听模式
  • @jeb - CAN 分析工具确实会产生 ACK,除非您将它们配置为不
  • @Martin:感谢您澄清这一点
【解决方案2】:

对我来说,这听起来像是缺少 ACK。

您是否看到任何错误帧(让示波器触发 6 个连续显性位) - 如果没有得到足够的确认,Tx 节点可能会脱离总线,甚至进入某些应用程序错误模式。

您可以通过在总线上传输一个虚拟消息将其哄回总线上。

我发现Saleae Logic 在这些情况下(以及示波器)非常有用 - 将其挂在物理层的 Rx 引脚上(或者甚至连接一个可用于监控总线的独立 PHY )。 Saleae 软件将解释 CAN 并向您显示正在发生的事情。有时使用范围触发器来触发逻辑很有用。

【讨论】:

    【解决方案3】:

    CAN 通信需要至少总线上的两个有源设备才能成功通信。这是因为,除非有人确认,否则 CAN 帧不会完成。

    当您启动您的主板和其他节点时,您的主板似乎没有在 40 毫秒内准备好。如果它没有准备好,它会让“其他节点”成为总线上的唯一成员,并违反上述规则。其他节点将收到 Tx 错误,并且在 128 错误之后,其他节点将进入错误模式并停止发送消息 - 因此您什么也得不到。

    当你先给你的电路板加电时,给它一点时间——你的电路板已经准备好了,并且会确认其他节点发送的每一条消息——因此通信很好!

    当你添加CANalyzer时,即使你的板子没有上电,总线上也有两个活动节点——因此通信很好!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 2020-10-07
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      相关资源
      最近更新 更多