Innehållsförteckning:
- Steg 1: Resurser som används
- Steg 2: CAN (Controller Area Network)
- Steg 3: CAN - funktioner
- Steg 4: Krets används
- Steg 5: Transmissionslinjespänningar (differentialdetektering)
- Steg 6: CAN -standarder och ramformat
- Steg 7: CAN -standarder och ramformat
- Steg 8: CAN -standarder och ramformat
- Steg 9: Fyra typer av ramar (ramar)
- Steg 10: Krets - Detaljer om anslutningar
- Steg 11: Krets - Datafångst
- Steg 12: Krets - Datafångst
- Steg 13: Krets - Datafångst
- Steg 14: Arduino Library - CAN
- Steg 15: Github
- Steg 16: Sändarens källkod
- Steg 17: Källkod: Loop (), Skicka ett standard CAN 2.0 -paket
- Steg 18: Källkod: Loop (), Skicka ett utökat CAN 2.0 -paket
- Steg 19: Mottagarens källkod
- Steg 20: Källkod: Loop (), Skaffa paketet och kontrollera formatet
- Steg 21: Källa: Loop (), kontrollerar om det är ett fjärrpaket
- Steg 22: Källkod: Loop (), begärd eller mottagen datalängd
- Steg 23: Källkod: Loop (), om data tas emot skrivs den ut
- Steg 24: Ladda ner filerna
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-23 15:11
Ett annat ämne som nyligen föreslogs av mina YouTube -kanalers följare var CAN (Controller Area Network) -protokoll, vilket är vad vi kommer att fokusera på idag. Det är viktigt att förklara att CAN är ett samtidigt seriellt kommunikationsprotokoll. Detta innebär att synkroniseringen mellan modulerna som är anslutna till nätverket utförs i förhållande till början av varje meddelande som skickas till bussen. Vi börjar med att introducera de grundläggande begreppen i CAN -protokollet och utför en enkel montering med två ESP32.
I vår krets kan ESP: erna fungera som både Master och Slave. Du kan ha flera mikrokontroller som sänder samtidigt, eftersom CAN hanterar kollisionen av allt automatiskt. Källkoden för detta projekt är superenkel. Kolla in det!
Steg 1: Resurser som används
- Två moduler av ESP WROOM 32 NodeMcu
- Två CAN -mottagare från WaveShare
- Tröjor för anslutningar
- Logisk analysator för fångst
- Tre USB -kablar för ESP och analysator
- 10 meter tvinnat par för att fungera som en buss
Steg 2: CAN (Controller Area Network)
- Det utvecklades av Robert Bosch GmbH på 1980 -talet för att tjäna bilindustrin.
- Den har blivit utbredd genom åren på grund av dess robusthet och flexibilitet i genomförandet. Det används med militär utrustning, jordbruksmaskiner, industri- och byggautomation, robotik och medicinsk utrustning.
Steg 3: CAN - funktioner
- Två-trådig seriell kommunikation
- Högst 8 byte användbar information per ram, med fragmentering möjlig
- Adress riktad till meddelandet och inte till noden
- Tilldela meddelanden prioritet och vidarebefordran av "väntande" meddelanden
- Effektiv förmåga att upptäcka och signalera fel
- Multi-master-kapacitet (alla noder kan begära bussåtkomst)
- Multicast -kapacitet (ett meddelande för flera mottagare samtidigt)
- Överföringshastigheter på upp till 1 Mbit / s på en 40-metersbuss (sänkning av hastigheten med ökad skenlängd)
- Flexibilitet i konfiguration och introduktion av nya noder (upp till 120 noder per buss)
- Standard hårdvara, låg kostnad och bra tillgänglighet
- Reglerat protokoll: ISO 11898
Steg 4: Krets används
Här har jag sändtagarna. Det finns en på varje sida, och de är anslutna med ett par ledningar. Den ena är ansvarig för att skicka och den andra för att ta emot data.
Steg 5: Transmissionslinjespänningar (differentialdetektering)
I CAN är den dominerande biten Zero.
Linjedifferentialdetektion minskar bruskänsligheten (EFI)
Steg 6: CAN -standarder och ramformat
Standardformat med 11-bitars identifierare
Steg 7: CAN -standarder och ramformat
Utökat format med 29-bitars identifierare
Steg 8: CAN -standarder och ramformat
Det är viktigt att notera att ett protokoll redan beräknar CRC och skickar ACK- och EOF -signaler, vilket är saker som redan görs av CAN -protokollet. Detta garanterar att det skickade meddelandet inte kommer på fel sätt. Detta beror på att om det ger ett problem i CRC (Redundant Cyclic Check eller Redundancy Check), vilket är samma som en informationskontrollsiffra, kommer det att identifieras av CRC.
Steg 9: Fyra typer av ramar (ramar)
Det är viktigt att notera att ett protokoll redan beräknar CRC och skickar ACK- och EOF -signaler, vilket är saker som redan görs av CAN -protokollet. Detta garanterar att det skickade meddelandet inte kommer på fel sätt. Detta beror på att om det ger ett problem i CRC (Redundant Cyclic Check eller Redundancy Check), vilket är samma som en informationskontrollsiffra, kommer det att identifieras av CRC.
Fyra typer av ramar (ramar)
Överföring och mottagning av data i CAN är baserade på fyra typer av ramar. Ramtyperna kommer att identifieras genom variationer i kontrollbitarna eller till och med genom ändringar i ramskrivningsreglerna för varje fall.
- Dataram: Innehåller sändardata för mottagaren / mottagarna
- Fjärrram: Detta är en begäran om data från en av noderna
- Felram: Det är en ram som skickas av någon av noderna vid identifiering av ett fel i bussen och kan detekteras av alla noder
- Överbelastningsram: tjänar till att fördröja trafik på bussen på grund av överbelastning av data eller fördröjning på en eller flera noder.
Steg 10: Krets - Detaljer om anslutningar
Steg 11: Krets - Datafångst
Våglängder erhållna för standard CAN med 11-bitars ID
Steg 12: Krets - Datafångst
Våglängder erhållna för utökad CAN med 29-bitars ID
Steg 13: Krets - Datafångst
Data som erhållits av logikanalysatorn
Steg 14: Arduino Library - CAN
Jag visar här de två alternativen där du kan installera CAN Driver Library
Arduino IDE Library Manager
Steg 15: Github
github.com/sandeepmistry/arduino-CAN
Steg 16: Sändarens källkod
Källkod: Inkluderar och konfigurerar ()
Vi inkluderar CAN -biblioteket, startar serien för felsökning och startar CAN -bussen med 500 kbps.
#include // Inkludera en biblioteca CAN void setup () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println ("Sändare KAN"); // Inicia o barramento KAN 500 kbps om (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}
Steg 17: Källkod: Loop (), Skicka ett standard CAN 2.0 -paket
Med standard CAN 2.0 skickar vi ett paket. 11-bitars ID identifierar meddelandet. Datablocket måste ha upp till 8 byte. Det startar paketet med ID 18 i hexadecimala. Den packar 5 byte och stänger funktionen.
void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o id tem 11 bits e identifiera 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."); fördröjning (1000);
Steg 18: Källkod: Loop (), Skicka ett utökat CAN 2.0 -paket
I detta steg har ID: n 29 bitar. Den börjar skicka 24 bitar ID och, än en gång, packar 5 byte och slutar.
// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits e identifiera 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."); fördröjning (1000); }
Steg 19: Mottagarens källkod
Källkod: Inkluderar och konfigurerar ()
Återigen kommer vi att inkludera CAN -biblioteket, starta serien för att felsöka och starta CAN -bussen med 500 kbps. Om ett fel uppstår kommer detta fel att skrivas ut.
#include // Inkludera en biblioteca CAN void setup () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println ("Receptor CAN"); // Inicia o barramento KAN 500 kbps om (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}
Steg 20: Källkod: Loop (), Skaffa paketet och kontrollera formatet
Vi försökte kontrollera storleken på det mottagna paketet. CAN.parsePacket () -metoden visar mig storleken på detta paket. Så om vi har ett paket, kommer vi att kontrollera om det är förlängt eller inte.
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"); }
Steg 21: Källa: Loop (), kontrollerar om det är ett fjärrpaket
Här kontrollerar vi om det mottagna paketet är en dataförfrågan. I det här fallet finns det inga data.
if (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }
Steg 22: Källkod: Loop (), begärd eller mottagen datalängd
Om det mottagna paketet är en begäran anger vi önskad längd. Vi får sedan Data Length Code (DLC), som anger längden på data. Slutligen anger vi den mottagna längden.
Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); if (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);
Steg 23: Källkod: Loop (), om data tas emot skrivs den ut
Vi skriver ut (på den seriella bildskärmen) data, men bara om det mottagna paketet inte är en begäran.
// 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 (); }}
Steg 24: Ladda ner filerna
INO
Rekommenderad:
Webbplatsstyrd julgran (vem som helst kan kontrollera den): 19 steg (med bilder)
Webbplatsstyrd julgran (vem som helst kan kontrollera den): Vill du veta hur en webbplatsstyrd julgran ser ut? Här är videon som visar mitt projekt av min julgran. Livestreamen har slutat nu, men jag gjorde en video som fångade vad som hände: I år, mitt i Decembe
Pringles kan gitarrförstärkare: 7 steg
Pringles Can Guitar Amp: Ibland vill jag ta elgitarr bara för att spela några riffs utan att behöva ställa in min vanliga förstärkare. Så jag ville skapa en billig, enkel att bygga och mycket enkel gitarrförstärkare: The Pringles Can Amp
DIY -- Hur man gör en spindelrobot som kan styras med hjälp av smartphone med Arduino Uno: 6 steg
DIY || Hur man gör en spindelrobot som kan styras med hjälp av smartphone Använda Arduino Uno: När man gör en spindelrobot kan man lära sig så mycket om robotik. Som att göra robotar är underhållande och utmanande. I den här videon kommer vi att visa dig hur du gör en Spider -robot som vi kan använda med vår smartphone (Androi
LED Snapper: Förmodligen den mest grundläggande delen av testutrustning du kan göra: 3 steg
LED Snapper: Förmodligen den mest grundläggande delen av testutrustning du kan göra: Låt mig presentera LED Snapper för dig. En enkel, men oerhört användbar testutrustning som du kan bygga för att hjälpa dig att felsöka dina elektronikprojekt. LED Snapper är ett kretskort med öppen källkod som låter dig enkelt lägga till
Hur man hämtar musik från NÄSTAN någon (Haha) webbplats (så länge du kan höra det kan du få det Ok fint om det är inbäddat i Flash kanske du inte kan) REDIGERA !!!!! Tillagd info:
Hur man hämtar musik från NÄSTAN någon (Haha) webbplats (så länge du kan höra det kan du få det … Ok fint om det är inbäddat i Flash kanske du inte kan) REDIGERA !!!!! Tillagd info: om du någonsin går till en webbplats och den spelar en låt som du gillar och vill ha den, så här är instruktionen för mig, inte mitt fel om du förstör något (enda sättet det kommer att hända är om du börjar ta bort saker utan anledning ) Jag har kunnat få musik för