Përmbajtje:
- Hapi 1: Burimet e përdorura
- Hapi 2: CAN (Rrjeti i Zonës së Kontrolluesit)
- Hapi 3: CAN - Karakteristikat
- Hapi 4: Qarku i përdorur
- Hapi 5: Tensionet e Linjës së Transmetimit (Zbulimi Diferencial)
- Hapi 6: Formati i standardeve dhe kornizave CAN
- Hapi 7: Formati i standardeve dhe kornizave CAN
- Hapi 8: Formati i standardeve dhe kornizave CAN
- Hapi 9: Katër lloje të kornizave (kornizave)
- Hapi 10: Qarku - Detajet e Lidhjeve
- Hapi 11: Qarku - Kapja e të dhënave
- Hapi 12: Qarku - Kapja e të dhënave
- Hapi 13: Qarku - Kapja e të dhënave
- Hapi 14: Biblioteka Arduino - MUND
- Hapi 15: Github
- Hapi 16: Kodi Burues i Transmetuesit
- Hapi 17: Kodi burimor: Loop (), Dërgimi i një Pakete Standarde CAN 2.0
- Hapi 18: Kodi Burimor: Loop (), Dërgimi i një Pakete të Zgjeruar CAN 2.0
- Hapi 19: Kodi Burues i Marrësit
- Hapi 20: Kodi Burimor: Loop (), Marrja e Pakos dhe Kontrollimi i Formatit
- Hapi 21: Burimi: Loop (), kontrollon për të parë nëse është një paketë në distancë
- Hapi 22: Kodi burimor: Loop (), Gjatësia e të dhënave e kërkuar ose e marrë
- Hapi 23: Kodi burimor: Loop (), Nëse të dhënat merren, atëherë shtypen
- Hapi 24: Shkarkoni skedarët
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-23 15:10
Një temë tjetër e sugjeruar kohët e fundit nga ndjekësit e kanalit tim në YouTube ishte protokolli CAN (Controller Area Network), në të cilin do të përqendrohemi sot. Importantshtë e rëndësishme të shpjegohet se CAN është një protokoll komunikimi serik i njëkohshëm. Kjo do të thotë që sinkronizimi midis moduleve të lidhura me rrjetin kryhet në lidhje me fillimin e secilit mesazh të dërguar në autobus. Ne do të fillojmë duke prezantuar konceptet themelore të protokollit CAN dhe do të bëjmë një montim të thjeshtë me dy ESP32.
Në qarkun tonë, ESP -të mund të veprojnë si Master dhe Skllav. Ju mund të keni mikrokontrollues të shumtë që transmetojnë njëkohësisht, sepse CAN merret me përplasjen e gjithçkaje automatikisht. Kodi burimor i këtij projekti është super i thjeshtë. Kontrolloje!
Hapi 1: Burimet e përdorura
- Dy module të ESP WROOM 32 NodeMcu
- Dy transmetues CAN nga WaveShare
- Jumpers për lidhje
- Analizues logjik për kapjen
- Tre kabllo USB për ESP dhe analizues
- 10 metra çift i përdredhur për të shërbyer si autobus
Hapi 2: CAN (Rrjeti i Zonës së Kontrolluesit)
- Ajo u zhvillua nga Robert Bosch GmbH në vitet 1980 për t'i shërbyer industrisë së automobilave.
- Hasshtë bërë e përhapur gjatë viteve për shkak të fuqisë dhe fleksibilitetit të zbatimit. Përdoret me pajisje ushtarake, makineri bujqësore, automatizim industrial dhe ndërtesor, robotikë dhe pajisje mjekësore.
Hapi 3: CAN - Karakteristikat
- Komunikimi serik me dy tela
- Maksimumi 8 bajt informacion të dobishëm për kuadër, me fragmentim të mundshëm
- Adresa e drejtuar tek mesazhi dhe jo tek nyja
- Caktimi i përparësisë mesazheve dhe transmetimi i mesazheve "në pritje"
- Aftësi efektive për të zbuluar dhe sinjalizuar gabimet
- Aftësia multi-master (të gjitha nyjet mund të kërkojnë qasje në autobus)
- Aftësia Multicast (një mesazh për marrës të shumtë në të njëjtën kohë)
- Shkalla e transferimit deri në 1Mbit / s në një autobus 40 metra (ulje e normës me rritjen e gjatësisë së shiritit)
- Fleksibiliteti i konfigurimit dhe futja e nyjeve të reja (deri në 120 nyje për autobus)
- Pajisje standarde, kosto e ulët dhe disponueshmëri e mirë
- Protokolli i rregulluar: ISO 11898
Hapi 4: Qarku i përdorur
Këtu, unë kam Transceivers. Ka një në secilën anë, dhe ato janë të lidhura me një palë tela. Njëri është përgjegjës për dërgimin dhe tjetri për marrjen e të dhënave.
Hapi 5: Tensionet e Linjës së Transmetimit (Zbulimi Diferencial)
Në CAN, biti dominues është Zero.
Zbulimi diferencial i linjës zvogëlon ndjeshmërinë ndaj zhurmës (EFI)
Hapi 6: Formati i standardeve dhe kornizave CAN
Format standard me identifikues 11-bit
Hapi 7: Formati i standardeve dhe kornizave CAN
Format i zgjeruar me identifikues 29-bit
Hapi 8: Formati i standardeve dhe kornizave CAN
Importantshtë e rëndësishme të theksohet se një protokoll tashmë llogarit CRC dhe dërgon sinjale ACK dhe EOF, të cilat janë gjëra që janë bërë tashmë nga protokolli CAN. Kjo garanton që mesazhi i dërguar nuk do të arrijë në rrugën e gabuar. Kjo ndodh sepse nëse jep një problem në CRC (Kontrolli i tepërt ciklik ose kontrolli i tepërt), i cili është i njëjtë me një shifër të kontrollit të informacionit, ai do të identifikohet nga QNRC.
Hapi 9: Katër lloje të kornizave (kornizave)
Importantshtë e rëndësishme të theksohet se një protokoll tashmë llogarit CRC dhe dërgon sinjale ACK dhe EOF, të cilat janë gjëra që janë bërë tashmë nga protokolli CAN. Kjo garanton që mesazhi i dërguar nuk do të arrijë në rrugën e gabuar. Kjo ndodh sepse nëse jep një problem në CRC (Kontrolli i tepërt ciklik ose kontrolli i tepërt), i cili është i njëjtë me një shifër të kontrollit të informacionit, ai do të identifikohet nga KDF -ja.
Katër lloje të kornizave (kornizave)
Transmetimi dhe marrja e të dhënave në CAN bazohen në katër lloje të kornizave. Llojet e kornizave do të identifikohen nga ndryshimet në bitët e kontrollit apo edhe nga ndryshimet në rregullat e shkrimit të kornizës për secilin rast.
- Korniza e të dhënave: Përmban të dhënat e transmetuesit për marrësin (et)
- Korniza në distancë: Kjo është një kërkesë për të dhëna nga një prej nyjeve
- Korniza e Gabimit: shtë një kornizë e dërguar nga ndonjë prej nyjeve kur identifikon një gabim në bus dhe mund të zbulohet nga të gjitha nyjet
- Korniza e mbingarkesës: Shërben për të vonuar trafikun në autobus për shkak të mbingarkesës së të dhënave ose vonesës në një ose më shumë nyje.
Hapi 10: Qarku - Detajet e Lidhjeve
Hapi 11: Qarku - Kapja e të dhënave
Gjatësia e valës e marrë për CAN standard me ID 11-bit
Hapi 12: Qarku - Kapja e të dhënave
Gjatësia e valës e marrë për CAN të zgjeruar me ID 29-bit
Hapi 13: Qarku - Kapja e të dhënave
Të dhënat e marra nga analizatori logjik
Hapi 14: Biblioteka Arduino - MUND
Unë tregoj këtu dy opsionet ku mund të instaloni Bibliotekën CAN Driver
Menaxheri i Bibliotekës Arduino IDE
Hapi 15: Github
github.com/sandeepmistry/arduino-CAN
Hapi 16: Kodi Burues i Transmetuesit
Kodi Burim: Përfshin dhe Konfiguro ()
Ne do të përfshijmë bibliotekën CAN, do të fillojmë serialin për korrigjim dhe do të fillojmë autobusin CAN me 500 kbps.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia një serial para debug ndërsa (! Serial); Serial.println ("Transmetuesi CAN"); // Inicia o barramento CAN a 500 kbps nëse (! CAN.filloj (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // rasti nuk ka mundësi të kontrollojë kur (1); }}
Hapi 17: Kodi burimor: Loop (), Dërgimi i një Pakete Standarde CAN 2.0
Duke përdorur standardin CAN 2.0, ne dërgojmë një paketë. ID-ja 11-bit identifikon mesazhin. Blloku i të dhënave duhet të ketë deri në 8 bajt. Fillon paketën me ID 18 në heksadecimal. Paketon 5 bajt dhe mbyll funksionin.
void loop () {// Usando o CAN 2.0 padrão // 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 heksadecimal CAN.vrite ('h'); // 1º bajt CAN.vrite ('e'); // 2º bajt CAN.shkruaj ('l'); // 3º bajt CAN.shkruaj ('l'); // 4º bajt CAN.vrite ('o'); // 5º bajt CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); vonesa (1000);
Hapi 18: Kodi Burimor: Loop (), Dërgimi i një Pakete të Zgjeruar CAN 2.0
Në këtë hap, ID ka 29 bit. Fillon të dërgojë 24 bit ID dhe, edhe një herë, paketon 5 byte dhe del.
// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bit dhe identical a mensagem (prioridade, evento) // o bloco de dados të mundësojë 8 bytes Serial.println ("Enviando pacote estendido…"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 dhjetore (abcdef em hexa) = 24 bit preenchidos até aqui CAN.write ('w'); // 1º bajt CAN.vrite ('o'); // 2º bajt CAN.shkruaj ('r'); // 3º bajt CAN.shkruaj ('l'); // 4º byte CAN.write ('d'); // 5º bajt CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); vonesa (1000); }
Hapi 19: Kodi Burues i Marrësit
Kodi Burim: Përfshin dhe Konfiguro ()
Përsëri, ne do të përfshijmë bibliotekën CAN, do të fillojmë serialin për të debuguar dhe do të fillojmë autobusin CAN me 500 kbps. Nëse ndodh një gabim, ky gabim do të printohet.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia një serial para debug ndërsa (! Serial); Serial.println ("Receptor CAN"); // Inicia o barramento CAN a 500 kbps nëse (! CAN.filloj (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // rasti nuk ka mundësi të kontrollojë kur (1); }}
Hapi 20: Kodi Burimor: Loop (), Marrja e Pakos dhe Kontrollimi i Formatit
Ne u përpoqëm të kontrollonim madhësinë e paketës së marrë. Metoda CAN.parsePacket () më tregon madhësinë e kësaj pakete. Pra, nëse kemi një paketë, do të kontrollojmë nëse është zgjatur apo jo.
void loop () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote."); nëse (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }
Hapi 21: Burimi: Loop (), kontrollon për të parë nëse është një paketë në distancë
Këtu, ne kontrollojmë nëse paketa e marrë është një kërkesë për të dhëna. Në këtë rast, nuk ka të dhëna.
nëse (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }
Hapi 22: Kodi burimor: Loop (), Gjatësia e të dhënave e kërkuar ose e marrë
Nëse paketa e marrë është një kërkesë, ne tregojmë gjatësinë e kërkuar. Ne pastaj marrim Kodin e Gjatësisë së të Dhënave (DLC), i cili tregon gjatësinë e të dhënave. Së fundi, ne tregojmë gjatësinë e marrë.
Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); nëse (CAN.packetRtr ()) {// se o pacote recebido é de requisição, indicamos o comprimento solicitado Serial.print ("e requsitou o comprimento"); Serial.println (CAN.packetDlc ()); // merr një DLC (Kodi i Gjatësisë së të Dhënave, i cili tregon indikacionet e dhëna)} tjetër {Serial.print ("e comprimento"); // aqui somente indica o comprimento Recebido Serial.println (packetSize);
Hapi 23: Kodi burimor: Loop (), Nëse të dhënat merren, atëherë shtypen
Ne printojmë (në monitorin serik) të dhënat, por vetëm nëse paketa e marrë nuk është kërkesë.
// 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 (); }}
Hapi 24: Shkarkoni skedarët
INO
Recommended:
Pringles Can Guitar Amp: 7 hapa
Pringles Can Guitar Amp: Ndonjëherë dua të marr kitarën elektrike vetëm për të luajtur disa rifa pa pasur nevojë të krijoj amplifikatorin tim të rregullt. Kështu që unë doja të krijoja një amplifikues të lirë, të lehtë për t'u ndërtuar dhe shumë të thjeshtë të kitarës: The Pringles Can Amp
Takometri/Matësi i Skanimit duke përdorur Arduino, OBD2 dhe CAN Bus: 8 hapa
Takometri/Matësi i Skanimit duke përdorur Arduino, OBD2 dhe CAN Bus: Çdo pronar i Toyota Prius (ose automjeteve të tjera hibride/speciale) do ta dijë se në pultit të tyre mund të mungojnë disa numra! Prius im nuk ka RPM të motorit ose matës të temperaturës. Nëse jeni një djalë i performancës, mund të dëshironi të dini gjëra të tilla si avancimi i kohës dhe
Nextion Display - Ndërfaqja dhe Protokolli i Shpjeguar Me PIC dhe Arduino: 10 Hapa
Nextion Display | Ndërfaqja dhe Protokolli i Shpjeguar Me PIC dhe Arduino: Ekrani Nextion është shumë i lehtë për t’u përdorur dhe ndërfaqe e lehtë me mikrokontrolluesit. Me ndihmën e redaktorit Nextion ne mund të konfigurojmë ekranin dhe mund të krijojmë UI në ekran. Pra, bazuar në ngjarjet ose komandat Ekrani i ardhshëm do të veprojë për të shfaqur
Tabela e Njoftimeve Dixhitale duke përdorur Raspberry Pi dhe MQTT Protokolli: 8 hapa
Tabela e Njoftimeve Dixhitale duke përdorur Raspberry Pi dhe MQTT Protocol: Tabelat e Njoftimeve përdoren pothuajse kudo, të tilla si zyra, shkolla, spitale dhe hotele. Ato mund të përdoren pa pushim për të shfaqur njoftime të rëndësishme ose për të reklamuar ngjarje ose takime të ardhshme. Por njoftimi ose reklamat duhet të jenë parësore
Reverse Engineering Ritter 8341C Protokolli për ESP3866: 5 Hapa
Protokolli Reverse Engineering Ritter 8341C për ESP3866: Përshëndetje @të gjithëve. Për automatizimin tim të vogël të shtëpisë unë përdor bazat kryesore të kontrolluara 433 MHz. Unë posedoj 3 grupe me çelsin DIP për të rregulluar adresën. Këta punonin mirë. Por disa kohë (një ose dy vjet) më parë, bleva një sërë prizash nga " ritter & quo