Innehållsförteckning:

CAN -protokoll - Ja, vi kan !: 24 steg
CAN -protokoll - Ja, vi kan !: 24 steg

Video: CAN -protokoll - Ja, vi kan !: 24 steg

Video: CAN -protokoll - Ja, vi kan !: 24 steg
Video: Женщина подала на развод сразу после того, как увидела это фото... 2024, Juli
Anonim
Image
Image
Resurser som används
Resurser som används

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)

CAN (Controller Area Network)
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

CAN - funktioner
CAN - funktioner
CAN - funktioner
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

Krets används
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)

Transmissionslinjespänningar (differensdetektering)
Transmissionslinjespänningar (differensdetektering)

I CAN är den dominerande biten Zero.

Linjedifferentialdetektion minskar bruskänsligheten (EFI)

Steg 6: CAN -standarder och ramformat

CAN -standarder och ramformat
CAN -standarder och ramformat

Standardformat med 11-bitars identifierare

Steg 7: CAN -standarder och ramformat

CAN -standarder och ramformat
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)

Fyra typer av ramar (ramar)
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

Krets - Detaljer om anslutningar
Krets - Detaljer om anslutningar

Steg 11: Krets - Datafångst

Krets - Datainsamling
Krets - Datainsamling

Våglängder erhållna för standard CAN med 11-bitars ID

Steg 12: Krets - Datafångst

Krets - Datainsamling
Krets - Datainsamling

Våglängder erhållna för utökad CAN med 29-bitars ID

Steg 13: Krets - Datafångst

Krets - Datainsamling
Krets - Datainsamling

Data som erhållits av logikanalysatorn

Steg 14: Arduino Library - CAN

Arduino bibliotek - CAN
Arduino bibliotek - CAN

Jag visar här de två alternativen där du kan installera CAN Driver Library

Arduino IDE Library Manager

Steg 15: Github

Github
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

PDF

INO

Rekommenderad: