CAN/RS232 扩展板¶
CAN/RS232 扩展板将一个 CAN-FD 收发器与一个 RS-232 收发器组合在一起,使 OpenMV Cam 能够通过单块扩展板与车辆、控制器和旧式串行设备通信,并具备宽范围输入供电和反向电压保护。
完整的数据手册、照片和订购信息请参见 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,用于摄像头同步触发,带短路保护
引脚分布¶
引脚参考¶
引脚 |
功能 |
|---|---|
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)