
Satura rādītājs:
- 1. darbība. Izmantotie resursi
- 2. darbība: CAN (kontroliera zonas tīkls)
- 3. darbība: CAN - funkcijas
- 4. darbība. Izmantotā ķēde
- 5. solis: pārvades līnijas spriegumi (diferenciālā noteikšana)
- 6. darbība: CAN standartu un rāmju formāts
- 7. solis: CAN standartu un rāmju formāts
- 8. solis: CAN standartu un rāmju formāts
- 9. darbība: četri rāmju veidi (rāmji)
- 10. solis: ķēde - informācija par savienojumiem
- 11. darbība. Ķēde - datu uztveršana
- 12. darbība: ķēde - datu uztveršana
- 13. darbība. Ķēde - datu uztveršana
- 14. darbība: Arduino bibliotēka - CAN
- 15. solis: Github
- 16. darbība: raidītāja avota kods
- 17. darbība. Avota kods: cilpa (), standarta CAN 2.0 paketes nosūtīšana
- 18. darbība. Avota kods: cilpa (), paplašināta CAN 2.0 pakotnes sūtīšana
- 19. darbība: uztvērēja avota kods
- 20. darbība: avota kods: cilpa (), iepakojuma iegūšana un formāta pārbaude
- 21. solis: Avots: cilpa (), pārbauda, vai tas ir attālais iepakojums
- 22. darbība. Avota kods: cilpa (), pieprasīts vai saņemts datu garums
- 23. darbība. Avota kods: cilpa (), ja tiek saņemti dati, tas tiek izdrukāts
- 24. darbība: lejupielādējiet failus
2025 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2025-01-23 14:59



Vēl viena tēma, ko nesen ieteica mana YouTube kanāla sekotāji, bija CAN (Controller Area Network) protokols, uz kuru mēs šodien koncentrēsimies. Ir svarīgi paskaidrot, ka CAN ir vienlaicīgs sērijas sakaru protokols. Tas nozīmē, ka sinhronizācija starp tīklam pievienotajiem moduļiem tiek veikta attiecībā uz katra ziņojuma sākumu, kas nosūtīts uz kopni. Mēs sāksim, iepazīstinot ar CAN protokola pamatjēdzieniem un veiksim vienkāršu montāžu ar diviem ESP32.
Mūsu ķēdē ESP var darboties gan kā galvenais, gan kā palīgs. Vienlaicīgi var pārraidīt vairākus mikrokontrollerus, jo CAN automātiski tiek galā ar visu sadursmi. Šī projekta avota kods ir ļoti vienkāršs. Pārbaudiet to!
1. darbība. Izmantotie resursi
- Divi moduļi ESP WROOM 32 NodeMcu
- Divi CAN raiduztvērēji no WaveShare
- Džemperi savienojumiem
- Loģisks analizators uztveršanai
- Trīs USB kabeļi ESP un analizatoram
- 10 metru vītā pāra kalpošanai kā autobuss
2. darbība: CAN (kontroliera zonas tīkls)

- To izstrādāja Robert Bosch GmbH astoņdesmitajos gados, lai kalpotu autobūves nozarei.
- Tā ir kļuvusi plaši izplatīta gadu gaitā, pateicoties tās stingrībai un ieviešanas elastībai. To izmanto ar militāro aprīkojumu, lauksaimniecības tehniku, rūpniecības un ēku automatizāciju, robotiku un medicīnas aprīkojumu.
3. darbība: CAN - funkcijas


- Divu vadu sērijas sakari
- Maksimāli 8 baiti noderīgas informācijas katrā kadrā, iespējams sadrumstalotība
- Adrese, kas vērsta uz ziņojumu, nevis uz mezglu
- Prioritāšu piešķiršana ziņojumiem un aizturēto ziņojumu pārsūtīšana
- Efektīva spēja atklāt un signalizēt par kļūdām
- Multi-master iespējas (visi mezgli var pieprasīt piekļuvi kopnei)
- Multicast iespēja (viens ziņojums vairākiem uztvērējiem vienlaikus)
- Pārsūtīšanas ātrums līdz 1 Mbit / s 40 metru autobusā (ātruma samazināšana, palielinot kopņu garumu)
- Konfigurācijas elastība un jaunu mezglu ieviešana (līdz 120 mezgliem autobusā)
- Standarta aparatūra, zemas izmaksas un laba pieejamība
- Regulētais protokols: ISO 11898
4. darbība. Izmantotā ķēde

Šeit man ir uztvērēji. Katrā pusē ir viens, un tie ir savienoti ar vadu pāri. Viens ir atbildīgs par datu nosūtīšanu, bet otrs - par datu saņemšanu.
5. solis: pārvades līnijas spriegumi (diferenciālā noteikšana)

