Obsah:
- Krok 1: Použité zdroje
- Krok 2: CAN (Network Area Network)
- Krok 3: CAN - Funkce
- Krok 4: Použitý obvod
- Krok 5: Napětí přenosového vedení (diferenciální detekce)
- Krok 6: Formát standardů a rámců CAN
- Krok 7: Formát standardů a rámců CAN
- Krok 8: Formát standardů a rámců CAN
- Krok 9: Čtyři typy rámců (rámečků)
- Krok 10: Okruh - detaily připojení
- Krok 11: Okruh - zachycení dat
- Krok 12: Okruh - zachycení dat
- Krok 13: Okruh - zachycení dat
- Krok 14: Knihovna Arduino - CAN
- Krok 15: Github
- Krok 16: Zdrojový kód vysílače
- Krok 17: Zdrojový kód: Loop (), odeslání standardního paketu CAN 2.0
- Krok 18: Zdrojový kód: Loop (), odeslání rozšířeného balíčku CAN 2.0
- Krok 19: Zdrojový kód přijímače
- Krok 20: Zdrojový kód: Loop (), získání balíčku a kontrola formátu
- Krok 21: Zdroj: Loop (), zkontroluje, zda se jedná o vzdálený balíček
- Krok 22: Zdrojový kód: Loop (), požadovaná nebo přijatá délka dat
- Krok 23: Zdrojový kód: Smyčka (), pokud jsou data přijata, pak se vytisknou
- Krok 24: Stáhněte si soubory
Video: Protokol CAN - Ano, můžeme !: 24 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
Dalším předmětem, který nedávno navrhli následovníci mého kanálu YouTube, byl protokol CAN (Controller Area Network), na který se dnes zaměříme. Je důležité vysvětlit, že CAN je simultánní sériový komunikační protokol. To znamená, že synchronizace mezi moduly připojenými k síti se provádí ve vztahu k začátku každé zprávy odeslané na sběrnici. Začneme představením základních konceptů protokolu CAN a provedeme jednoduchou montáž se dvěma ESP32.
V našem obvodu mohou ESP fungovat jako Master i Slave. Můžete vysílat více mikrokontrolérů současně, protože CAN řeší kolizi všeho automaticky. Zdrojový kód tohoto projektu je velmi jednoduchý. Koukni na to!
Krok 1: Použité zdroje
- Dva moduly ESP WROOM 32 NodeMcu
- Dva CAN transceivery od WaveShare
- Propojky pro připojení
- Logický analyzátor pro zachycení
- Tři USB kabely pro ESP a analyzátor
- 10 metrů kroucené dvojice, aby sloužil jako autobus
Krok 2: CAN (Network Area Network)
- Byl vyvinut společností Robert Bosch GmbH v 80. letech minulého století, aby sloužil automobilovému průmyslu.
- V průběhu let se rozšířila díky své robustnosti a flexibilitě implementace. Používá se s vojenským vybavením, zemědělskými stroji, průmyslovou a stavební automatizací, robotikou a zdravotnickým zařízením.
Krok 3: CAN - Funkce
- Dvouvodičová sériová komunikace
- Maximálně 8 bajtů užitečných informací v rámci s možnou fragmentací
- Adresa směrovaná na zprávu a ne na uzel
- Přiřazení priorit zprávám a předávání zpráv „na počkání“
- Efektivní schopnost detekovat a signalizovat chyby
- Možnost více masterů (všechny uzly mohou požadovat přístup na sběrnici)
- Možnost vícesměrového vysílání (jedna zpráva pro více přijímačů současně)
- Přenosové rychlosti až 1 Mbit / s na 40metrové sběrnici (snížení rychlosti s prodloužením délky přípojnice)
- Flexibilita konfigurace a zavedení nových uzlů (až 120 uzlů na sběrnici)
- Standardní hardware, nízké náklady a dobrá dostupnost
- Regulovaný protokol: ISO 11898
Krok 4: Použitý obvod
Tady mám vysílače. Na každé straně je jeden a jsou spojeny dvojicí vodičů. Jeden je zodpovědný za odesílání a druhý za příjem dat.
Krok 5: Napětí přenosového vedení (diferenciální detekce)
V CAN je dominantní bit Nula.
Line Differential Detection Reductions Noise Sensitivity (EFI)
Krok 6: Formát standardů a rámců CAN
Standardní formát s 11bitovým identifikátorem
Krok 7: Formát standardů a rámců CAN
Rozšířený formát s 29bitovým identifikátorem
Krok 8: Formát standardů a rámců CAN
Je důležité si uvědomit, že protokol již vypočítává CRC a odesílá signály ACK a EOF, což jsou věci, které již protokol CAN provádí. To zaručuje, že odeslaná zpráva nedorazí špatným způsobem. Důvodem je, že pokud způsobí problém v CRC (Redundant Cyclic Check nebo Redundancy Check), který je stejný jako kontrolní kontrolní číslice, bude identifikován CRC.
Krok 9: Čtyři typy rámců (rámečků)
Je důležité si uvědomit, že protokol již vypočítává CRC a odesílá signály ACK a EOF, což jsou věci, které již protokol CAN provádí. To zaručuje, že odeslaná zpráva nedorazí špatným způsobem. Důvodem je, že pokud způsobí problém v CRC (Redundant Cyclic Check nebo Redundancy Check), který je stejný jako kontrolní kontrolní číslice, bude identifikován CRC.
Čtyři typy rámů (rámečků)
Přenos a příjem dat v CAN jsou založeny na čtyřech typech rámců. Typy rámců budou identifikovány variacemi v řídicích bitech nebo dokonce změnami pravidel pro zápis rámců pro každý případ.
- Datový rámec: Obsahuje data vysílače pro přijímače
- Vzdálený rámec: Toto je požadavek na data z jednoho z uzlů
- Chybový rámec: Je to rámec odeslaný kterýmkoli z uzlů při identifikaci chyby na sběrnici a může být detekován všemi uzly
- Rámec přetížení: Slouží ke zpoždění provozu na sběrnici v důsledku přetížení dat nebo zpoždění na jednom nebo více uzlech.
Krok 10: Okruh - detaily připojení
Krok 11: Okruh - zachycení dat
Vlnové délky získané pro standardní CAN s 11bitovým ID
Krok 12: Okruh - zachycení dat
Vlnové délky získané pro rozšířený CAN s 29bitovým ID
Krok 13: Okruh - zachycení dat
Data získaná logickým analyzátorem
Krok 14: Knihovna Arduino - CAN
Ukazuji zde dvě možnosti, kde můžete nainstalovat knihovnu ovladačů CAN
Správce knihovny Arduino IDE
Krok 15: Github
github.com/sandeepmistry/arduino-CAN
Krok 16: Zdrojový kód vysílače
Zdrojový kód: Zahrnuje a nastavení ()
Zahrneme knihovnu CAN, spustíme seriál pro ladění a spustíme sběrnici CAN rychlostí 500 kb / s.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println („Transmissor CAN“); // Inicia o barramento CAN a 500 kbps if (! 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 (), odeslání standardního paketu CAN 2.0
Pomocí standardního CAN 2.0 odesíláme balíček. Zprávu identifikuje 11bitové ID. Datový blok musí mít až 8 bajtů. Spustí paket s ID 18 v šestnáctkové soustavě. Zabalí 5 bajtů a zavře funkci.
void loop () {// Používání o CAN 2.0 padrão // Envia um pacote: o id tem 11 bits e identifica a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote … “); CAN.beginPacket (0x12); // id 18 em hexadecimální 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."); zpoždění (1000);
Krok 18: Zdrojový kód: Loop (), odeslání rozšířeného balíčku CAN 2.0
V tomto kroku má ID 29 bitů. Začíná odesílat 24 bitů ID a ještě jednou zabalí 5 bajtů a skončí.
// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits 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."); zpoždění (1000); }
Krok 19: Zdrojový kód přijímače
Zdrojový kód: Zahrnuje a nastavení ()
Opět zahrneme knihovnu CAN, spustíme sériové ladění a spustíme sběrnici CAN rychlostí 500 kb / s. Pokud dojde k chybě, tato chyba se vytiskne.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println ("Receptor CAN"); // Inicia o barramento CAN a 500 kbps if (! 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ískání balíčku a kontrola formátu
Pokusili jsme se zkontrolovat velikost přijatého paketu. Metoda CAN.parsePacket () mi ukazuje velikost tohoto balíčku. Pokud tedy máme balíček, zkontrolujeme, zda je prodloužen či nikoli.
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 (), zkontroluje, zda se jedná o vzdálený balíček
Zde zkontrolujeme, zda je přijatý paket datovým požadavkem. V tomto případě neexistují žádná data.
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: Loop (), požadovaná nebo přijatá délka dat
Pokud je přijatý paket požadavkem, uvedeme požadovanou délku. Poté získáme Data Length Code (DLC), který udává délku dat. Nakonec označíme přijatou délku.
Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); if (CAN.packetRtr ()) {// se o příjem pacote é de requisição, indikace o obsolento solicitado Serial.print ("e requsitou o Combo"); Serial.println (CAN.packetDlc ()); // obtem o DLC (Data Length Code, que indica o obsimento dos dados)} else {Serial.print ("e Comboimento"); // aqui somente indica o Compimento recebido Serial.println (packetSize);
Krok 23: Zdrojový kód: Smyčka (), pokud jsou data přijata, pak se vytisknou
Data vytiskneme (na sériovém monitoru), ale pouze v případě, že přijatý paket není požadavkem.
// Zvýraznění některých momentů, které mohou být přijímány, zatímco (CAN.available ()) {Serial.print ((char) CAN.read ()); } Serial.println (); } Serial.println (); }}
Krok 24: Stáhněte si soubory
INO
Doporučuje:
Kytarový zesilovač Pringles Can: 7 kroků
Pringles Can Guitar Amp: Někdy chci chytit elektrickou kytaru, abych zahrál pár riffů, aniž bych musel nastavovat svůj běžný zesilovač. Chtěl jsem tedy vytvořit levný, snadno sestavitelný a velmi jednoduchý kytarový zesilovač: The Pringles Can Amp
Otáčkoměr/měřidlo skenování pomocí sběrnice Arduino, OBD2 a CAN: 8 kroků
Otáčkoměr/měřidlo skenování pomocí sběrnice Arduino, OBD2 a CAN: Každý majitel Toyoty Prius (nebo jiného hybridního/speciálního vozidla) bude vědět, že na jeho palubní desce může chybět několik číselníků! Můj prius nemá otáčky motoru ani teploměr. Pokud jste výkonnostní chlapík, možná budete chtít vědět věci jako načasování a
Zobrazení Nextion - Rozhraní a protokol vysvětlen s PIC a Arduino: 10 kroků
Zobrazení Nextion | Rozhraní a protokol vysvětlen pomocí PIC a Arduino: Nextion Display je velmi snadné použití a snadné rozhraní s mikrořadičem. Pomocí editoru Nextion můžeme konfigurovat displej a můžeme navrhnout uživatelské rozhraní na displeji. Takže na základě událostí nebo příkazů Nextion displej bude působit na zobrazení
Digitální nástěnka využívající protokol Raspberry Pi a MQTT: 8 kroků
Digitální nástěnka využívající protokol Raspberry Pi a MQTT: Nástěnky se používají téměř všude, například v kancelářích, školách, nemocnicích a hotelech. Mohou být použity znovu a znovu k zobrazení důležitých oznámení nebo k propagaci nadcházejících událostí nebo schůzek. Ale oznámení nebo reklamy musí být vytištěny
Protokol reverzního inženýrství Ritter 8341C pro ESP3866: 5 kroků
Protokol reverzního inženýrství Ritter 8341C pro ESP3866: Hi @all. Pro vlastní malou domácí automatizaci používám primární zásuvky řízené 433 MHz. Vlastním 3 sady s DIP přepínači pro nastavení adresy. Ty fungovaly dobře. Ale před nějakou dobou (před jedním nebo dvěma lety) jsem koupil sadu zásuvek od společnosti „ritter & quo