CAN/RS232 Shield

El CAN/RS232 Shield combina un transceptor CAN-FD con un transceptor RS-232 para que la OpenMV Cam pueda comunicarse con vehículos, controladores y equipos serie antiguos desde un único shield, con alimentación de entrada amplia y protección contra inversión de voltaje.

CAN/RS232 Shield

Para ver la hoja de datos completa, fotos e información de compra, consulta la página de producto del CAN/RS232 Shield.

Aspectos destacados

  • CAN-FD a 8 Mb/s con terminación y filtrado en placa

  • RS-232 a 1 Mb/s con filtrado integrado

  • Entrada de 6-36 V, tolerante a la inversión de voltaje

  • Entrada ADC de 0-5 V con protección contra sobretensión de ±36 V

  • E/S digital de 0-5 V para disparadores de sincronización de cámara, con protección contra cortocircuitos

Distribución de pines

Distribución de pines del CAN/RS232 Shield

Referencia de pines

Pin

Función

P1

CAN TX → entrada del transceptor (predeterminado)

P2

CAN TX → entrada del transceptor (alternativo)

P3

CAN RX ← salida del transceptor

P4

RS-232 TX → controla la salida de línea

P5

RS-232 RX ← recibe la entrada de línea

P6

Lectura de AIN reducida de nivel (0–3,3 V en P6)

P10

SYN — E/S digital de drenaje abierto en el bloque de terminales

PWR in

Entrada amplia de 6–36 V en el bloque de terminales (tolerante a la inversión de voltaje)

AIN in

Entrada analógica en el bloque de terminales

VIN out

5,4 V hasta 600 mA desde el regulador de la placa

Riel de 3,3 V

Alimenta la electrónica de la placa del shield

Riel GND

Tierra común

Nota

AIN está protegida contra sobretensión hasta ±36 V y por defecto es una entrada de voltaje de 0–5 V, reducida a 0–3,3 V en P6. Puentea el shunt de modo 4–20 mA en la parte frontal del shield para cambiar AIN a una entrada de bucle de corriente de 4–20 mA.

Nota

SYN es una línea digital de drenaje abierto, conectada a una resistencia pull-up de 3,3 V en el lado de la cámara y de 5 V en el lado del terminal SYN. Por defecto es una entrada — el shield reduce el nivel de 0–5 V en SYN a 0–3,3 V en P10. Cambia el puente de soldadura de la placa para convertir P10 en una salida, elevando el nivel de 0–3,3 V en P10 a 0–5 V en SYN.

Nota

Cada uno de los pines P1, P2, P3, P4, P5, P6 y P10 puede recuperarse para otros usos. P1, P3, P4, P5, P6 y P10 están conectados por defecto — P1, P3, P6 y P10 a través de puentes de soldadura traseros, y P4 y P5 a través de puentes de soldadura frontales. Abre el puente de cualquier pin que quieras liberar. P2 está desconectado por defecto: puentea su puente trasero para enrutar CAN TX a P2 en su lugar (y abre el puente trasero de P1 para liberar P1).

Nota

La división P1/P2 existe para que el shield funcione en distintas familias de procesadores. Las placas OpenMV Cam IMXRT (RT1062) pueden enrutar CAN a P1, así que usan el mapeo predeterminado. Las placas STM32 no pueden alcanzar P1 con su periférico CAN, así que puentea el puente trasero de P2 (y abre el de P1) para usar la alternativa.

Nota

La terminación del bus CAN está conectada por defecto — dividida en dos mitades de 60 Ω en serie entre CANH y CANL con un condensador a tierra en el punto medio (una terminación dividida de 120 Ω acoplada en AC). Abre las dos almohadillas de soldadura para desconectar cada mitad de forma independiente.

Uso

Nota

Los números de periférico CAN(0) y UART(1) que aparecen a continuación siguen el mapeo IMXRT (cableado predeterminado de P1). En otro procesador, el bus conectado a estos pines puede ser diferente — consulta la referencia de tu placa.

Envía y recibe fotogramas CAN-FD — TX en P1 (predeterminado) o P2 (alternativo), RX en 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())

Devuelve los bytes recibidos por RS-232 en P4 (TX) / P5 (RX):

from machine import UART

uart = UART(1, baudrate=115200)
uart.write("hello\n")
print(uart.read())

Lee la entrada del bloque de terminales AIN a través del pin P6 con nivel reducido:

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)

Reacciona a un flanco descendente en la línea SYN — por ejemplo, para sincronizar la cámara con otro dispositivo que tira de SYN a bajo:

from machine import Pin

def on_sync(pin):
    print("SYN falling edge")

syn = Pin("P10", Pin.IN)
syn.irq(on_sync, Pin.IRQ_FALLING)