有人可以解释如何使用CANBUS协议吗?

时间:2015-11-06 14:53:46

标签: can-bus

我正在尝试使用微控制器板与使用CAN-BUS的外部设备通信。但是现在,我并不清楚CAN-BUS的机制如何以及如何在我的硬件上使用它。

根据我的理解,这是一条总线,多个设备可以在其中广播其消息,优先级由每个节点的ID决定。

有人可以告诉我,为了完成任务我还应该注意什么?

谢谢, 朱汉

1 个答案:

答案 0 :(得分:3)

好的,我会尝试给你一些提示,但主题很广泛。 是的,CANBus是一种广播通信,其中发送消息但消息本身并不重要。让我们说一个以信息为中心的沟通。所以通常不只是一条消息,重要的是整个" CAN数据库"。在这样的系统中(例如汽车)并不是必须知道谁正在发送空气温度,但重要的是要知道空气温度在特定的帧ID上具有一定的编码和周期时间。

谁是信号的接收器甚至不重要,但您可以决定添加另一块需要气温的硬件,而无需重新配置通信。

每个共享同一总线的CAN设备都可以在没有仲裁的情况下发送。仲裁嵌入在硬件层中。在CAN中,这两个位称为Dominant和Recessive。 ' 0' 0比特是占主导地位的' 1'有点隐性。这意味着,如果两个不同的设备启动"通话"同时第一位都为0,同时保持发送和总线上你看到' 0'。一旦一个设备想要发送1(一个隐性位)而另一个设备发送一个' 0' (占优势的)整辆巴士停留在0号位。' 1'的发送者可以检测到并停止发送离开公交车的获胜者。由于每个CAN帧在前导码之后以ID开头,因此最低ID(内部有很多零)是在碰撞中赢得的ID并将保持总线的使用。

因此,优先级由ID给出,信息绑定到ID,因此数据中存在一种优先级。

通常,当你设计CAN应用程序时,你已经有了一个数据库要遵循,但是(在我的情况下)你必须从头开始设计一个完整的系统,你必须先执行这个分析并创建数据库。

在几乎所有CAN控制器中都可以设置接收滤波器和屏蔽。当您设计硬件(或更好的固件)时,初学者的第一个常见错误是将接收过滤器和屏蔽保持打开状态。在重负载总线中,这会导致接收微处理器的接收(回调或中断)超限。

有关控制器配置控制器时序的其他提示。 CAN位被划分为多个时间量(例如16)。在大多数控制器中,您需要选择如何以及何时采样该位以查看它是0还是1.通常您可以执行一次(单个采样点)或多次(但我从未见过超过3个采样点) )。

要考虑的其他事项是Bus Off或Bus Heavy事件或可能发生的其他错误(找到可能的CAN错误列表)时的行为。我的意思是通常应该有可能在总线错误的情况下自动重启控制器。

还有更多,但可能你需要提出更准确的问题。