本文的目的是传输连接到线性电位器的模拟引脚的值。 数据将通过 CAN 总线从一个 Arduino 发送到另一个 Arduino,然后在连接到第二个 Arduino 的 LCD 上显示该值。如下图,
https://embed.notionlytics.com/wt/ZXlKd1lXZGxTV1FpT2lJellUTXlPVFF4WW1VME5qVTBNV1E1T1RNMU1XSXhObVF5Tm1VNVpXRXpaU0lzSW5kdmNtdHpjR0ZqWlZSeVlXTnJaWEpKWkNJNklsZHNTR2hsVEZSUFdXeHpaVmRhUW1ZNU1YQmxJbjA9
CAN 总线需要在总线的每一端都有 120 欧姆的终端电阻。 Seeed Studio 防护罩内置终端电阻器。 当你像我在这个例子中所做的那样,将两个 Seeed CAN 总线屏蔽连接在一起时,你将拥有一个正确端接的 CAN 总线。 如果您计划连接到已有终端的现有 CAN 总线,您可以禁用内置终端电阻。 要禁用终止,您可以切断走线 P1 或拆焊电阻器 R1。
如果您计划连接到现有的 CAN 总线(例如在汽车中),您需要移除/禁用屏蔽板上的终端电阻,如上所述。 车辆中的 CAN 总线已经具有终端电阻器。 添加带有终端电阻的新节点将导致错误并中断总线上的通信。
另一个重要步骤是连接 Arduino 板和车辆之间的公共接地。如果您在 OBD2 端口连接,则引脚 5 提供信号接地。如果您找不到信号接地线,则底盘接地就足够了。
每条消息都由一个 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。较慢的速率允许更长的总线。总线上的所有设备必须以相同的速度传输。