Sommario:
- Forniture
- Passaggio 1: il circuito del ricetrasmettitore
- Passaggio 2: lettura e scrittura sul bus CAN
- Passaggio 3: collegamento dei nodi
- Passaggio 4: crea il PCB
- Passaggio 5: espansione del tabellone
- Passaggio 6: ordina i tuoi PCB da JLCPCB
- Passaggio 7: ottieni le tue schede
Video: Interfaccia CAN STM32: 7 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
Il bus Controller Area Network, o bus CAN, è un protocollo di comunicazione molto efficace grazie alle sue capacità ad alta velocità, affidabilità a lungo raggio e immunità ai disturbi. Per questi motivi, la comunicazione CAN è diventata lo standard nelle tecnologie automobilistiche e negli ambienti ad alto rumore. I dispositivi sul bus CAN sono chiamati nodi. Tutti i nodi del bus CAN sono collegati in parallelo, il che significa che ogni nodo è connesso a tutti gli altri nodi della rete. Un singolo bus CAN può avere fino a 115 nodi contemporaneamente, a seconda della velocità di trasmissione dei messaggi, ma per la maggior parte delle applicazioni si consiglia di avere fino a 32 dispositivi. Si raccomanda inoltre di mantenere la lunghezza tra il primo e l'ultimo nodo a meno di 40 metri di distanza.
Questo tutorial passo passo ti mostrerà come configurare un nodo CAN utilizzando il microcontrollore STM32, incluso il circuito e il semplice codice C per leggere e scrivere sul bus CAN
Forniture
Per ogni nodo CAN:
- 1x breakout board STM32 (Nucleo, Blue Pill, altri)
- 1x MCP2551 CAN ricetrasmettitore IC
- 1x condensatore da 0,1 µF
- 1x resistenza da 120Ω
- 1x resistenza da 1kΩ
- 1+ ingresso leggibile (pulsante, interruttore, potenziometro, ecc.) o uscita (LED, MOSFET, ecc.)
- 1x connettore Dsub9
Passaggio 1: il circuito del ricetrasmettitore
Per comunicare con il bus CAN, utilizzeremo l'IC ricetrasmettitore CAN MCP2551. L'IC funge da coppia trasmettitore/ricevitore intermedio per collegare l'STM32 al bus CAN. Il circuito per configurare questo circuito integrato è abbastanza semplice, ma ci sono alcune cose da notare:
-
CAN_RX (pin 4) e CAN_TX (pin 1) sul chip MCP2551 possono andare solo a determinati pin sull'STM32.
- Su STM32F1 Nucleo, collegare la linea RX al pin PB8 e la linea TX al pin PB9.
- Sulla pillola blu STM32F1, collegare RX al pin PA11 e TX al pin PA12.
- Si noti che queste assegnazioni dei pin hanno alternative. Fare riferimento ai manuali del microcontrollore per determinare quali pin sono in grado di supportare CAN_RD e CAN_TD
- Se si utilizza un Arduino o una scheda senza un comunicatore CAN integrato, sarà necessario il chip IC MCP2515 per convertire altri protocolli di messaggi in CAN.
- Il pin CANL deve essere collegato agli altri pin CANL degli altri nodi bus. Lo stesso vale per i pin CANH.
- La resistenza da 120Ω sui pin CANH e CANL è necessaria solo se il nodo è un nodo terminale. Ciò significa che si trova alla fine del cablaggio di collegamento parallelo. In altre parole, il bus CAN dovrebbe avere solo due resistori da 120Ω e dovrebbero essere il più distanti possibile l'uno dall'altro.
- Infine, il resistore da 1kΩ su RS (pin 8) può essere sostituito con un resistore da 10kΩ per controllare il tempo di salita/discesa dei bit del messaggio CAN. Fare riferimento alla scheda tecnica del chip MCP2551 per maggiori dettagli.
Passaggio 2: lettura e scrittura sul bus CAN
Ora che il circuito del ricetrasmettitore è collegato all'STM32, possiamo iniziare a scrivere messaggi sul bus CAN. Questa guida istruttiva non approfondirà il codice STM32. Tuttavia, assicurati di controllare il nostro codice per gli esempi qui. L'utilizzo di STM32 come nodo CAN richiederà un file di intestazione CAN. Abbiamo scritto il nostro, che può essere trovato sul nostro github qui. Qui, daremo una breve panoramica del processo di lettura/scrittura.
Per leggere dal bus CAN, dobbiamo prima conoscere l'ID del messaggio CAN. Ogni messaggio dovrebbe avere un ID univoco, con ID inferiori con priorità più alta. Lo snippet di codice mostrato qui è in attesa di un messaggio CAN con ID 0x622. Nel nostro sistema, se il primo bit del 6° byte è alto, allora vogliamo impostare il pin A10 alto.
Quando scriviamo un messaggio CAN, dobbiamo ricordare che i messaggi CAN sono multi-byte. Ogni messaggio scritto deve avere un ID e una lunghezza. Nel secondo frammento di codice mostrato, scriviamo i dati su ciascun byte, quindi inviamo il messaggio (I parametri ID e lunghezza sono definiti in precedenza nel codice).
Passaggio 3: collegamento dei nodi
Quando si collegano più nodi CAN, prestare particolare attenzione alla lunghezza dei cavi. I due nodi più lontani possono trovarsi fino a 40 m di distanza l'uno dall'altro. I nodi intermedi che si collegano al bus dovrebbero trovarsi entro 50 cm dalle linee principali del bus.
Le connessioni CAN seguono uno standard industriale che prevede l'utilizzo di un connettore Dsub9 con la linea CANL sul pin 2 e la linea CANH sul pin7. L'opzione CANGND line può andare sul pin 3.
Passaggio 4: crea il PCB
Quando si instradano i segnali CAN su un PCB, ricordare che CAN è un segnale differenziale e, pertanto, è necessario seguire attentamente le linee guida di instradamento per CANH e CANL.
Passaggio 5: espansione del tabellone
Metti insieme altri nodi, aggiungi alcuni input/output e collega tutti i loro pin CANH e CANL. Si noti che ogni STM32 o altro microcontrollore richiede il proprio chip MCP2551; non possono essere condivisi.
Detto questo, prova a mantenere i tuoi PCB più piccoli di quello mostrato qui
Passaggio 6: ordina i tuoi PCB da JLCPCB
JLCPCB offre un servizio veloce e di alta qualità a prezzi molto ragionevoli. Ottieni 5 schede, di qualsiasi colore con tonnellate di personalizzazione, a soli $ 2! E se è il tuo primo ordine, ricevi 10 tavole allo stesso prezzo!
Basta caricare i tuoi gerber e ottenere un preventivo istantaneo! Invia il tuo ordine e le tue schede saranno esaminate per la produzione entro un'ora. Una volta pagato, puoi aspettarti le tue tavole di alta qualità in appena tre giorni!
Controllalo qui
Passaggio 7: ottieni le tue schede
Un enorme ringraziamento a JLCPCB per aver sponsorizzato questo progetto. JLCPCB (ShenzhenJLC Electronics Co., Ltd.), è la più grande impresa di prototipi di PCB in Cina e un produttore high-tech specializzato nella prototipazione rapida di PCB e nella produzione di PCB in piccoli lotti. Sono stati così gentili da fornire a UBC Solar i nostri nuovi PCB per la nostra auto da corsa a energia solare. Abbiamo fatto l'ordine venerdì e abbiamo ricevuto le tavole mercoledì!
Consigliato:
Come creare un driver LCD statico con interfaccia I²C: 12 passaggi
Come realizzare un driver LCD statico con interfaccia I²C: i display a cristalli liquidi (LCD) sono ampiamente utilizzati per applicazioni commerciali e industriali grazie alle loro buone proprietà visive, al basso costo e al basso consumo energetico. Queste proprietà rendono l'LCD la soluzione standard per i dispositivi a batteria
Interfaccia Arduino Spaceship: 3 passaggi
Arduino Spaceship Interface: Hi Instructable community, questa volta ho realizzato uno dei progetti più semplici da completare con un Arduino Uno: un circuito per astronave. È così chiamato perché è il tipo di programmazione e circuiti che sarebbero stati utilizzati nei primi programmi TV e film di fantascienza
Interfaccia Con LCD Tramite Wifi M4Inclusione: 5 Passaggi
Interfaccia Con LCD Wifi M4Inclusion: Questo tutorial ci permetterà di controllare un display LCD tramite Wi-Fi dal nostro smartphone e è valido sia se si utilizza l'Arduino e sia utilizzando la Drivemall Boarddi seguito il link per la realizzazione della DrivermallIl vantaggio di prefe
Iniziare con l'interfaccia del sensore I2C?? - Interfaccia il tuo MMA8451 utilizzando ESP32: 8 passaggi
Iniziare con l'interfaccia del sensore I2C?? - Interfaccia il tuo MMA8451 utilizzando ESP32: in questo tutorial imparerai tutto su come avviare, connettere e far funzionare il dispositivo I2C (accelerometro) con il controller (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Interfaccia ADXL335 Sensore su Raspberry Pi 4B in 4 passaggi: 4 passaggi
Interfaccia sensore ADXL335 su Raspberry Pi 4B in 4 passaggi: In questo Instructable andremo ad interfacciare un sensore ADXL335 (accelerometro) su Raspberry Pi 4 con Shunya O/S