Obsah:

Protokol CAN - Áno, môžeme !: 24 krokov
Protokol CAN - Áno, môžeme !: 24 krokov

Video: Protokol CAN - Áno, môžeme !: 24 krokov

Video: Protokol CAN - Áno, môžeme !: 24 krokov
Video: ПЛОВ. ЭТО ЛУЧШАЯ ЕДА ЧТО Я ЕЛ! СЕКРЕТ РАСКРЫТ УЗБЕКСКИЙ РЕЦЕПТ 2024, November
Anonim
Image
Image
Použité zdroje
Použité zdroje

Ďalší predmet, ktorý nedávno navrhli nasledovníci môjho kanála YouTube, bol protokol CAN (Controller Area Network), na ktorý sa dnes zameriame. Je dôležité vysvetliť, že CAN je simultánny sériový komunikačný protokol. To znamená, že synchronizácia medzi modulmi pripojenými k sieti sa vykonáva vo vzťahu k začiatku každej správy odoslanej na zbernicu. Začneme predstavením základných konceptov protokolu CAN a vykonáme jednoduchú montáž s dvoma ESP32.

V našom obvode môžu ESP fungovať ako Master aj Slave. Môžete vysielať viac mikrokontrolérov súčasne, pretože CAN rieši zrážku všetkého automaticky. Zdrojový kód tohto projektu je veľmi jednoduchý. Skontrolovať to!

Krok 1: Použité zdroje

  • Dva moduly ESP WROOM 32 NodeMcu
  • Dva CAN transceivery od WaveShare
  • Prepojky pre spojenia
  • Logický analyzátor zachytávania
  • Tri USB káble pre ESP a analyzátor
  • 10 metrov krútenej dvojlinky, ktoré budú slúžiť ako autobus

Krok 2: CAN (sieť v oblasti ovládača)

CAN (Network Area Network)
CAN (Network Area Network)
  • Bol vyvinutý spoločnosťou Robert Bosch GmbH v 80. rokoch minulého storočia, aby slúžil automobilovému priemyslu.
  • V priebehu rokov sa stal veľmi rozšíreným vďaka svojej robustnosti a flexibilite implementácie. Používa sa s vojenským vybavením, poľnohospodárskymi strojmi, priemyselnou automatizáciou a automatizáciou budov, robotikou a zdravotníckym vybavením.

Krok 3: CAN - Funkcie

CAN - Vlastnosti
CAN - Vlastnosti
CAN - Vlastnosti
CAN - Vlastnosti
  • Dvojvodičová sériová komunikácia
  • Maximálne 8 bajtov užitočných informácií na rámec s možnosťou fragmentácie
  • Adresa smerovaná do správy a nie do uzla
  • Priradenie priorít správam a prenos správ „na počkanie“
  • Účinná schopnosť detekovať a signalizovať chyby
  • Možnosť viacerých majstrov (všetky uzly môžu požadovať prístup na zbernicu)
  • Možnosť viacsmerového vysielania (jedna správa pre viac prijímačov súčasne)
  • Prenosové rýchlosti až 1 Mbit / s na 40-metrovom autobuse (zníženie rýchlosti s predĺžením dĺžky prípojnice)
  • Flexibilita konfigurácie a zavedenie nových uzlov (až 120 uzlov na zbernicu)
  • Štandardný hardvér, nízke náklady a dobrá dostupnosť
  • Regulovaný protokol: ISO 11898

Krok 4: Použitý obvod

Použitý obvod
Použitý obvod

Tu mám transceivery. Na každej strane je jeden a sú spojené dvojicou vodičov. Jeden je zodpovedný za odosielanie a druhý za príjem údajov.

Krok 5: Napätia prenosovej linky (diferenciálna detekcia)

Napätia prenosového vedenia (diferenciálna detekcia)
Napätia prenosového vedenia (diferenciálna detekcia)

V CAN je dominantným bitom nula.

Line Differential Detection redukuje citlivosť na šum (EFI)

Krok 6: Formát štandardov a rámcov CAN

