CAN/RS232 Shield¶
O CAN/RS232 Shield combina um transcetor CAN-FD com um transcetor RS-232, permitindo que a OpenMV Cam comunique com veículos, controladores e equipamentos série legados a partir de um único shield, com alimentação de tensão alargada e proteção contra inversão de polaridade.
Para datasheet completo, fotografias e encomendas consulte a página do produto CAN/RS232 Shield.
Destaques¶
CAN-FD a 8 Mb/s com terminação e filtragem integradas
RS-232 a 1 Mb/s com filtragem integrada
Entrada de 6–36 V, tolerante a inversão de polaridade
Entrada ADC de 0–5 V com proteção contra sobretensão de ±36 V
I/O digital de 0–5 V para sincronização de câmara, com proteção contra curto-circuito
Pinagem¶
Referência de pinos¶
Pino |
Função |
|---|---|
P1 |
CAN TX → entrada do transcetor (predefinição) |
P2 |
CAN TX → entrada do transcetor (alternativo) |
P3 |
CAN RX ← saída do transcetor |
P4 |
RS-232 TX → aciona a linha de saída |
P5 |
RS-232 RX ← recebe a linha de entrada |
P6 |
Leitura AIN com conversão de nível (0–3,3 V em P6) |
P10 |
SYN — I/O digital open-drain no bloco de terminais |
PWR in |
Entrada alargada de 6–36 V no bloco de terminais (tolerante a inversão de polaridade) |
AIN in |
Entrada analógica no bloco de terminais |
VIN out |
5,4 V até 600 mA a partir do regulador integrado |
Rail 3.3V |
Alimenta a eletrónica integrada do shield |
Rail GND |
Massa comum |
Nota
AIN está protegida contra sobretensão até ±36 V e está configurada por padrão como entrada de tensão de 0–5 V, escalonada para 0–3,3 V em P6. Feche o shunt do modo 4–20 mA na parte frontal do shield para mudar AIN para uma entrada de laço de corrente de 4–20 mA.
Nota
SYN é uma linha digital open-drain, com pull-up para 3,3 V no lado da câmara e 5 V no lado do terminal SYN. Por padrão é uma entrada — o shield converte o nível de 0–5 V em SYN para 0–3,3 V em P10. Altere o jumper de solda integrado para colocar P10 como saída, convertendo 0–3,3 V em P10 para 0–5 V em SYN.
Nota
Cada um dos pinos P1, P2, P3, P4, P5, P6 e P10 pode ser recuperado para uso independente. P1, P3, P4, P5, P6 e P10 estão ligados por padrão — P1, P3, P6 e P10 através de jumpers de solda na parte traseira, P4 e P5 através de jumpers de solda na parte frontal. Abra o jumper de qualquer pino que pretenda libertar. P2 está desligado por padrão: feche o seu jumper de solda traseiro para encaminhar CAN TX para P2 (e abra o jumper traseiro de P1 para libertar P1).
Nota
A divisão P1/P2 existe para que o shield funcione com diferentes famílias de processadores. As placas OpenMV Cam IMXRT (RT1062) podem encaminhar CAN para P1, pelo que utilizam o mapeamento padrão. As placas STM32 não conseguem alcançar P1 com o periférico CAN, pelo que deve fechar o jumper traseiro de P2 (e abrir o de P1) para usar a alternativa.
Nota
A terminação do barramento CAN está ligada por padrão — dividida em duas metades de 60 Ω em série entre CANH e CANL com um condensador para massa no ponto central (terminação dividida AC-coupled de 120 Ω). Abra os dois pads de solda para desligar cada metade independentemente.
Utilização¶
Nota
Os números de periférico CAN(0) e UART(1) abaixo seguem o mapeamento IMXRT (cablagem padrão P1). Noutro processador, o barramento cablado a estes pinos pode ser diferente — consulte a referência da sua placa.
Envie e receba tramas CAN-FD — TX em P1 (predefinição) ou P2 (alternativo), RX em 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())
Reencaminhe bytes via RS-232 em P4 (TX) / P5 (RX):
from machine import UART
uart = UART(1, baudrate=115200)
uart.write("hello\n")
print(uart.read())
Leia a entrada do bloco de terminais AIN através do pino P6 com conversão de nível:
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)
Reaja a uma transição descendente na linha SYN — por exemplo, para sincronizar a câmara com outro dispositivo que coloque SYN em nível baixo:
from machine import Pin
def on_sync(pin):
print("SYN falling edge")
syn = Pin("P10", Pin.IN)
syn.irq(on_sync, Pin.IRQ_FALLING)