Sisällysluettelo:

CAN -protokolla - Kyllä, voimme !: 24 vaihetta
CAN -protokolla - Kyllä, voimme !: 24 vaihetta

Video: CAN -protokolla - Kyllä, voimme !: 24 vaihetta

Video: CAN -protokolla - Kyllä, voimme !: 24 vaihetta
Video: Тест каравана в -25° . Ночёвка зимой. Как не замёрзнуть? 2024, Marraskuu
Anonim
Image
Image
Käytetyt resurssit
Käytetyt resurssit

Toinen YouTube -kanavani seuraajien ehdottama aihe oli CAN (Controller Area Network) -protokolla, johon keskitymme tänään. On tärkeää selittää, että CAN on samanaikainen sarjaliikenneprotokolla. Tämä tarkoittaa, että verkkoon kytkettyjen moduulien välinen synkronointi suoritetaan suhteessa jokaisen väylälle lähetetyn viestin alkuun. Aloitamme esittelemällä CAN -protokollan peruskäsitteet ja suoritamme yksinkertaisen kokoonpanon kahdella ESP32: lla.

Piirissämme ESP: t voivat toimia sekä isäntänä että orjana. Voit lähettää useita mikro -ohjaimia samanaikaisesti, koska CAN käsittelee kaiken törmäyksen automaattisesti. Tämän projektin lähdekoodi on erittäin yksinkertainen. Tarkista se!

Vaihe 1: Käytetyt resurssit

  • Kaksi ESP WROOM 32 NodeMcu -moduulia
  • Kaksi CAN -lähetin -vastaanotinta WaveSharesta
  • Puserot liitoksille
  • Looginen analysaattori sieppaukseen
  • Kolme USB -kaapelia ESP -laitteille ja analysaattorille
  • 10 metriä kierrettyä paria, joka toimii bussina

Vaihe 2: CAN (Controller Area Network)

CAN (Controller Area Network)
CAN (Controller Area Network)
  • Sen kehitti Robert Bosch GmbH 1980 -luvulla palvelemaan autoteollisuutta.
  • Siitä on tullut laajalle levinnyt vuosien varrella sen kestävyyden ja joustavan toteutuksen ansiosta. Sitä käytetään sotilastarvikkeiden, maatalouskoneiden, teollisuus- ja rakennusautomaation, robotiikan ja lääketieteellisten laitteiden kanssa.

Vaihe 3: CAN - Ominaisuudet

CAN - Ominaisuudet
CAN - Ominaisuudet
CAN - Ominaisuudet
CAN - Ominaisuudet
  • Kaksijohtiminen sarjaliikenne
  • Enintään 8 tavua hyödyllistä tietoa kehystä kohti, ja pirstoutuminen on mahdollista
  • Osoite, joka on suunnattu viestiin eikä solmuun
  • Prioriteettien määrittäminen viesteille ja "pidossa olevien" viestien välittäminen
  • Tehokas kyky havaita ja ilmoittaa virheistä
  • Multi-master-ominaisuus (kaikki solmut voivat pyytää väylän käyttöoikeutta)
  • Monilähetysominaisuus (yksi viesti useille vastaanottimille samanaikaisesti)
  • Siirtonopeus jopa 1 Mbit / s 40 metrin väylässä (nopeuden pieneneminen kiskon pituuden kasvaessa)
  • Joustava kokoonpano ja uusien solmujen käyttöönotto (jopa 120 solmua väylää kohti)
  • Vakiovarusteet, edullinen hinta ja hyvä saatavuus
  • Säädetty protokolla: ISO 11898

Vaihe 4: Käytetty piiri

Käytetty piiri
Käytetty piiri

Tässä minulla on lähetinvastaanottimet. Niitä on kummallakin puolella, ja ne on kytketty parilla johdolla. Toinen vastaa tietojen lähettämisestä ja toinen tietojen vastaanottamisesta.

