This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器:用于多个节点的 CAN 通信

Guru**** 2465890 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/666082/compiler-can-communication-for-multiple-nodes

工具/软件:TI C/C++编译器

我按照指令操作,并成功地在 CAN 示例代码中实施,如 Tiva C 系列中所述,用于2个节点之间的通信。 但是
我无法找到有关如何为3个或4个节点实施 CAN 以及如何准确完成编程以处理 CAN 的任何来源。
我正在为电动汽车设计数据采集系统,但在有多个节点的情况下,我无法理解该编程。

在示例中,只有一个节点正在发送数据,另一个节点正在接收数据。 是否有人可以引导我访问任何用于处理 CAN 网络中多个节点的链接或良好资源?

提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没有什么不同。 过滤由 msgid 完成。 假设您有一个五节点网络、四个滚轮各一个节点、另一个从四个节点中的每一个接收滚轮速度的第五个节点。 为四个轮节点的每个节点分配具有唯一 msgid 的发送邮箱、例如0x100、0x101、0x102和0x103。 现在、在接收节点、您可以采用两种方法之一。 (1)您可以配置四个接收邮箱、每个 ID 一个;或者(2)您可以配置单个接收邮箱并使用消息 ID 掩码、以便此邮箱将接收四个已发送消息中的任何一个。 在第二种情况下,您可以通过读取收到的消息 ID 来了解信息来自哪个轮。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的回复。 这有道理。 如果您不介意、我还有一些疑问。

    如您提到的示例所示
    我是否需要担心从所有车轮上使用 CAN.send 函数的顺序,或者他们的仲裁是否会自动处理这一问题。
    或者、是否只需在所有"轮"节点的固定间隔内使用发送功能、并让 CAN 总线决定首先将哪一个发送到第5个节点?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CAN 的优点是仲裁是自动完成。 仅当总线当前未使用时、每个节点才开始传输。 如果两个或多个节点同时启动、则消息 ID 较低的节点将胜出。 它的消息将被传输。 其他节点将等待总线处于静默状态、然后自动重试(无需软件干预)。