CAN dominējošais bits ir nulle.
Līniju diferenciālā noteikšana samazina trokšņa jutību (EFI)
6. darbība: CAN standartu un rāmju formāts

Standarta formāts ar 11 bitu identifikatoru
7. solis: CAN standartu un rāmju formāts

Paplašināts formāts ar 29 bitu identifikatoru
8. solis: CAN standartu un rāmju formāts
Ir svarīgi atzīmēt, ka protokols jau aprēķina CRC un nosūta ACK un EOF signālus, kas ir lietas, ko jau veic CAN protokols. Tas garantē, ka nosūtītais ziņojums nenonāks nepareizā veidā. Tas ir tāpēc, ka, ja tas rada problēmu CRC (liekā cikliskā pārbaude vai dublēšanas pārbaude), kas ir tāds pats kā informācijas pārbaudes cipars, to identificēs CRC.
9. darbība: četri rāmju veidi (rāmji)

Ir svarīgi atzīmēt, ka protokols jau aprēķina CRC un nosūta ACK un EOF signālus, kas ir lietas, ko jau veic CAN protokols. Tas garantē, ka nosūtītais ziņojums nenonāks nepareizā veidā. Tas ir tāpēc, ka, ja tas rada problēmu CRC (liekā cikliskā pārbaude vai dublēšanas pārbaude), kas ir tāds pats kā informācijas pārbaudes cipars, to identificēs CRC.
Četri rāmju veidi (rāmji)
CAN datu pārraide un saņemšana ir balstīta uz četru veidu kadriem. Kadru tipi tiks identificēti pēc vadības bitu izmaiņām vai pat ar izmaiņām kadru rakstīšanas noteikumos katram gadījumam.
- Datu rāmis: satur uztvērēja (-u) raidītāja datus
- Attālais kadrs: Šis ir datu pieprasījums no viena mezgla
- Kļūdas rāmis: tas ir kadrs, ko nosūta kāds no mezgliem, identificējot kopnes kļūdu, un to var atklāt visi mezgli
- Pārslodzes rāmis: kalpo, lai aizkavētu satiksmi autobusā datu pārslodzes vai kavēšanās dēļ vienā vai vairākos mezglos.
10. solis: ķēde - informācija par savienojumiem

11. darbība. Ķēde - datu uztveršana

Viļņu garumi, kas iegūti standarta CAN ar 11 bitu ID
12. darbība: ķēde - datu uztveršana

Viļņu garumi iegūti paplašinātam CAN ar 29 bitu ID
13. darbība. Ķēde - datu uztveršana

Loģikas analizatora iegūtie dati
14. darbība: Arduino bibliotēka - CAN

Šeit es parādīšu divas iespējas, kurās varat instalēt CAN draiveru bibliotēku
Arduino IDE bibliotēkas vadītājs
15. solis: Github