Vaihe 5: Siirtolinjan jännitteet (differentiaalinen tunnistus)

Siirtolinjan jännitteet (differentiaalinen tunnistus)
Siirtolinjan jännitteet (differentiaalinen tunnistus)

CAN: ssa hallitseva bitti on Zero.

Linjan differentiaalitunnistus vähentää kohinaherkkyyttä (EFI)

Vaihe 6: CAN -standardien ja kehysten muoto

CAN -standardit ja -kehykset
CAN -standardit ja -kehykset

Vakiomuoto 11-bittisellä tunnisteella

Vaihe 7: CAN -standardien ja -kehysten muoto

CAN -standardit ja -kehykset
CAN -standardit ja -kehykset

Laajennettu muoto 29-bittisellä tunnisteella

Vaihe 8: CAN -standardien ja -kehysten muoto

On tärkeää huomata, että protokolla laskee jo CRC: n ja lähettää ACK- ja EOF -signaaleja, jotka ovat jo CAN -protokollan tekemiä. Tämä takaa, että lähetetty viesti ei saapu väärään suuntaan. Tämä johtuu siitä, että jos se antaa ongelman CRC: ssä (Redundant Cyclic Check or Redundancy Check), joka on sama kuin tietojen tarkistusnumero, CRC tunnistaa sen.

Vaihe 9: Neljä kehystyyppiä (kehystä)

Neljä kehystyyppiä (kehyksiä)
Neljä kehystyyppiä (kehyksiä)

On tärkeää huomata, että protokolla laskee jo CRC: n ja lähettää ACK- ja EOF -signaaleja, jotka ovat jo CAN -protokollan tekemiä. Tämä takaa, että lähetetty viesti ei saapu väärään suuntaan. Tämä johtuu siitä, että jos se antaa ongelman CRC: ssä (Redundant Cyclic Check or Redundancy Check), joka on sama kuin tietojen tarkistusnumero, CRC tunnistaa sen.

Neljä kehystyyppiä (kehyksiä)

Tietojen siirto ja vastaanotto CANissa perustuu neljään kehystyyppiin. Kehystyypit tunnistetaan ohjausbittien vaihteluilla tai jopa muutoksilla kehyksen kirjoitussäännöissä kussakin tapauksessa.

  • Tietokehys: Sisältää vastaanottimen (lähettäjien) lähettimen tiedot
  • Etäkehys: Tämä on datapyyntö yhdestä solmusta
  • Virhekehys: Se on kehys, jonka mikä tahansa solmu lähettää, kun se tunnistaa väylän virheen, ja se voidaan havaita kaikilla solmuilla
  • Ylikuormituskehys: Toimii väylän liikenteen viivästymiseen tietojen ylikuormituksen tai viiveen vuoksi yhdessä tai useammassa solmussa.

Vaihe 10: Piiri - yhteyksien tiedot

Piiri - Yhteyksien tiedot
Piiri - Yhteyksien tiedot

Vaihe 11: Piiri - tiedonsiirto

Piiri - tiedonsiirto
Piiri - tiedonsiirto

Aallonpituudet, jotka on saatu standardille CAN 11-bittisellä tunnuksella

Vaihe 12: Piiri - tiedonsiirto

Piiri - tiedonsiirto
Piiri - tiedonsiirto

Aallonpituudet, jotka on saatu laajennetulle CAN: lle 29-bittisellä tunnuksella

Vaihe 13: Piiri - tietojen sieppaus

Piiri - tiedonsiirto
Piiri - tiedonsiirto

Logiikka -analysaattorin keräämät tiedot

Vaihe 14: Arduino -kirjasto - CAN

Arduinon kirjasto - CAN
Arduinon kirjasto - CAN

Näytän tässä kaksi vaihtoehtoa, joihin voit asentaa CAN -ohjainkirjaston

Arduino IDE -kirjastonhoitaja

Vaihe 15: Github

Github
Github