Štandardy a formáty rámcov CAN
Štandardy a formáty rámcov CAN

Štandardný formát s 11-bitovým identifikátorom

Krok 7: Formát štandardov a rámcov CAN

Štandardy a formáty rámcov CAN
Štandardy a formáty rámcov CAN

Rozšírený formát s 29-bitovým identifikátorom

Krok 8: Formát štandardov a rámcov CAN

Je dôležité poznamenať, že protokol už počíta CRC a odosiela signály ACK a EOF, čo sú veci, ktoré už protokol CAN vykonáva. To zaručuje, že odoslaná správa nedorazí nesprávnym spôsobom. Dôvodom je, že ak to v CRC (Redundant Cyclic Check or Redundancy Check) spôsobí problém, ktorý je rovnaký ako kontrolná číslica informácií, CRC ho identifikuje.

Krok 9: Štyri typy rámcov (rámcov)

Štyri typy rámov (rámov)
Štyri typy rámov (rámov)

Je dôležité poznamenať, že protokol už počíta CRC a odosiela signály ACK a EOF, čo sú veci, ktoré už protokol CAN vykonáva. To zaručuje, že odoslaná správa nedorazí nesprávnym spôsobom. Dôvodom je, že ak to v CRC (Redundant Cyclic Check or Redundancy Check) spôsobí problém, ktorý je rovnaký ako kontrolná číslica informácií, CRC ho identifikuje.

Štyri typy rámov (rámov)

Prenos a príjem dát v CAN sú založené na štyroch typoch rámcov. Typy rámcov budú identifikované variáciami v riadiacich bitoch alebo dokonca zmenami v pravidlách zápisu rámca pre každý prípad.

  • Dátový rámec: Obsahuje údaje vysielača pre príjemcov.
  • Vzdialený rámec: Toto je požiadavka na údaje z jedného z uzlov
  • Chybový rámec: Je to rámec odoslaný ktorýmkoľvek z uzlov pri identifikácii chyby v zbernici a je možné ho zistiť všetkými uzlami.
  • Rámec preťaženia: Slúži na oneskorenie prevádzky na zbernici v dôsledku preťaženia údajov alebo oneskorenia na jednom alebo viacerých uzloch.

Krok 10: Okruh - podrobnosti o pripojeniach

Okruh - detaily pripojení
Okruh - detaily pripojení

Krok 11: Okruh - zachytenie údajov

Obvod - Zachytávanie údajov
Obvod - Zachytávanie údajov

Vlnové dĺžky získané pre štandardný CAN s 11-bitovým ID

Krok 12: Okruh - zachytenie údajov

Obvod - Zachytávanie údajov
Obvod - Zachytávanie údajov

Vlnové dĺžky získané pre rozšírený CAN s 29-bitovým ID

Krok 13: Okruh - zachytenie údajov

Obvod - Zachytávanie údajov
Obvod - Zachytávanie údajov

Údaje získané logickým analyzátorom

Krok 14: Knižnica Arduino - CAN

Knižnica Arduino - CAN
Knižnica Arduino - CAN

Tu uvádzam dve možnosti, kde je možné nainštalovať knižnicu ovládačov CAN

Správca knižníc Arduino IDE

Krok 15: Github

Github
Github

github.com/sandeepmistry/arduino-CAN

Krok 16: Zdrojový kód vysielača

Zdrojový kód: Zahŕňa a nastavuje ()

Zahrneme knižnicu CAN, spustíme sériové ladenie a spustíme zbernicu CAN pri 500 kbps.

#include // Inclui a biblioteca CAN neplatné nastavenie () {Serial.begin (9600); // inicializácia sériového para ladenia while (! Serial); Serial.println („Transmissionor CAN“); // Inicia or barramento CAN a 500 kbps if ((CAN CAN.begin (500E3)) {Serial.println ("Falha ao initiar o controlador CAN"); // caso não seja possível initiar o controlador while (1); }}

Krok 17: Zdrojový kód: Loop (), odoslanie štandardného paketu CAN 2.0

