Sommario:

Un semplice tutorial per CANBUS: 8 passaggi
Un semplice tutorial per CANBUS: 8 passaggi

Video: Un semplice tutorial per CANBUS: 8 passaggi

Video: Un semplice tutorial per CANBUS: 8 passaggi
Video: CAN Bus: Serial Communication - How It Works? 2024, Luglio
Anonim
Un semplice tutorial per CANBUS
Un semplice tutorial per CANBUS

Ho studiato CAN per tre settimane e ora ho completato alcune applicazioni per convalidare i miei risultati di apprendimento. In questo tutorial imparerai come utilizzare Arduino per implementare la comunicazione CANBUS. Se avete suggerimenti, benvenuti a lasciare un messaggio.

Forniture:

Hardware:

  • Maduino Zero CANBUS
  • Modulo temperatura e umidità DHT11
  • 1.3" I2C OLED 128x64- Blu
  • Cavo da DB9 a DB9 (da femmina a femmina)
  • Linea Dupont

Software:

Arduino IDE

Passaggio 1: cos'è CANBUS?

Cos'è CANBUS?
Cos'è CANBUS?
Cos'è CANBUS?
Cos'è CANBUS?

Informazioni su CAN

CAN (Controller Area Network) è una rete di comunicazione seriale in grado di realizzare un controllo distribuito in tempo reale. È stato sviluppato per l'industria automobilistica per sostituire il complesso cablaggio con un bus a due fili.

Il protocollo CAN definisce il Data Link Layer e parte del Physical Layer nel modello OSI.

Il protocollo CAN è standardizzato ISO con ISO11898 e ISO11519. ISO11898 è lo standard di comunicazione CAN ad alta velocità con una velocità di comunicazione di 125 kbps-1 Mbps. ISO11519 è lo standard di comunicazione CAN a bassa velocità con una velocità di comunicazione inferiore a 125 kbps.

Qui ci concentriamo sul CAN ad alta velocità.

ISO-11898 descrive come le informazioni vengono passate tra i dispositivi su una rete ed è conforme al modello Open Systems Interconnection (OSI) che è definito in termini di livelli. La comunicazione effettiva tra i dispositivi collegati dal supporto fisico è definita dal livello fisico del modello

  • Ogni unità CAN collegata al bus può essere chiamata nodo. Tutte le unità CAN sono collegate a un bus terminato a ciascuna estremità con resistori da 120 per formare una rete. Il bus è composto dalle linee CAN_H e CAN_L. Il controller CAN determina il livello del bus in base alla differenza del livello di potenza su entrambi i fili. I livelli degli autobus sono divisi in livelli dominanti e recessivi, che devono essere uno di questi. Il mittente invia il messaggio al destinatario apportando una modifica a livello di bus. Quando sul bus viene eseguita la riga logica "e", il livello dominante è "0" e il livello recessivo è "1".
  • Nello stato dominante, la tensione di CAN_H è di circa 3,5 V e la tensione di CAN_L è di circa 1,5 V. Nello stato recessivo, la tensione di entrambe le linee è di circa 2,5V.
  • Il segnale è differenziale, ecco perché CAN deriva la sua robusta immunità al rumore e tolleranza ai guasti. Il segnale differenziale bilanciato riduce l'accoppiamento del rumore e consente velocità di segnalazione elevate su cavo a doppino intrecciato. La corrente in ciascuna linea di segnale è uguale ma nella direzione opposta e si traduce in un effetto di cancellazione del campo fondamentale per basse emissioni di rumore. L'uso di ricevitori differenziali bilanciati e cavi a doppino intrecciato migliora la reiezione di modo comune e l'elevata immunità ai disturbi di un bus CAN.

CAN ricetrasmettitore

Il CAN Transceiver è responsabile della conversione tra il livello logico e il segnale fisico. Converti un segnale logico in un livello differenziale o un segnale fisico in un livello logico.

CAN Controller

Il controller CAN è il componente principale di CAN, che realizza tutte le funzioni del livello di collegamento dati nel protocollo CAN e può risolvere automaticamente il protocollo CAN.

MCU

L'MCU è responsabile del controllo del circuito funzionale e del controller CAN. Ad esempio, i parametri del controller CAN vengono inizializzati all'avvio del nodo, il frame CAN viene letto e inviato tramite il controller CAN, ecc.

