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

0 can-bus

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

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

有人能告诉我为了完成我的任务我还应该注意什么吗?

谢谢,朱涵

小智 6

好的,我会尝试给您一些提示,但主题相当广泛。是的,CANBus 是一种广播通信,其中谁在发送消息并不重要,重要的是消息本身。可以说是以信息为中心的通信。所以通常不止一条消息,重要的是整个“CAN 数据库”。在这样的系统(例如汽车)中,不一定要知道谁在发送空气温度,但重要的是要知道空气温度在具有特定编码和循环时间的特定帧 ID 上。

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

每个共享同一总线的 CAN 设备都可以在没有仲裁的情况下发送。仲裁嵌入在硬件层中。在 CAN 中,这两个位称为显性和隐性。“0”位为显性,“1”位为隐性。这意味着,如果两个不同的设备同时开始“通话”,并且第一位都为 0,那么两者都会继续发送,并且在总线上您会看到“0”。一旦一个设备想要发送 1(一个隐性位)而另一个正在发送一个 '0'(显性),整个总线保持在 0。'1' 的发送者可以检测到它并停止发送离开总线给获胜者。由于每个 CAN 帧在前导码之后都以 ID 开头,因此最低 ID(里面有很多 o 零)是在冲突中获胜并保持总线使用的那个。

因此优先级由ID给定,信息绑定到一个ID,因此数据有一种优先级。

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

在几乎所有 CAN 控制器中,都可以设置接收过滤器和掩码。当您设计硬件(或更好的固件)时,初学者的第一个常见错误是让接收过滤器和面罩大开。这在重载总线中会导致接收微信号的接收(回调或中断)溢出。

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

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

还有更多,但可能你需要问一些更精确的问题。