Përmbajtje:

Protokolli CAN - Po, Ne Mundemi !: 24 hapa
Protokolli CAN - Po, Ne Mundemi !: 24 hapa

Video: Protokolli CAN - Po, Ne Mundemi !: 24 hapa

Video: Protokolli CAN - Po, Ne Mundemi !: 24 hapa
Video: Женщина подала на развод сразу после того, как увидела это фото... 2024, Korrik
Anonim
Image
Image
Burimet e Përdorura
Burimet e Përdorura

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)

CAN (Rrjeti i Zonës së Kontrolluesit)
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

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

Qarku i përdorur
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)

Tensionet e Linjës së Transmetimit (Zbulimi Diferencial)
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

Formati i Standardeve dhe Kornizave CAN
Formati i Standardeve dhe Kornizave CAN

Format standard me identifikues 11-bit

Hapi 7: Formati i standardeve dhe kornizave CAN

Formati i Standardeve dhe Kornizave CAN
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)

Katër lloje të kornizave (kornizave)
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

Qarku - Detajet e Lidhjeve
Qarku - Detajet e Lidhjeve

Hapi 11: Qarku - Kapja e të dhënave

Qarku - Kapja e të dhënave
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

Qarku - Kapja e të dhënave
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

Qarku - Kapja e të dhënave
Qarku - Kapja e të dhënave

Të dhënat e marra nga analizatori logjik

Hapi 14: Biblioteka Arduino - MUND

Biblioteka Arduino - MUND
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
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

PDF

INO

Recommended: