CAN/RS232 Shield¶
CAN/RS232 Shield 將一個 CAN-FD 收發器與一個 RS-232 收發器結合,讓 OpenMV Cam 能以單一 shield 與車輛、控制器及傳統序列設備通訊,並具備寬範圍輸入電源與反向電壓保護。
完整的資料表、照片與訂購資訊請參閱 CAN/RS232 Shield 產品頁面。
重點特色¶
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 電源軌 |
為 shield 的板載電子元件供電 |
GND 電源軌 |
共用接地 |
備註
AIN 具備最高 ±36 V 的過電壓保護,預設為 0–5 V 電壓輸入,並降比例縮放為 P6 上的 0–3.3 V。橋接 shield 正面的 4–20 mA 模式分流器,即可將 AIN 切換為 4–20 mA 電流迴路輸入。
備註
SYN 是一條開汲極數位線路,在相機側上拉至 3.3 V,在 SYN 端子側上拉至 5 V。它預設為輸入——shield 會將 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 的分割設計是為了讓 shield 能跨處理器系列運作。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())
透過 RS-232 在 P4(TX)/ P5(RX)上回送位元組::
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)