CAN/RS232 Shield

De CAN/RS232 Shield combineert een CAN-FD-transceiver met een RS-232-transceiver zodat de OpenMV Cam vanuit één shield kan communiceren met voertuigen, controllers en oudere seriële apparatuur, met brede-ingangsvoeding en bescherming tegen omgekeerde spanning.

CAN/RS232 Shield

Voor de volledige datasheet, foto’s en bestelinformatie zie de CAN/RS232 Shield productpagina.

Hoogtepunten

  • 8 Mb/s CAN-FD met afsluiting en filtering op de print

  • 1 Mb/s RS-232 met geïntegreerde filtering

  • 6-36 V-ingang, bestand tegen omgekeerde spanning

  • 0-5 V ADC-ingang met ±36 V overspanningsbeveiliging

  • 0-5 V digitale I/O voor camera-synctriggers, beveiligd tegen kortsluiting

Pinout

CAN/RS232 Shield Pinout

Pinreferentie

Pin

Functie

P1

CAN TX → transceiver in (standaard)

P2

CAN TX → transceiver in (alternatief)

P3

CAN RX ← transceiver uit

P4

RS-232 TX → stuurt de lijn uit

P5

RS-232 RX ← ontvangt de lijn in

P6

Level-shifted AIN-uitlezing (0–3,3 V op P6)

P10

SYN — open-drain digitale I/O op het klemmenblok

PWR in

6–36 V brede ingang op het klemmenblok (bestand tegen omgekeerde spanning)

AIN in

Analoge ingang op het klemmenblok

VIN out

5,4 V tot 600 mA van de regelaar op de print

3,3V-rail

Voedt de elektronica op de print van de shield

GND-rail

Gemeenschappelijke ground

Notitie

AIN is overspanningsbeveiligd tot ±36 V en is standaard ingesteld op een 0–5 V-spanningsingang, omlaag geschaald naar 0–3,3 V op P6. Overbrug de 4–20 mA-modusshunt aan de voorkant van de shield om AIN om te schakelen naar een 4–20 mA-stroomlusingang.

Notitie

SYN is een open-drain digitale lijn, opgetrokken naar 3,3 V aan de camerazijde en 5 V aan de SYN-klemzijde. Standaard is het een ingang — de shield shift het niveau van 0–5 V op SYN omlaag naar 0–3,3 V op P10. Wijzig de soldeerjumper op de print om P10 om te zetten naar een uitgang, waarbij 0–3,3 V op P10 omhoog wordt geschaald naar 0–5 V op SYN.

Notitie

Elk van P1, P2, P3, P4, P5, P6 en P10 kan worden teruggewonnen voor ander gebruik. P1, P3, P4, P5, P6 en P10 zijn standaard verbonden — P1, P3, P6 en P10 via soldeerjumpers aan de achterkant, P4 en P5 via soldeerjumpers aan de voorkant. Open de jumper op elke pin die je wilt vrijmaken. P2 is standaard losgekoppeld: overbrug de jumper aan de achterkant om CAN TX in plaats daarvan naar P2 te routeren (en open de achterkantjumper van P1 om P1 vrij te geven).

Notitie

De splitsing tussen P1/P2 bestaat zodat de shield werkt over verschillende processorfamilies. De OpenMV Cam IMXRT-boards (RT1062) kunnen CAN naar P1 routeren, dus zij gebruiken de standaardtoewijzing. STM32-boards kunnen P1 niet bereiken met hun CAN-randapparaat, dus overbrug de achterkantjumper van P2 (en open die van P1) om het alternatief te gebruiken.

Notitie

De CAN-busafsluiting is standaard verbonden — opgesplitst in twee helften van 60 Ω in serie tussen CANH en CANL met een condensator naar ground op het middelpunt (een 120 Ω AC-gekoppelde gesplitste afsluiting). Open de twee soldeerpads om elke helft afzonderlijk los te koppelen.

Gebruik

Notitie

De randapparaatnummers CAN(0) en UART(1) hieronder volgen de IMXRT-toewijzing (standaard P1-bedrading). Op een andere processor kan de bus die naar deze pins is bedraad anders zijn — raadpleeg de referentie van je board.

Verzend en ontvang CAN-FD-frames — TX op P1 (standaard) of P2 (alternatief), RX op 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())

Echo bytes via RS-232 op P4 (TX) / P5 (RX):

from machine import UART

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

Lees de AIN-klemmenblokingang uit via de level-shifted P6-pin:

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)

Reageer op een dalende flank op de SYN-lijn — bijvoorbeeld om de camera te synchroniseren met een ander apparaat dat SYN laag trekt:

from machine import Pin

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

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