CAN/RS232 扩展板

CAN/RS232 扩展板将一个 CAN-FD 收发器与一个 RS-232 收发器组合在一起,使 OpenMV Cam 能够通过单块扩展板与车辆、控制器和旧式串行设备通信,并具备宽范围输入供电和反向电压保护。

CAN/RS232 扩展板

完整的数据手册、照片和订购信息请参见 CAN/RS232 扩展板产品页

亮点

  • 8 Mb/s CAN-FD,带板载终端电阻和滤波

  • 1 Mb/s RS-232,集成滤波

  • 6-36 V 输入,可承受反向电压

  • 0-5 V ADC 输入,带 ±36 V 过压保护

  • 0-5 V 数字 I/O,用于摄像头同步触发,带短路保护

引脚分布

CAN/RS232 扩展板引脚分布

引脚参考

引脚

功能

P1

CAN TX → 收发器输入(默认)

P2

CAN TX → 收发器输入(备选)

P3

CAN RX ← 收发器输出

P4

RS-232 TX → 驱动线路输出

P5

RS-232 RX ← 接收线路输入

P6

电平转换后的 AIN 回读(P6 上为 0–3.3 V)

P10

SYN —— 接线端子上的开漏数字 I/O

PWR 输入

接线端子上的 6–36 V 宽范围输入(可承受反向电压)

AIN 输入

接线端子上的模拟输入

VIN 输出

来自板载稳压器的 5.4 V,最高 600 mA

3.3V 电源轨

为扩展板的板载电子元件供电

GND 电源轨

公共地

备注

AIN 具备最高 ±36 V 的过压保护,默认为 0–5 V 电压输入,在 P6 上缩放降至 0–3.3 V。短接扩展板正面的 4–20 mA 模式分流器,即可将 AIN 切换为 4–20 mA 电流环输入。

备注

SYN 是一条开漏数字线,在摄像头一侧上拉至 3.3 V,在 SYN 端子一侧上拉至 5 V。默认情况下它是输入 —— 扩展板会将 SYN 上的 0–5 V 电平转换降至 P10 上的 0–3.3 V。更改板载焊接跳线即可将 P10 翻转为输出,把 P10 上的 0–3.3 V 电平转换升至 SYN 上的 0–5 V。

备注

P1、P2、P3、P4、P5、P6 和 P10 中的每一个都可以回收用于其他用途。P1、P3、P4、P5、P6 和 P10 默认已连接 —— P1、P3、P6 和 P10 通过背面焊接跳线,P4 和 P5 通过正面焊接跳线。断开你想释放的任一引脚上的跳线即可。P2 默认断开:短接其背面跳线即可改为将 CAN TX 引至 P2(并断开 P1 的背面跳线以释放 P1)。

备注

P1/P2 的拆分是为了让扩展板能跨处理器家族工作。OpenMV Cam IMXRT 板(RT1062)可以将 CAN 引至 P1,因此使用默认映射。STM32 板的 CAN 外设无法连到 P1,因此需短接 P2 的背面跳线(并断开 P1 的跳线)以使用备选方案。

备注

CAN 总线终端电阻默认已连接 —— 在 CANH 与 CANL 之间串联拆分为两个 60 Ω 的半段,并在中点处经一个电容接地(即 120 Ω 交流耦合拆分终端)。断开这两个焊盘即可分别独立断开各半段。

用法

备注

下面的 CAN(0)UART(1) 外设编号遵循 IMXRT 映射(默认 P1 接线)。在其他处理器上,连接到这些引脚的总线可能不同 —— 请查阅你所用板子的参考资料。

收发 CAN-FD 帧 —— TX 在 P1(默认)或 P2(备选),RX 在 P3::

from machine import CAN

can = CAN(2, 1_000_000)
can.set_filters(None)
can.send(0x123, b"\xDE\xAD\xBE\xEF")
print(can.recv())

通过 P4 (TX) / P5 (RX) 在 RS-232 上回显字节::

from machine import UART

uart = UART(1, baudrate=115200)
uart.write("hello\n")
print(uart.read())

通过电平转换后的 P6 引脚读取 AIN 接线端子输入::

from machine import ADC
import time

ain = ADC("P6")

while True:
    v = ain.read_u16() * 3.3 / 65535
    print("AIN:", v * (5.0 / 3.3), "V")
    time.sleep_ms(100)

对 SYN 线上的下降沿做出响应 —— 例如,用另一台将 SYN 拉低的设备来同步摄像头::

from machine import Pin

def on_sync(pin):
    print("SYN falling edge")

syn = Pin("P10", Pin.IN)
syn.irq(on_sync, Pin.IRQ_FALLING)