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)