Indholdsfortegnelse:
- Trin 1: Brugte ressourcer
- Trin 2: CAN (Controller Area Network)
- Trin 3: CAN - Funktioner
- Trin 4: Kredsløb brugt
- Trin 5: Transmissionslinjespændinger (differentialregistrering)
- Trin 6: CAN -standarder og rammerformat
- Trin 7: CAN -standarder og rammerformat
- Trin 8: CAN -standarder og rammerformat
- Trin 9: Fire typer rammer (rammer)
- Trin 10: Kredsløb - Detaljer om forbindelser
- Trin 11: Kredsløb - datafangst
- Trin 12: Kredsløb - datafangst
- Trin 13: Kredsløb - datafangst
- Trin 14: Arduino Library - CAN
- Trin 15: Github
- Trin 16: Senderkildekode
- Trin 17: Kildekode: Loop (), afsendelse af en standard CAN 2.0 -pakke
- Trin 18: Kildekode: Loop (), afsendelse af en udvidet CAN 2.0 -pakke
- Trin 19: Modtagerkildekode
- Trin 20: Kildekode: Loop (), Hentning af pakken og kontrol af formatet
- Trin 21: Kilde: Loop (), tjekker, om det er en fjernpakke
- Trin 22: Kildekode: Loop (), anmodet eller modtaget datalængde
- Trin 23: Kildekode: Loop (), hvis data modtages, udskrives det derefter
- Trin 24: Download filerne
Video: CAN -protokol - Ja, vi kan !: 24 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Et andet emne, der for nylig blev foreslået af min YouTube -kanals tilhængere, var CAN (Controller Area Network) -protokol, hvilket vi vil fokusere på i dag. Det er vigtigt at forklare, at CAN er en samtidig seriel kommunikationsprotokol. Det betyder, at synkronismen mellem de moduler, der er forbundet til netværket, udføres i forhold til begyndelsen af hver meddelelse, der sendes til bussen. Vi starter med at introducere de grundlæggende begreber i CAN -protokollen og udfører en simpel samling med to ESP32'er.
I vores kredsløb kan ESP'erne fungere som både Master og Slave. Du kan få flere mikrokontrollere til at sende samtidigt, fordi CAN håndterer kollision af alt automatisk. Kildekoden til dette projekt er super enkel. Tjek det ud!
Trin 1: Brugte ressourcer
- To moduler af ESP WROOM 32 NodeMcu
- To CAN -transceivere fra WaveShare
- Jumpere til forbindelser
- Logisk analysator til optagelse
- Tre USB -kabler til ESP'er og analysator
- 10 meter snoet par til at tjene som bus
Trin 2: CAN (Controller Area Network)
- Det blev udviklet af Robert Bosch GmbH i 1980'erne til at betjene bilindustrien.
- Det er blevet udbredt gennem årene på grund af dets robusthed og fleksibilitet i implementeringen. Det bruges med militært udstyr, landbrugsmaskiner, industri- og bygningsautomation, robotik og medicinsk udstyr.
Trin 3: CAN - Funktioner
- To-leder seriel kommunikation
- Maksimalt 8 bytes nyttig information pr. Ramme, med fragmentering mulig
- Adresse rettet til meddelelsen og ikke til noden
- Tildele meddelelser prioritet og videresendelse af "i venteposition" -meddelelser
- Effektiv evne til at opdage og signalere fejl
- Multi-master-kapacitet (alle noder kan anmode om busadgang)
- Multicast -kapacitet (én besked til flere modtagere på samme tid)
- Overførselshastigheder på op til 1 Mbit / s på en 40 meter lang bus (reduktion af hastigheden med stigning i samlingsstanglængde)
- Fleksibilitet i konfiguration og introduktion af nye noder (op til 120 noder pr. Bus)
- Standard hardware, lave omkostninger og god tilgængelighed
- Reguleret protokol: ISO 11898
Trin 4: Kredsløb brugt
Her har jeg transceiverne. Der er en på hver side, og de er forbundet med et par ledninger. Den ene er ansvarlig for at sende og den anden for at modtage data.
Trin 5: Transmissionslinjespændinger (differentialregistrering)
I CAN er den dominerende bit Zero.
Line Differential Detection reducerer støjfølsomhed (EFI)
Trin 6: CAN -standarder og rammerformat
Standardformat med 11-bit identifikator
Trin 7: CAN -standarder og rammerformat
Udvidet format med 29-bit identifikator
Trin 8: CAN -standarder og rammerformat
Det er vigtigt at bemærke, at en protokol allerede beregner CRC og sender ACK- og EOF -signaler, som er ting, der allerede udføres af CAN -protokollen. Dette garanterer, at den sendte besked ikke kommer forkert. Dette skyldes, at hvis det giver et problem i CRC (Redundant Cyclic Check eller Redundancy Check), som er det samme som et informationskontrolciffer, vil det blive identificeret af CRC.
Trin 9: Fire typer rammer (rammer)
Det er vigtigt at bemærke, at en protokol allerede beregner CRC og sender ACK- og EOF -signaler, som er ting, der allerede udføres af CAN -protokollen. Dette garanterer, at den sendte besked ikke kommer forkert. Dette skyldes, at hvis det giver et problem i CRC (Redundant Cyclic Check eller Redundancy Check), som er det samme som et informationskontrolciffer, vil det blive identificeret af CRC.
Fire typer rammer (rammer)
Overførsel og modtagelse af data i CAN er baseret på fire typer rammer. Rammetyperne vil blive identificeret ved variationer i kontrolbitene eller endda ved ændringer i rammeskrivereglerne for hvert tilfælde.
- Dataramme: Indeholder transmitterdata for modtageren (e)
- Fjernramme: Dette er en anmodning om data fra en af noderne
- Fejlramme: Det er en ramme, der sendes af en hvilken som helst af noderne, når der identificeres en fejl i bussen, og kan registreres af alle knudepunkter
- Overload Frame: Tjener til at forsinke trafik på bussen på grund af dataoverbelastning eller forsinkelse på en eller flere noder.
Trin 10: Kredsløb - Detaljer om forbindelser
Trin 11: Kredsløb - datafangst
Bølgelængder opnået til standard CAN med 11-bit ID
Trin 12: Kredsløb - datafangst
Bølgelængder opnået til udvidet CAN med 29-bit ID
Trin 13: Kredsløb - datafangst
Data opnået af den logiske analysator
Trin 14: Arduino Library - CAN
Jeg viser her de to muligheder, hvor du kan installere CAN Driver Library
Arduino IDE Library Manager
Trin 15: Github
github.com/sandeepmistry/arduino-CAN
Trin 16: Senderkildekode
Kildekode: Inkluderer og opsætning ()
Vi inkluderer CAN -biblioteket, starter serien til fejlfinding og starter CAN -bussen med 500 kbps.
#include // Inkluder en biblioteca CAN void setup () {Serial.begin (9600); // inicia en seriel para debug mens (! Serial); Serial.println ("Transmissor CAN"); // Inicia o barramento KAN 500 kbps hvis (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}
Trin 17: Kildekode: Loop (), afsendelse af en standard CAN 2.0 -pakke
Ved hjælp af standard CAN 2.0 sender vi en pakke. 11-bit-id'et identificerer meddelelsen. Datablokken skal have op til 8 bytes. Det starter pakken med ID 18 i hexadecimal. Den pakker 5 bytes og lukker funktionen.
void loop () {// Usando o CAN 2.0 padr // // 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 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."); forsinkelse (1000);
Trin 18: Kildekode: Loop (), afsendelse af en udvidet CAN 2.0 -pakke
I dette trin har ID'et 29 bits. Den begynder at sende 24 bits ID og pakker endnu en gang 5 bytes og afslutter.
// 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 bits 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."); forsinkelse (1000); }
Trin 19: Modtagerkildekode
Kildekode: Inkluderer og opsætning ()
Igen vil vi inkludere CAN -biblioteket, starte serien til fejlfinding og starte CAN -bussen med 500 kbps. Hvis der opstår en fejl, udskrives denne fejl.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia en seriel para debug mens (! Serial); Serial.println ("Receptor CAN"); // Inicia o barramento KAN 500 kbps hvis (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}
Trin 20: Kildekode: Loop (), Hentning af pakken og kontrol af formatet
Vi forsøgte at kontrollere størrelsen på den modtagne pakke. CAN.parsePacket () -metoden viser mig størrelsen på denne pakke. Så hvis vi har en pakke, kontrollerer vi, om den er forlænget eller ej.
void loop () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote."); hvis (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }
Trin 21: Kilde: Loop (), tjekker, om det er en fjernpakke
Her kontrollerer vi, om den modtagne pakke er en dataanmodning. I dette tilfælde er der ingen data.
hvis (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }
Trin 22: Kildekode: Loop (), anmodet eller modtaget datalængde
Hvis den modtagne pakke er en anmodning, angiver vi den ønskede længde. Vi får derefter Data Length Code (DLC), som angiver længden af dataene. Endelig angiver vi den modtagne længde.
Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); hvis (CAN.packetRtr ()) {// se o pacote recebido é de requisição, indicamos o comprimento solicitado Serial.print ("e requsitou o comprimento"); Serial.println (CAN.packetDlc ()); // obtem o DLC (Data Length Code, que indica o comprimento dos dados)} else {Serial.print ("e comprimento"); // aqui somente indica o comprimento recebido Serial.println (packetSize);
Trin 23: Kildekode: Loop (), hvis data modtages, udskrives det derefter
Vi udskriver (på den serielle skærm) dataene, men kun hvis den modtagne pakke ikke er en anmodning.
// Imprime os dados somente se o pacote recebido não foi de requisição while (CAN.available ()) {Serial.print ((char) CAN.read ()); } Serial.println (); } Serial.println (); }}
Trin 24: Download filerne
INO
Anbefalede:
Webstedskontrolleret juletræ (alle kan kontrollere det): 19 trin (med billeder)
Webstedskontrolleret juletræ (alle kan kontrollere det): Vil du vide, hvordan et webstedskontrolleret juletræ ser ud? Her er videoen, der viser mit projekt af mit juletræ. Livestreamen er slut nu, men jeg lavede en video, hvor jeg fanger, hvad der foregik: I år, midt i Decembe
DIY -- Sådan laver du en edderkoprobot, der kan kontrolleres ved hjælp af smartphone ved hjælp af Arduino Uno: 6 trin
DIY || Sådan laver du en edderkoprobot, der kan styres ved hjælp af smartphone Brug af Arduino Uno: Mens du laver en edderkoprobot, kan man lære så mange ting om robotik. Ligesom at lave robotter er underholdende såvel som udfordrende. I denne video vil vi vise dig, hvordan du laver en Spider -robot, som vi kan betjene ved hjælp af vores smartphone (Androi
LED Snapper: Sandsynligvis det mest basale stykke testudstyr, du kan lave: 3 trin
LED Snapper: Sandsynligvis det mest basale stykke testudstyr, du kan lave: Tillad mig at præsentere dig for LED Snapper. Et enkelt, men massivt nyttigt stykke testudstyr, som du kan bygge til at hjælpe dig med at fejlsøge dine elektronikprojekter. LED Snapper er et printkort med open source, der giver dig mulighed for nemt at tilføje de
Fleksibelt bogmærke, der kan skiftes ud, kan ændres: 6 trin
Fleksibelt bogmærke, der kan skiftes mellem bogmærker: Gør dit foretrukne bogmærke i papir til et boglys, der kan udskiftes med bare et par enkle trin. at lægge en bog til side, når tingene går
Sådan får du musik fra næsten ethvert (Haha) websted (så længe du kan høre det, kan du få det Ok fint, hvis det er integreret i Flash, kan du muligvis ikke være) REDIGERET !!!!! Tilføjet info: 4 trin
Sådan får du musik fra næsten ethvert (Haha) websted (så længe du kan høre det, kan du få det … Ok fint, hvis det er integreret i Flash, kan du muligvis ikke være) REDIGERET !!!!! Tilføjet info: Hvis du nogensinde går til et websted, og det afspiller en sang, du kan lide og vil have det, så er det instruerbart for mig, det er ikke min skyld, hvis du ødelægger noget (den eneste måde det vil ske på, er hvis du begynder at slette ting uden grund) ) Jeg har kunnet få musik til