有人能解释一下如何使用CANBUS协议吗



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

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

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

谢谢,Zhuhan

好的,我会给你一些提示,但主题很宽。是的,CANBus是一种广播通信,其中发送消息的人并不重要,而是消息本身。比方说是以信息为中心的交流。因此,通常不仅仅是一条消息,重要的是整个"CAN数据库"。在这样的系统(例如汽车)中,并不严格需要知道谁在发送空气温度,但重要的是要知道空气温度在具有特定编码和循环时间的特定帧Id上。

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

共享同一总线的每个CAN设备都可以在没有仲裁的情况下进行发送。仲裁嵌入在硬件层。在CAN中,这两个位被称为显性和隐性。"0"位为显性,"1"位为隐性。这意味着,如果两个不同的设备同时开始"通话",且第一位都为0,则两个设备都会继续发送,并且在总线上您会看到"0"。一旦一个设备想要发送1(隐性位),而另一个设备正在发送"0"(显性位),则整个总线保持在0。"1"的发送者可以检测到它,并停止发送离开巴士前往获胜者。由于每个CAN帧在前导码之后都以ID开头,因此最低ID(内部有很多0)将在碰撞中获胜,并保持总线的使用。

因此,优先级是由ID给定的,信息与ID绑定,因此数据中存在某种优先级。

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

在几乎所有的CAN控制器中,都可以设置接收滤波器和屏蔽。当你设计硬件(或更好的固件)时,初学者的第一个常见错误是打开接收过滤器和屏蔽。这在重载总线中可能导致接收微的接收(回调或中断)溢出。

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

需要考虑的其他事项是总线断开或总线过载事件或其他可能发生的错误时的行为(查找可能的can错误列表)。我的意思是,通常情况下,如果出现总线错误,应该有可能自动重新启动控制器。

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

最新更新