Obsah:
- Krok 1: Použité zdroje
- Krok 2: CAN (sieť v oblasti ovládača)
- Krok 3: CAN - Funkcie
- Krok 4: Použitý obvod
- Krok 5: Napätia prenosovej linky (diferenciálna detekcia)
- Krok 6: Formát štandardov a rámcov CAN
- Krok 7: Formát štandardov a rámcov CAN
- Krok 8: Formát štandardov a rámcov CAN
- Krok 9: Štyri typy rámcov (rámcov)
- Krok 10: Okruh - podrobnosti o pripojeniach
- Krok 11: Okruh - zachytenie údajov
- Krok 12: Okruh - zachytenie údajov
- Krok 13: Okruh - zachytenie údajov
- Krok 14: Knižnica Arduino - CAN
- Krok 15: Github
- Krok 16: Zdrojový kód vysielača
- Krok 17: Zdrojový kód: Loop (), odoslanie štandardného paketu CAN 2.0
- Krok 18: Zdrojový kód: Loop (), odoslanie rozšíreného balíka CAN 2.0
- Krok 19: Zdrojový kód prijímača
- Krok 20: Zdrojový kód: Loop (), získanie balíka a kontrola formátu
- Krok 21: Zdroj: Loop (), skontroluje, či ide o vzdialený balík
- Krok 22: Zdrojový kód: Slučka (), požadovaná alebo prijatá dĺžka údajov
- Krok 23: Zdrojový kód: Loop (), ak sú prijaté údaje, potom sa vytlačia
- Krok 24: Stiahnite si súbory
Video: Protokol CAN - Áno, môžeme !: 24 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
Ď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)
- 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
- 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
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)
V CAN je dominantným bitom nula.
Line Differential Detection redukuje citlivosť na šum (EFI)
Krok 6: Formát štandardov a rámcov CAN
Štandardný formát s 11-bitovým identifikátorom
Krok 7: Formát štandardov a 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)
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
Krok 11: Okruh - zachytenie údajov
Vlnové dĺžky získané pre štandardný CAN s 11-bitovým ID
Krok 12: Okruh - zachytenie údajov
Vlnové dĺžky získané pre rozšírený CAN s 29-bitovým ID
Krok 13: Okruh - zachytenie údajov
Údaje získané logickým analyzátorom
Krok 14: 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.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
INO
Odporúča:
Gitarový zosilňovač Pringles Can: 7 krokov
Gitarový zosilňovač Pringles Can: Niekedy chcem chytiť elektrickú gitaru, aby som zahral niekoľko riffov bez toho, aby som musel nastavovať svoj bežný zosilňovač. Chcel som preto vytvoriť lacný, ľahko zostaviteľný a veľmi jednoduchý gitarový zosilňovač: Pringles Can Amp
Otáčkomer/merač skenovania pomocou zbernice Arduino, OBD2 a CAN: 8 krokov
Otáčkomer/merač skenovania pomocou zbernice Arduino, OBD2 a CAN: Každý majiteľ Toyoty Prius (alebo iného hybridného/špeciálneho vozidla) bude vedieť, že na jeho palubných doskách môže chýbať niekoľko ciferníkov! Môj prius nemá otáčky motora ani teplomer. Ak ste výkonnostný chlapík, možno budete chcieť vedieť veci ako načasovanie a
Displej Nextion - Rozhranie a protokol vysvetlený pomocou PIC a Arduino: 10 krokov
Displej Nextion | Rozhranie a protokol vysvetlený pomocou PIC a Arduino: Nextion Display je veľmi ľahko použiteľné a jednoduché rozhranie s mikrořadičom. Pomocou editora Nextion môžeme nakonfigurovať displej a navrhnúť používateľské rozhranie na displeji. Takže na základe udalostí alebo príkazov Nextion displej bude pôsobiť na zobrazenie
Digitálna nástenka využívajúca protokol Raspberry Pi a MQTT: 8 krokov
Digitálna nástenka využívajúca protokol Raspberry Pi a MQTT: Nástenky sa používajú takmer všade, napríklad v kanceláriách, školách, nemocniciach a hoteloch. Môžu byť použité znova a znova na zobrazenie dôležitých oznámení alebo na reklamu nadchádzajúcich udalostí alebo schôdzí. Oznámenie alebo reklamy sa však musia vytlačiť
Protokol reverzného inžinierstva Ritter 8341C pre ESP3866: 5 krokov
Protokol reverzného inžinierstva Ritter 8341C pre ESP3866: Ahoj @all. Na vlastnú malú domácu automatizáciu používam primárne zásuvky riadené 433 MHz. Vlastním 3 sady s prepínačmi DIP na úpravu adresy. Tieto fungovali dobre. Ale pred nejakým časom (jedným alebo dvoma rokmi) som kúpil sadu zásuviek od spoločnosti „ritter & quo