j1939自定义模块通信

时间:2017-04-15 20:14:11

标签: arduino can-bus

我正在构建基于Atmega2560芯片的自定义Canbus IO模块。该模块将具有10个高电流输出,具有pwm控制和电流反馈,20个数字输入,5个模拟输入和4个0-5v模拟输出。我一直在努力搞清楚我将要使用的J1939消息结构。这些模块将是由主ECU控制的从设备。由于这些模块中的多个模块可能位于同一网络上,因此我为每个模块添加了一个CAN地址开关,以便用户可以选择每个模块的CAN ID 1-255。计划是让每个模块在一条CAN消息中广播所有数字输入的状态。如果我选择0xFF00作为PGN ID,然后使用8个字节以位形式表示该特定模块的输入状态,那么主机如何知道消息来自哪个模块?模块地址是CANbus消息吗?

我一直在看arduino CANBUS示例,看起来您可以根据PGN进行过滤,但我没有看到任何根据源地址或目标地址进行过滤的内容。

有人可以就我如何做到这一点提供一些说明吗?

1 个答案:

答案 0 :(得分:0)

是的,正如doynax所提到的,8个最低有效位始终保留用于节点的源地址。如果您要将此网络放置在车辆的CAN总线上,请务必注意,如果您未在车辆总线上申请源地址,则每当您尝试将外国信息放在车辆上时,您可能会从主ECU获得NAK。总线。

为了防止出现此问题,您可能必须为网络上的每个自定义节点执行声明地址过程。这是您发送PGN 60928作为广播(目标地址0xFF)的地方,网络上的每个节点都应该使用自己的源地址响应该PGN(假设所有节点都符合此规范,而不是所有节点都遵守此规范)。如果在回复中看到公共源地址,那么您就知道它不可用。

有关从第39页开始的详细信息,请参阅以下幻灯片 J1939