本文的目的是传输连接到线性电位器的模拟引脚的值。 数据将通过 CAN 总线从一个 Arduino 发送到另一个 Arduino,然后在连接到第二个 Arduino 的 LCD 上显示该值。如下图,
材料
接线图
CAN 总线终端
CAN 总线需要在总线的每一端都有 120 欧姆的终端电阻。 Seeed Studio 防护罩内置终端电阻器。 当你像我在这个例子中所做的那样,将两个 Seeed CAN 总线屏蔽连接在一起时,你将拥有一个正确端接的 CAN 总线。 如果您计划连接到已有终端的现有 CAN 总线,您可以禁用内置终端电阻。 要禁用终止,您可以切断走线 P1 或拆焊电阻器 R1。
连接到现有的 CAN 总线
如果您计划连接到现有的 CAN 总线(例如在汽车中),您需要移除/禁用屏蔽板上的终端电阻,如上所述。 车辆中的 CAN 总线已经具有终端电阻器。 添加带有终端电阻的新节点将导致错误并中断总线上的通信。
另一个重要步骤是连接 Arduino 板和车辆之间的公共接地。如果您在 OBD2 端口连接,则引脚 5 提供信号接地。如果您找不到信号接地线,则底盘接地就足够了。
CAN 总线消息
每条消息都由一个 id 和一些数据组成。十六进制的 id 从 0x000 开始到 0x7FF 或 十进制从0 到 2047。在大多数系统中,较低的 id 值被认为更重要。总线通过让较低的 id 赢得碰撞来处理碰撞。每条消息的数据可以介于 1 到 8 个字节之间。每个字节的值可以是 0 到 255 或十六进制 0x00 到 0xFF。当您发送 CAN 总线消息时,您将传输 id、字节数(这称为 DLC)和实际数据。接收方只会读取您所说的消息中应该包含的字节数。因此,如果您发送 4 个 DLC 但消息包含 8 个字节,则接收器将仅读取前 4 个字节。每条消息 8 个字节有点限制,但代价是总线的高可靠性。因此,有时您必须创造性地将数据填充到这些字节中。如果您发送的值小于 255,您可以只使用一个字节。更大的数字将需要使用多个字节。可以发送 Ascii 代码,但每条消息只能发送 8 个字符。无论您使用什么方法填充数据,也必须使用任何方法在接收器上取消填充数据。在这里的简单示例中,我进行了一些数学运算,将值的范围限制为 0-255。模拟引脚产生 0-1024 之间的值。我只是简单地将结果除以四,以得到可以在单个字节中发送的数据。
CAN 总线可以以多种不同的速度运行,最高可达 1 Mbit/s。典型的速率为 100 kbit/s、125 kbit/s 和 500 kbit/s。较慢的速率允许更长的总线。总线上的所有设备必须以相同的速度传输。
代码
发送端代码
接收端代码
详情参阅 - 亚图跨际