github.com/sandeepmistry/arduino-CAN
16. darbība: raidītāja avota kods
Avota kods: Ietver un iestatīšana ()
Mēs iekļausim CAN bibliotēku, sāksim atkļūdošanas sēriju un sāksim CAN kopni ar ātrumu 500 kbps.
#include // Iekļaut biblioteka CAN void setup () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println ("Pārraide 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); }}
17. darbība. Avota kods: cilpa (), standarta CAN 2.0 paketes nosūtīšana
Izmantojot standarta CAN 2.0, mēs nosūtām paketi. 11 bitu ID identificē ziņojumu. Datu blokam ir jābūt līdz 8 baitiem. Pakete sākas ar ID 18 heksadecimālā formā. Tas iesaiņo 5 baitus un aizver funkciju.
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 baiti Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em heksadecimāls CAN.write ('h'); // 1º baits CAN.write ('e'); // 2º baits CAN.write ('l'); // 3º baits CAN.write ('l'); // 4º baits CAN.write ('o'); // 5º baits CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); kavēšanās (1000);
18. darbība. Avota kods: cilpa (), paplašināta CAN 2.0 pakotnes sūtīšana
Šajā solī ID ir 29 biti. Tas sāk sūtīt 24 bitus ID un, atkal, iepako 5 baitus un aiziet.
// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits e identifica a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 baiti Serial.println ("Enviando pacote estendido…"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 decimāls (abcdef em hexa) = 24 biti preenchidos até aqui CAN.write ('w'); // 1º baits CAN.write ('o'); // 2º baits CAN.write ('r'); // 3º baits CAN.write ('l'); // 4º baits CAN.write ('d'); // 5º baits CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); kavēšanās (1000); }
19. darbība: uztvērēja avota kods
Avota kods: Ietver un iestatīšana ()
Atkal mēs iekļausim CAN bibliotēku, sāksim sērijas atkļūdošanu un sāksim CAN kopni ar ātrumu 500 kbps. Ja rodas kļūda, šī kļūda tiks izdrukāta.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println ("Receptor 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); }}
20. darbība: avota kods: cilpa (), iepakojuma iegūšana un formāta pārbaude
Mēs mēģinājām pārbaudīt saņemtās pakas izmēru. CAN.parsePacket () metode parāda man šīs paketes izmēru. Tātad, ja mums ir pakete, mēs pārbaudīsim, vai tā ir pagarināta vai nē.
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"); }
21. solis: Avots: cilpa (), pārbauda, vai tas ir attālais iepakojums
Šeit mēs pārbaudām, vai saņemtā pakete ir datu pieprasījums. Šajā gadījumā nav datu.
ja (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }
22. darbība. Avota kods: cilpa (), pieprasīts vai saņemts datu garums
Ja saņemtā pakete ir pieprasījums, mēs norādām pieprasīto garumu. Pēc tam mēs iegūstam datu garuma kodu (DLC), kas norāda datu garumu. Visbeidzot, mēs norādām saņemto garumu.
Serial.print ("Pacote com id 0x"); Sērijas nospiedums (CAN.packetId (), HEX); ja (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 (Datu garuma kods, que indica o comprimento dos dados)} else {Serial.print ("e comprimento"); // aqui somente indica o comprimento recebido Serial.println (packetSize);
23. darbība. Avota kods: cilpa (), ja tiek saņemti dati, tas tiek izdrukāts
Mēs drukājam (sērijas monitorā) datus, bet tikai tad, ja saņemtā pakete nav pieprasījums.
// Imprime os dados somente se o pacote recebido não foi de requisição while (CAN.available ()) {Serial.print ((char) CAN.read ()); } Sērijas.println (); } Sērijas.println (); }}
24. darbība: lejupielādējiet failus
ES NĒ
Ieteicams:
Tahometrs/skenēšanas mērītājs, izmantojot Arduino, OBD2 un CAN kopni: 8 soļi

Tahometrs/skenēšanas mērītājs, izmantojot Arduino, OBD2 un CAN autobusu: Jebkurš Toyota Prius (vai cita hibrīda/īpaša transportlīdzekļa) īpašnieks zinās, ka viņu informācijas paneļos var nebūt dažu ciparnīcu! Manam priusam nav motora apgriezienu skaita vai temperatūras mērītāja. Ja esat veiktspējas puisis, iespējams, vēlēsities uzzināt tādas lietas kā laika grafiks un
Uzlauziet automašīnu, izmantojot Wio termināli un CAN autobusu: 7 soļi

Uzlauzt savu automašīnu, izmantojot Wio termināli un CAN autobusu: ja jums ir zināma izpratne par CAN autobusu un Arduino programmēšanu un vēlaties uzlauzt savu automašīnu, tad šīs instrukcijas var sniegt jums risinājumu. Par to, kāpēc vēlaties uzlauzt savu automašīnu, es nezinu, bet šī patiešām ir interesanta lieta
Mēs esam apmācību grupa 6 UQD10801 (Robocon1) studenti no Universiti Tun Hussein Onn Malaizija (UTHM): 4x4 tastatūra un LCD Arduino: 3 soļi

Mēs esam apmācību grupa 6 UQD10801 (Robocon1) Studenti no Universitātes Tun Hussein Onn Malaizija (UTHM): 4x4 tastatūra un LCD Arduino: tastatūras ir lielisks veids, kā ļaut lietotājiem mijiedarboties ar jūsu projektu. Jūs varat tos izmantot, lai pārvietotos izvēlnēs, ievadītu paroles un kontrolētu spēles un robotus. Šajā apmācībā es parādīšu, kā iestatīt tastatūru Arduino. Vispirms es paskaidrošu, kā Ardu
Nextion displejs - Saskarne un protokols, kas izskaidrots ar PIC un Arduino: 10 soļi

Nextion displejs | Saskarne un protokols izskaidrots ar PIC un Arduino: Nextion displejs ir ļoti viegli lietojams un vienkāršs interfeiss ar mikrokontrolleri. Ar Nextion redaktora palīdzību mēs varam konfigurēt displeju un mēs varam noformēt displejā lietotāja saskarni. Tātad, pamatojoties uz notikumiem vai komandām rīkosies, lai parādītu
Reverse Engineering Ritter 8341C protokols ESP3866: 5 soļi

Reverse Engineering Ritter 8341C Protocol for ESP3866: Hi @all. Savai nelielai mājas automatizācijai es izmantoju primārās 433 MHz kontrolētās ligzdas. Man pieder 3 komplekti ar DIP slēdžiem, lai pielāgotu adresi. Šie strādāja labi. Bet pirms kāda laika (viena vai diviem gadiem) no "ritter &quo" es nopirku kontaktligzdu komplektu