Passaggio 2: informazioni sulle comunicazioni CAN

Quando il bus è inattivo, tutti i nodi possono iniziare a inviare messaggi (controllo multi-master). Il nodo che per primo accede al bus ottiene il diritto di inviare (modalità CSMA/CA). Quando più nodi iniziano a inviare contemporaneamente, il nodo che invia il messaggio ID ad alta priorità ottiene il diritto di inviare.

Nel protocollo CAN, tutti i messaggi vengono inviati in un formato fisso. Quando il bus è inattivo, tutte le unità collegate al bus possono iniziare a inviare nuovi messaggi. Quando più di due celle iniziano a inviare messaggi contemporaneamente, la priorità viene determinata in base all'identificatore. L'ID non rappresenta l'indirizzo di destinazione dell'invio, ma piuttosto la priorità del messaggio che accede al bus. Quando più di due celle iniziano a inviare messaggi contemporaneamente, ogni bit dell'ID senza interessi viene arbitrato uno per uno. L'unità che vince l'arbitrato può continuare a inviare messaggi e l'unità che perde l'arbitrato interrompe immediatamente l'invio e riceve il lavoro.

Il bus CAN è un tipo di bus broadcast. Ciò significa che tutti i nodi possono "sentire" tutte le trasmissioni. tutti i nodi raccolgono invariabilmente tutto il traffico. L'hardware CAN fornisce un filtraggio locale in modo che ogni nodo possa reagire solo ai messaggi interessanti.

Passaggio 3: cornici

cornici
cornici

I dispositivi CAN inviano dati attraverso la rete CAN in pacchetti chiamati frame. CAN ha quattro tipi di frame:

  • Data frame: un frame contenente i dati del nodo per la trasmissione
  • Frame remoto: un frame che richiede la trasmissione di un identificatore specifico
  • Frame di errore: un frame trasmesso da qualsiasi nodo che rileva un errore
  • Frame di sovraccarico: un frame per iniettare un ritardo tra i dati o il frame remoto

Cornice dati

Esistono due tipi di frame di dati, standard ed estesi.

