2015-11-06 68 views
0

我正尝试使用微控制器板与使用CAN总线的外部设备进行通话。但现在,我不清楚CAN-BUS的机制,以及如何在我的硬件上使用它。有人可以解释如何使用CANBUS协议?

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

有人能告诉我还有什么我应该知道为了完成我的任务?

感谢, 朱汉

回答

2

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

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

共享相同总线的每个CAN设备都可以在没有仲裁的情况下发送。仲裁嵌入在硬件层中。在CAN中,这两位称为显性和隐性。 '0'位是占优势的,'1'位是隐性的。这意味着如果两个不同的设备在第一个位都为0的同时开始“交谈”,则两个设备都会继续发送,并在总线上看到“0”。一旦一个设备想要发送1(隐性位),而另一个设备发送'0'(显性),则整个公交车停留在0处。'1'的发送者可以检测到它,并停止发送给获胜者的公交车。由于每个CAN帧在前导码之后以ID开始,所以最低ID(内部有很多零)是在碰撞中获胜并且将保持总线使用的那个ID。

因此,优先级由ID给出,信息绑定到一个ID,所以在数据中有一种优先级。通常情况下,当你设计CAN应用程序时,你已经有一个数据库可以遵循,但是(就我而言),你必须从头开始设计一个完整的系统,你必须先执行这个分析并创建数据库。

几乎所有的CAN控制器都可以设置接收滤波器和掩码。当你设计硬件(或更好的固件)时,初学者的第一个常见错误就是让接收滤波器和掩模敞开。这在重载总线中可能导致接收微信号的接收(回叫或中断)超限。

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

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

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