github.com/sandeepmistry/arduino-CAN

Vaihe 16: Lähettimen lähdekoodi

Lähdekoodi: Sisältää ja asetukset ()

Sisällytämme CAN -kirjaston, aloitamme sarjan virheenkorjausta varten ja aloitamme CAN -väylän nopeudella 500 kbps.

#include // Sisällytä biblioteca CAN void setup () {Serial.begin (9600); // aloittaa sarjan para debug while (! Serial); Serial.println ("Lähetin CAN"); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}

Vaihe 17: Lähdekoodi: Loop (), standardin CAN 2.0 -paketin lähettäminen

Lähetämme paketin käyttämällä standardia CAN 2.0. 11-bittinen tunnus tunnistaa viestin. Tietolohkossa on oltava enintään 8 tavua. Se aloittaa paketin tunnuksella 18 heksadesimaalina. Se pakkaa 5 tavua ja sulkee toiminnon.

void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o id tem 11 bits e identifa a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em heksadesimaali CAN.write ('h'); // 1º tavu CAN.write ('e'); // 2º tavu CAN.write ('l'); // 3º tavu CAN.write ('l'); // 4º tavu CAN.write ('o'); // 5º tavu CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); viive (1000);

Vaihe 18: Lähdekoodi: Loop (), laajennetun CAN 2.0 -paketin lähettäminen

Tässä vaiheessa tunnuksessa on 29 bittiä. Se alkaa lähettää 24 bittiä tunnusta ja pakkaa jälleen 5 tavua ja lopettaa.

// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits e identifa a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote estendido…"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 desimaali (abcdef em hexa) = 24 bittiä preenchidos até aqui CAN.write ('w'); // 1º tavu CAN.write ('o'); // 2º tavu CAN.write ('r'); // 3º tavu CAN.write ('l'); // 4º tavu CAN.write ('d'); // 5º tavu CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); viive (1000); }

Vaihe 19: Vastaanottimen lähdekoodi

Lähdekoodi: Sisältää ja asetukset ()

Jälleen sisällytetään CAN -kirjasto, aloitetaan sarja debugiksi ja käynnistetään CAN -väylä nopeudella 500 kbps. Jos tapahtuu virhe, tämä virhe tulostetaan.

#include // Sisällytä biblioteca CAN void setup () {Serial.begin (9600); // aloittaa sarjan para debug while (! Serial); Serial.println ("reseptori CAN"); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}

Vaihe 20: Lähdekoodi: Loop (), paketin hankkiminen ja muodon tarkistaminen

Yritimme tarkistaa vastaanotetun paketin koon. CAN.parsePacket () -menetelmä näyttää minulle tämän paketin koon. Joten jos meillä on paketti, tarkistamme, onko se pidennetty vai ei.

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"); }

Vaihe 21: Lähde: Loop (), Tarkista, onko kyseessä etäpaketti

Tässä tarkistamme, onko vastaanotettu paketti datapyyntö. Tässä tapauksessa tietoja ei ole.

if (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }

Vaihe 22: Lähdekoodi: Loop (), Data Length pyydetty tai vastaanotettu

Jos vastaanotettu paketti on pyyntö, ilmoitamme pyydetyn pituuden. Saamme sitten DLC (Data Length Code), joka ilmaisee tietojen pituuden. Lopuksi ilmoitamme vastaanotetun pituuden.

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 tai comprimento recebido Serial.println (packetSize);

Vaihe 23: Lähdekoodi: Silmukka (), Jos dataa vastaanotetaan, se tulostaa

Tulostamme (sarjamonitorilla) tiedot, mutta vain, jos vastaanotettu paketti ei ole pyyntö.

// Imprime os dados somente se o pacote recebido não foi de requisição while (CAN.available ()) {Serial.print ((char) CAN.read ()); } Sarja.println (); } Sarja.println (); }}

Vaihe 24: Lataa tiedostot

PDF

INO

Suositeltava: