CAN/RS232 Shield#
O CAN/RS232 Shield combina um transceptor CAN-FD com um transceptor RS-232, de modo que a OpenMV Cam pode se comunicar com veículos, controladores e equipamentos seriais legados a partir de um único shield, com ampla entrada de alimentação e proteção contra tensão reversa.
Para o datasheet completo, fotos e informações de compra, consulte a página do produto CAN/RS232 Shield.
Destaques#
CAN-FD de 8 Mb/s com terminação e filtragem embarcadas
RS-232 de 1 Mb/s com filtragem integrada
Entrada de 6-36 V, tolerante a tensão reversa
Entrada ADC de 0-5 V com proteção contra sobretensão de ±36 V
I/O digital de 0-5 V para gatilhos de sincronização de câmera, com proteção contra curto-circuito
Pinagem#
Referência de pinos#
Pino | Função |
|---|---|
P1 | CAN TX → entrada do transceptor (padrão) |
P2 | CAN TX → entrada do transceptor (alternativa) |
P3 | CAN RX ← saída do transceptor |
P4 | RS-232 TX → aciona a linha de saída |
P5 | RS-232 RX ← recebe a linha de entrada |
P6 | Releitura de AIN com deslocamento de nível (0–3,3 V no P6) |
P10 | SYN — I/O digital open-drain no bloco de terminais |
PWR in | Ampla entrada de 6–36 V no bloco de terminais (tolerante a tensão reversa) |
AIN in | Entrada analógica no bloco de terminais |
VIN out | 5,4 V até 600 mA do regulador embarcado |
trilho de 3,3 V | Alimenta a eletrônica embarcada do shield |
trilho GND | Terra comum |
Nota
AIN tem proteção contra sobretensão de até ±36 V e, por padrão, é uma entrada de tensão de 0–5 V, reduzida para 0–3,3 V no P6. Faça a ponte do shunt de modo 4–20 mA na frente do shield para mudar o AIN para uma entrada de loop de corrente de 4–20 mA.
Nota
SYN é uma linha digital open-drain, com pull-up de 3,3 V no lado da câmera e de 5 V no lado do terminal SYN. Por padrão é uma entrada — o shield faz o deslocamento de nível de 0–5 V no SYN para 0–3,3 V no P10. Altere o jumper de solda embarcado para tornar o P10 uma saída, fazendo o deslocamento de nível de 0–3,3 V no P10 para 0–5 V no SYN.
Nota
Cada um dos pinos P1, P2, P3, P4, P5, P6 e P10 pode ser reaproveitado para outro uso. P1, P3, P4, P5, P6 e P10 estão conectados 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 frente. Abra o jumper de qualquer pino que você queira liberar. P2 vem desconectado por padrão: faça a ponte de seu jumper na parte traseira para rotear o CAN TX para o P2 (e abra o jumper traseiro do P1 para liberá-lo).
Nota
A divisão P1/P2 existe para que o shield funcione em diferentes famílias de processadores. As placas OpenMV Cam IMXRT (RT1062) podem rotear o CAN para o P1, então usam o mapeamento padrão. As placas STM32 não conseguem alcançar o P1 com seu periférico CAN, então faça a ponte do jumper traseiro do P2 (e abra o do P1) para usar a alternativa.
Nota
A terminação do barramento CAN está conectada por padrão — dividida em duas metades de 60 Ω em série entre CANH e CANL, com um capacitor para o terra no ponto médio (uma terminação dividida com acoplamento AC de 120 Ω). Abra os dois pads de solda para desconectar cada metade independentemente.
Uso#
Nota
Os números de periférico CAN(0) e UART(1) abaixo seguem o mapeamento IMXRT (cabeamento padrão do P1). Em outro processador, o barramento conectado a esses pinos pode ser diferente — consulte a referência da sua placa.
Envie e receba quadros CAN-FD — TX no P1 (padrão) ou P2 (alternativa), RX no 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())
Ecoe bytes via RS-232 no 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 deslocamento 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 borda de descida na linha SYN — por exemplo, para sincronizar a câmera com outro dispositivo puxando SYN para 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)