CAN/RS232 Shield¶
Il CAN/RS232 Shield combina un ricetrasmettitore CAN-FD con un ricetrasmettitore RS-232, così la OpenMV Cam può comunicare con veicoli, controller e apparecchiature seriali legacy da un unico shield, con alimentazione ad ampio ingresso e protezione dall’inversione di tensione.
Per il datasheet completo, le foto e le informazioni d’ordine consulta la pagina prodotto CAN/RS232 Shield.
Punti salienti¶
CAN-FD a 8 Mb/s con terminazione e filtraggio a bordo
RS-232 a 1 Mb/s con filtraggio integrato
Ingresso da 6-36 V, tollerante all’inversione di tensione
Ingresso ADC da 0-5 V con protezione dalla sovratensione ±36 V
I/O digitale da 0-5 V per i trigger di sincronizzazione della camera, protetto dal cortocircuito
Pinout¶
Riferimento dei pin¶
Pin |
Funzione |
|---|---|
P1 |
CAN TX → ingresso ricetrasmettitore (predefinito) |
P2 |
CAN TX → ingresso ricetrasmettitore (alternativo) |
P3 |
CAN RX ← uscita ricetrasmettitore |
P4 |
RS-232 TX → pilota la linea in uscita |
P5 |
RS-232 RX ← riceve la linea in ingresso |
P6 |
Readback AIN con level-shifting (0–3.3 V su P6) |
P10 |
SYN — I/O digitale open-drain sulla morsettiera |
PWR in |
Ampio ingresso da 6–36 V sulla morsettiera (tollerante all’inversione di tensione) |
AIN in |
Ingresso analogico sulla morsettiera |
VIN out |
5.4 V fino a 600 mA dal regolatore a bordo |
linea 3.3V |
Alimenta l’elettronica a bordo dello shield |
linea GND |
Massa comune |
Nota
AIN è protetto dalla sovratensione fino a ±36 V e per impostazione predefinita è un ingresso in tensione da 0–5 V, scalato a 0–3.3 V su P6. Ponticella lo shunt per la modalità 4–20 mA sul fronte dello shield per commutare AIN a un ingresso in corrente con loop 4–20 mA.
Nota
SYN è una linea digitale open-drain, con pull-up a 3.3 V sul lato camera e a 5 V sul lato del morsetto SYN. Per impostazione predefinita è un ingresso — lo shield abbassa con level-shifting da 0–5 V su SYN a 0–3.3 V su P10. Cambia il jumper a saldare a bordo per trasformare P10 in un’uscita, alzando con level-shifting da 0–3.3 V su P10 a 0–5 V su SYN.
Nota
Ognuno tra P1, P2, P3, P4, P5, P6 e P10 può essere recuperato per altri usi. P1, P3, P4, P5, P6 e P10 sono collegati per impostazione predefinita — P1, P3, P6 e P10 tramite jumper a saldare sul retro, P4 e P5 tramite jumper a saldare sul fronte. Apri il jumper su qualunque pin tu voglia liberare. P2 è scollegato per impostazione predefinita: ponticella il suo jumper sul retro per instradare invece CAN TX su P2 (e apri il jumper sul retro di P1 per liberare P1).
Nota
La suddivisione P1/P2 esiste affinché lo shield funzioni con diverse famiglie di processori. Le schede OpenMV Cam IMXRT (RT1062) possono instradare CAN su P1, quindi usano la mappatura predefinita. Le schede STM32 non possono raggiungere P1 con la loro periferica CAN, quindi ponticella il jumper sul retro di P2 (e apri quello di P1) per usare l’alternativa.
Nota
La terminazione del bus CAN è collegata per impostazione predefinita — suddivisa in due metà da 60 Ω in serie tra CANH e CANL con un condensatore verso massa nel punto medio (una terminazione split a 120 Ω accoppiata in AC). Apri i due pad a saldare per scollegare ciascuna metà in modo indipendente.
Utilizzo¶
Nota
I numeri di periferica CAN(0) e UART(1) qui sotto seguono la mappatura IMXRT (cablaggio predefinito P1). Su un altro processore il bus collegato a questi pin potrebbe essere diverso — controlla il riferimento della tua scheda.
Invia e ricevi frame CAN-FD — TX su P1 (predefinito) o P2 (alternativo), RX su 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())
Riecheggia i byte su RS-232 su P4 (TX) / P5 (RX):
from machine import UART
uart = UART(1, baudrate=115200)
uart.write("hello\n")
print(uart.read())
Leggi l’ingresso della morsettiera AIN tramite il pin P6 con level-shifting:
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)
Reagisci a un fronte di discesa sulla linea SYN — per esempio, per sincronizzare la camera con un altro dispositivo che porta SYN basso:
from machine import Pin
def on_sync(pin):
print("SYN falling edge")
syn = Pin("P10", Pin.IN)
syn.irq(on_sync, Pin.IRQ_FALLING)