Il significato dei campi di bit della figura è:

  • SOF: il singolo bit dominante di inizio del frame (SOF) segna l'inizio del messaggio e viene utilizzato per sincronizzare i nodi su un bus dopo essere stati inattivi.
  • Identificatore: l'identificatore standard CAN a 11 bit stabilisce la priorità del messaggio. Più basso è il valore binario, maggiore è la sua priorità.
  • RTR–Il singolo bit di richiesta di trasmissione remota (RTR)
  • IDE: un bit di estensione dell'identificatore singolo dominante (IDE) indica che viene trasmesso un identificatore CAN standard senza estensione.
  • R0–Bit riservato (per l'eventuale utilizzo da futuri emendamenti alla norma).
  • DLC: il codice della lunghezza dei dati a 4 bit (DLC) contiene il numero di byte di dati trasmessi.
  • Dati: possono essere trasmessi fino a 64 bit di dati dell'applicazione.
  • CRC: il controllo di ridondanza ciclica (CRC) a 16 bit (15 bit più delimitatore) contiene il checksum (numero di bit trasmessi) dei dati dell'applicazione precedente per il rilevamento degli errori.
  • ACK–ACK è di 2 bit, uno è il bit di riconoscimento e il secondo è un delimitatore.
  • EOF: questo campo di fine frame (EOF), a 7 bit, segna la fine di un frame CAN (messaggio) e disabilita il bitstuffing, indicando un errore di riempimento quando dominante. Quando 5 bit dello stesso livello logico si verificano in successione durante il normale funzionamento, nei dati viene inserito un bit del livello logico opposto.
  • IFS: questo spazio interframe a 7 bit (IFS) contiene il tempo necessario al controller per spostare un frame correttamente ricevuto nella posizione corretta in un'area del buffer dei messaggi.

Arbitrato

Nello stato di inattività del bus, l'unità che inizia a inviare il messaggio per prima ottiene l'invio corretto. Quando più unità iniziano a inviare contemporaneamente, ciascuna unità di invio inizia dal primo bit del segmento di arbitrato. L'unità con il maggior numero di livelli dominanti di uscita continua può continuare a inviare.

Passaggio 4: velocità e distanza

Velocità e distanza
Velocità e distanza

Il bus CAN è un bus che collega più unità contemporaneamente. In teoria non c'è limite al numero totale di unità collegabili. In pratica, però, il numero di unità collegabili è limitato dalla temporizzazione sul bus e dal carico elettrico. Ridurre la velocità di comunicazione, aumentare il numero di unità collegabili e aumentare la velocità di comunicazione, diminuisce il numero di unità collegabili.

La distanza di comunicazione è inversamente proporzionale alla velocità di comunicazione e maggiore è la distanza di comunicazione, minore è la velocità di comunicazione. La distanza maggiore può essere di 1 km o più, ma la velocità è inferiore a 40 km/s.

Passaggio 5: hardware

Hardware
Hardware

Il modulo Maduino Zero CAN-BUS è uno strumento sviluppato da Makerfabs per la comunicazione CANbus, è basato su Arduino, con il controller CAN e il ricetrasmettitore CAN, per creare una porta CAN-bus pronta all'uso.

  • MCP2515 è un controller CAN autonomo che implementa le specifiche CAN. È in grado di trasmettere e ricevere dati sia standard che estesi e frame remoti.
  • Il MAX3051 si interfaccia tra il controller del protocollo CAN e i fili fisici delle linee bus in una controller area network (CAN). Il MAX3051 fornisce capacità di trasmissione differenziale al bus e capacità di ricezione differenziale al controller CAN.

Passaggio 6: connessione

Connessione
Connessione

Collegare il modulo DHT11 al modulo CAN-BUS Maduino Zero con fili da utilizzare come strumento per supportare la comunicazione CAN. Allo stesso modo, collegare il display al modulo per ricevere i dati e visualizzarli.

La connessione tra Maduino Zero CANBUS e DHT11:

Maduino Zero CANBUS -- DHT11

3v3 ------ VCC GND ------ GND D10 ------ DATI

La connessione tra Maduino Zero CANBUS e OLED:

Maduino Zero CANBUS -- OLED

3v3 ------ VCC GND ------ GND SCL ------ SCL SDA ------ SDA

Utilizzare un cavo DB9 per collegare i due moduli CANBUS Maduino Zero.

Passaggio 7: codice

Il MAX3051 completa la conversione dei livelli differenziali in segnali logici. L'MCP2515 completa la funzione CAN come la codifica e la decodifica dei dati. L'MCU deve solo inizializzare il controller e inviare e ricevere dati.

  • Github:
  • Dopo aver installato Arduino, non esiste alcun pacchetto per supportare la scheda (Arduino zero) necessaria per l'installazione.
  • Seleziona strumenti -> Scheda -> Gestione schede, cerca "Arduino zero" e installa "Schede Arduino SAMD".
  • Seleziona Strumenti -> Scheda -> Arduino Zero (porta USB nativa), seleziona Strumenti -> Porta -> com…
  • Dopo aver ottenuto il programma da GitHub, è necessario assicurarsi che tutti i file si trovino nella directory del progetto, che contiene file di libreria che supportano CANBUS.
  • Installa la libreria di sensori DHT di Adafruit, che viene utilizzata per guidare il DHT11 per ottenere temperatura e umidità.
  • Utilizzare indirizzi diversi per inviare separatamente temperatura e umidità nel codice Test_DHT11.ino.

CAN.sendMsgBuf(0x10, 0, stmp1.length(), stmp_send1);

ritardo (500); CAN.sendMsgBuf(0x11, 0, stmp2.length(), stmp_send2); ritardo (500);

"0x10" è l'ID del messaggio, "0" è il frame standard medio, "stmp1.length()" è la lunghezza del messaggio, "stmp_send1" è il dato inviato.

  • Nel codice Test_OLED.ino, tutti i messaggi sul CANBUS vengono ricevuti su richiesta e le informazioni richieste vengono visualizzate sull'OLED.
  • Carica il programma Maduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.ino sul modulo collegato al sensore e Carica il programma Maduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.ino su un altro modulo collegato all'OLED.

Passaggio 8: mostra

Spettacolo
Spettacolo
Spettacolo
Spettacolo

Accendere i due moduli, temperatura e umidità verranno visualizzate sul display.

Consigliato: