Sisällysluettelo:
- Vaihe 1: Käytetyt resurssit
- Vaihe 2: CAN (Controller Area Network)
- Vaihe 3: CAN - Ominaisuudet
- Vaihe 4: Käytetty piiri
- Vaihe 5: Siirtolinjan jännitteet (differentiaalinen tunnistus)
- Vaihe 6: CAN -standardien ja kehysten muoto
- Vaihe 7: CAN -standardien ja -kehysten muoto
- Vaihe 8: CAN -standardien ja -kehysten muoto
- Vaihe 9: Neljä kehystyyppiä (kehystä)
- Vaihe 10: Piiri - yhteyksien tiedot
- Vaihe 11: Piiri - tiedonsiirto
- Vaihe 12: Piiri - tiedonsiirto
- Vaihe 13: Piiri - tietojen sieppaus
- Vaihe 14: Arduino -kirjasto - CAN
- Vaihe 15: Github
- Vaihe 16: Lähettimen lähdekoodi
- Vaihe 17: Lähdekoodi: Loop (), standardin CAN 2.0 -paketin lähettäminen
- Vaihe 18: Lähdekoodi: Loop (), laajennetun CAN 2.0 -paketin lähettäminen
- Vaihe 19: Vastaanottimen lähdekoodi
- Vaihe 20: Lähdekoodi: Loop (), paketin hankkiminen ja muodon tarkistaminen
- Vaihe 21: Lähde: Loop (), Tarkista, onko kyseessä etäpaketti
- Vaihe 22: Lähdekoodi: Loop (), Data Length pyydetty tai vastaanotettu
- Vaihe 23: Lähdekoodi: Silmukka (), Jos dataa vastaanotetaan, se tulostaa
- Vaihe 24: Lataa tiedostot
Video: CAN -protokolla - Kyllä, voimme !: 24 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
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)
- 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
- 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
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)
CAN: ssa hallitseva bitti on Zero.
Linjan differentiaalitunnistus vähentää kohinaherkkyyttä (EFI)
Vaihe 6: CAN -standardien ja kehysten muoto
Vakiomuoto 11-bittisellä tunnisteella
Vaihe 7: CAN -standardien ja -kehysten muoto
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ä)
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
Vaihe 11: Piiri - tiedonsiirto
Aallonpituudet, jotka on saatu standardille CAN 11-bittisellä tunnuksella
Vaihe 12: Piiri - tiedonsiirto
Aallonpituudet, jotka on saatu laajennetulle CAN: lle 29-bittisellä tunnuksella
Vaihe 13: Piiri - tietojen sieppaus
Logiikka -analysaattorin keräämät tiedot
Vaihe 14: Arduino -kirjasto - CAN
Näytän tässä kaksi vaihtoehtoa, joihin voit asentaa CAN -ohjainkirjaston
Arduino IDE -kirjastonhoitaja
Vaihe 15: 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
INO
Suositeltava:
Kierroslukumittari/skannausmittari Arduinon, OBD2: n ja CAN -väylän avulla: 8 vaihetta
Kierroslukumittari/skannausmittari Arduinon, OBD2: n ja CAN -väylän avulla: Jokainen Toyota Prius (tai muu hybridi-/erikoisajoneuvo) omistaja tietää, että kojelaudoista saattaa puuttua muutama valitsin! Priusssani ei ole moottorin kierroslukua tai lämpömittaria. Jos olet suorituskyvyn kaveri, saatat haluta tietää asioita, kuten ajoituksen etukäteen ja
Hakkaa autosi Wio -terminaalilla ja CAN -väylällä: 7 vaihetta
Hakata autosi Wio -terminaalin ja CAN -väylän avulla: Jos sinulla on jonkin verran ymmärrystä CAN -väylä- ja Arduino -ohjelmoinnista ja haluat hakata autosi, nämä ohjeet voivat tarjota sinulle ratkaisun. En tiedä, mutta tämä on todella mielenkiintoinen asia
Ohjauspyörän näppäimet autostereo -sovittimeen (CAN -väylä -> Key1): 6 vaihetta
Ohjauspyörän näppäimet autostereo -sovittimeen (CAN -väylä -> Key1): Muutama päivä käytetyn auton ostamisen jälkeen huomasin, että en voi toistaa musiikkia puhelimestani stereon kautta. Vielä turhauttavampaa oli, että autossa oli bluetooth, mutta se salli vain äänipuhelut, ei musiikkia. Siinä oli myös Windows Phonen USB -portti, mutta
Ajoneuvon CAN -väylätietojen purkaminen: 8 vaihetta
Ajoneuvon CAN -väylätietojen purkaminen: Tässä ohjeessa tallennamme auton tai kuorma -auton CAN -väylätiedot ja muunnamme tallennetut CAN -väylätiedot luettavissa oleviksi arvoiksi. Dekoodaamiseen käytämme ilmaista can2sky.com -pilvipalvelua. Voimme tallentaa lokin CAN-USB-sovittimilla, mutta maksamme
STM32 CAN -liitäntä: 7 vaihetta
STM32 CAN -liitäntä: Controller Area Network -väylä tai CAN -väylä on erittäin tehokas kommunikaatioprotokolla sen nopeiden ominaisuuksien, pitkän kantaman luotettavuuden ja kohinanvaimennuksen ansiosta. Näistä syistä CAN -viestinnästä on tullut autoteollisuuden standardi