Použitím štandardného CAN 2.0 odosielame balík. Správu identifikuje 11-bitové ID. Dátový blok musí mať až 8 bajtov. Začína sa paket s ID 18 v šestnástkovej sústave. Zabalí 5 bajtov a zatvorí funkciu.

void loop () {// Použitie alebo CAN 2.0 veľkosť // Priemerný počet bitov: o 11 bitov Počet identifikátorov (predchádzajúca identifikácia, vyhýbanie sa) // Počet blokov, ktoré môžu mať 8 bajtov Serial.println („Encondo pacote“… “); CAN.beginPacket (0x12); // id 18 em hexadecimal CAN.write ('h'); // 1º byte CAN.write ('e'); // 2º byte CAN.write ('l'); // 3º byte CAN.write ('l'); // 4º byte CAN.write ('o'); // 5º byte CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); oneskorenie (1000);

Krok 18: Zdrojový kód: Loop (), odoslanie rozšíreného balíka CAN 2.0

V tomto kroku má ID 29 bitov. Začne odosielať 24 bitov ID a opäť zabalí 5 bajtov a skončí.

// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bit e identifica a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote estendido…"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 decimal (abcdef em hexa) = 24 bit preenchidos até aqui CAN.write ('w'); // 1º byte CAN.write ('o'); // 2º byte CAN.write ('r'); // 3º byte CAN.write ('l'); // 4º byte CAN.write ('d'); // 5º byte CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); oneskorenie (1000); }

Krok 19: Zdrojový kód prijímača

Zdrojový kód: Zahŕňa a nastavuje ()

Opäť zahrnieme knižnicu CAN, spustíme sériové ladenie a spustíme zbernicu CAN pri 500 kbps. Ak sa vyskytne chyba, táto chyba sa vytlačí.

#include // Inclui a biblioteca CAN neplatné nastavenie () {Serial.begin (9600); // inicializácia sériového para ladenia while (! Serial); Serial.println ("Receptor CAN"); // Inicia or barramento CAN a 500 kbps if ((CAN CAN.begin (500E3)) {Serial.println ("Falha ao initiar o controlador CAN"); // caso não seja possível initiar o controlador while (1); }}

Krok 20: Zdrojový kód: Loop (), získanie balíka a kontrola formátu

Pokúsili sme sa skontrolovať veľkosť prijatého paketu. Metóda CAN.parsePacket () mi ukazuje veľkosť tohto balíka. Ak teda máme balík, skontrolujeme, či je predĺžený alebo nie.

void loop () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote."); if (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }

Krok 21: Zdroj: Loop (), skontroluje, či ide o vzdialený balík

Tu skontrolujeme, či je prijatý paket požiadavkou na údaje. V tomto prípade neexistujú žiadne údaje.

if (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }

Krok 22: Zdrojový kód: Slučka (), požadovaná alebo prijatá dĺžka údajov

Ak je prijatým paketom požiadavka, uvádzame požadovanú dĺžku. Potom získame kód dĺžky údajov (DLC), ktorý udáva dĺžku údajov. Nakoniec uvádzame prijatú dĺžku.

Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); if (CAN.packetRtr ()) {// se o príjem pacote é de requisição, indikácia o soimado solicitado Serial.print ("e requsitou o Complimento"); Serial.println (CAN.packetDlc ()); // obtem o DLC (Data Length Code, que indica o obsimento dos dados)} else {Serial.print ("e Comprimimento"); // akékoivek indikujúce príjem signálu Serial.println (packetSize);

Krok 23: Zdrojový kód: Loop (), ak sú prijaté údaje, potom sa vytlačia

Dáta vytlačíme (na sériový monitor), ale iba vtedy, ak prijatý paket nie je požiadavkou.

// Čas, ktorý sa môže líšiť od príjmu príjemcov, zatiaľ čo (CAN.available ()) {Serial.print ((char) CAN.read ()); } Serial.println (); } Serial.println (); }}

Krok 24: Stiahnite si súbory

PDF

INO

Odporúča: