
Բովանդակություն:
- Քայլ 1: Օգտագործված ռեսուրսներ
- Քայլ 2: CAN (վերահսկիչ տարածքային ցանց)
- Քայլ 3. ԿԱՐՈ - - Առանձնահատկություններ
- Քայլ 4: Օգտագործված միացում
- Քայլ 5. Հաղորդման գծի լարման (դիֆերենցիալ հայտնաբերում)
- Քայլ 6: CAN Ստանդարտների և շրջանակների ձևաչափ
- Քայլ 7: CAN Ստանդարտների և շրջանակների ձևաչափ
- Քայլ 8: CAN Ստանդարտների և շրջանակների ձևաչափ
- Քայլ 9: Շրջանակների չորս տեսակ (շրջանակներ)
- Քայլ 10. Շղթա - Կապերի մանրամասներ
- Քայլ 11. Շղթա - Տվյալների գրավում
- Քայլ 12. Շղթա - Տվյալների գրավում
- Քայլ 13. Շղթա - Տվյալների գրավում
- Քայլ 14: Arduino գրադարան - ԿԱՐՈ Է
- Քայլ 15: Github
- Քայլ 16. Հաղորդիչի աղբյուրի կոդը
- Քայլ 17. Աղբյուրի կոդ ՝ Loop (), ուղարկելով ստանդարտ CAN 2.0 փաթեթ
- Քայլ 18. Աղբյուրի կոդ ՝ Loop (), ուղարկելով ընդլայնված CAN 2.0 փաթեթ
- Քայլ 19: Ստացողի աղբյուրի կոդը
- Քայլ 20. Աղբյուրի կոդ ՝ Loop (), Փաթեթ ստանալը և ձևաչափի ստուգումը
- Քայլ 21. Աղբյուրը ՝ Loop (), ստուգում է ՝ արդյոք դա հեռակա փաթեթ է
- Քայլ 22. Աղբյուրի կոդ ՝ Loop (), Պահանջվող կամ ստացված տվյալների երկարություն
- Քայլ 23. Աղբյուրի կոդ. Loop (), Եթե տվյալները ստացվում են, ապա տպվում են
- Քայլ 24: Ներբեռնեք ֆայլերը
2025 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2025-01-23 14:48



Վերջերս YouTube- ի իմ ալիքի հետևորդների կողմից առաջարկված մեկ այլ թեմա էր CAN (Controller Area Network) արձանագրությունը, որի վրա մենք այսօր կկենտրոնանանք: Կարևոր է բացատրել, որ CAN- ը միաժամանակյա սերիական հաղորդակցության արձանագրություն է: Սա նշանակում է, որ ցանցին միացված մոդուլների միջև համաժամացումը կատարվում է ավտոբուս ուղարկված յուրաքանչյուր հաղորդագրության սկզբի համեմատ: Մենք կսկսենք ներկայացնելով CAN արձանագրության հիմնական հասկացությունները և կկատարենք պարզ հավաքում երկու ESP32- ով:
Մեր շրջագծում ESP- ները կարող են հանդես գալ և որպես Վարպետ, և որպես Ստրուկ: Կարող եք ունենալ մի քանի միկրոկոնտրոլեր, որոնք միաժամանակ փոխանցում են, քանի որ CAN- ը ինքնաբերաբար զբաղվում է ամեն ինչի բախմամբ: Այս նախագծի աղբյուրի կոդը չափազանց պարզ է: Ստուգեք այն:
Քայլ 1: Օգտագործված ռեսուրսներ
- Երկու մոդուլ ESP WROOM 32 NodeMcu
- Երկու CAN հաղորդիչ WaveShare- ից
- Թռիչքներ միացումների համար
- Տրամաբանական անալիզատոր գրավման համար
- Երեք USB մալուխ ESP- ների և անալիզատորի համար
- 10 մետր ոլորված զույգ ՝ որպես ավտոբուս ծառայելու համար
Քայլ 2: CAN (վերահսկիչ տարածքային ցանց)

- Այն մշակվել է Robert Bosch GmbH- ի կողմից 1980 -ականներին `ծառայելու ավտոմոբիլային արդյունաբերությանը:
- Տարիների ընթացքում այն լայն տարածում է գտել իր հզորության և իրականացման ճկունության շնորհիվ: Այն օգտագործվում է ռազմական տեխնիկայի, գյուղտեխնիկայի, արդյունաբերական և շինարարական ավտոմատացման, ռոբոտաշինության և բժշկական սարքավորումների հետ:
Քայլ 3. ԿԱՐՈ - - Առանձնահատկություններ


- Երկալար սերիական հաղորդակցություն
- Առավելագույնը 8 բայթ օգտակար տեղեկատվություն մեկ շրջանակի համար, հնարավոր է մասնատում
- Հասցեն ուղղված է հաղորդագրությանը և ոչ թե հանգույցին
- Հաղորդագրություններին առաջնահերթություն տալը և «սպասման մեջ» հաղորդագրությունների փոխանցումը
- Սխալները հայտնաբերելու և ազդանշան տալու արդյունավետ ունակություն
- Multi-master ունակություն (բոլոր հանգույցները կարող են պահանջել ավտոբուսի մուտք)
- Multicast ունակություն (մեկ հաղորդագրություն միաժամանակ մի քանի ընդունիչների համար)
- 40 մետր երկարությամբ ավտոբուսում մինչև 1 Մբիթ / վրկ փոխանցման արագություն (փոխադրամիջոցի արագության իջեցում `ավտոբուսի երկարության բարձրացման հետ մեկտեղ)
- Նոր հանգույցների կազմաձևման և ներդրման ճկունություն (մինչև 120 հանգույց մեկ ավտոբուսի համար)
- Ստանդարտ սարքավորում, ցածր գին և լավ առկայություն
- Կարգավորվող արձանագրություն ՝ ISO 11898
Քայլ 4: Օգտագործված միացում

Ահա, ես ունեմ Փոխարկիչներ: Յուրաքանչյուր կողմում կա մեկը, և դրանք միացված են զույգ լարերով: Մեկը պատասխանատու է ուղարկելու, իսկ մյուսը ՝ տվյալների ստացման համար:
Քայլ 5. Հաղորդման գծի լարման (դիֆերենցիալ հայտնաբերում)

CAN- ում գերիշխող բիթը eroրո է:
Գծի դիֆերենցիալ հայտնաբերումը նվազեցնում է աղմուկի զգայունությունը (EFI)
Քայլ 6: CAN Ստանդարտների և շրջանակների ձևաչափ

Ստանդարտ ձևաչափ ՝ 11 բիթանոց նույնացուցիչով
Քայլ 7: CAN Ստանդարտների և շրջանակների ձևաչափ

Ընդլայնված ձևաչափ ՝ 29 բիթանոց նույնացուցիչով
Քայլ 8: CAN Ստանդարտների և շրջանակների ձևաչափ
Կարևոր է նշել, որ արձանագրությունն արդեն հաշվարկում է CRC- ն և ուղարկում ACK և EOF ազդանշաններ, որոնք բաներ են, որոնք արդեն արված են CAN արձանագրության կողմից: Սա երաշխավորում է, որ ուղարկված հաղորդագրությունը սխալ ճանապարհով չի հասնի: Դա պայմանավորված է նրանով, որ եթե դա խնդիր է տալիս CRC- ում (Redundant Cyclic Check or Redundancy Check), որը նույնն է, ինչ տեղեկատվական ստուգիչ թվանշանը, այն նույնականացվելու է CRC- ի կողմից:
Քայլ 9: Շրջանակների չորս տեսակ (շրջանակներ)

Կարևոր է նշել, որ արձանագրությունն արդեն հաշվարկում է CRC- ն և ուղարկում ACK և EOF ազդանշաններ, որոնք բաներ են, որոնք արդեն արված են CAN արձանագրության կողմից: Սա երաշխավորում է, որ ուղարկված հաղորդագրությունը սխալ ճանապարհով չի հասնի: Դա պայմանավորված է նրանով, որ եթե դա խնդիր է տալիս CRC- ում (Redundant Cyclic Check or Redundancy Check), որը նույնն է, ինչ տեղեկատվական ստուգիչ թվանշանը, այն նույնականացվելու է CRC- ի կողմից:
Չորս տեսակի շրջանակներ (շրջանակներ)
CAN- ում տվյալների փոխանցումը և ընդունումը հիմնված են չորս տեսակի շրջանակների վրա: Շրջանակի տեսակները կբնորոշվեն `հսկիչ բիթերի տատանումներով կամ նույնիսկ յուրաքանչյուր դեպքի համար շրջանակի գրման կանոնների փոփոխությամբ:
- Տվյալների շրջանակ. Պարունակում է ստացողի (ներ) ի հաղորդիչի տվյալները
- Հեռակա շրջանակ. Սա հանգույցներից մեկից տվյալների խնդրանք է
- Սխալների շրջանակ. Այն շրջանակ է, որն ուղարկվում է ցանկացած հանգույցի կողմից ՝ ավտոբուսում սխալ հայտնաբերելիս և կարող է հայտնաբերվել բոլոր հանգույցների կողմից
- Overանրաբեռնվածության շրջանակ. Այն ծառայում է ավտոբուսում երթևեկը հետաձգելու համար `տվյալների ծանրաբեռնվածության կամ մեկ կամ մի քանի հանգույցների հետաձգման պատճառով:
Քայլ 10. Շղթա - Կապերի մանրամասներ

Քայլ 11. Շղթա - Տվյալների գրավում

Ալիքի երկարություններ, որոնք ստացվել են ստանդարտ CAN- ի համար `11 բիթանոց ID- ով
Քայլ 12. Շղթա - Տվյալների գրավում

29-բիթանոց ID- ով երկարացված CAN- ի համար ստացված ալիքի երկարություններ
Քայլ 13. Շղթա - Տվյալների գրավում

Տրամաբանական անալիզատորի կողմից ստացված տվյալները
Քայլ 14: Arduino գրադարան - ԿԱՐՈ Է

Ես այստեղ ցույց եմ տալիս երկու տարբերակ, որտեղ կարող եք տեղադրել CAN վարորդների գրադարանը
Arduino IDE գրադարանի կառավարիչ
Քայլ 15: Github

github.com/sandeepmistry/arduino-CAN
Քայլ 16. Հաղորդիչի աղբյուրի կոդը
Աղբյուրի ծածկագիր. Ներառում և կարգավորում ()
Մենք կներառենք CAN գրադարանը, կսկսենք վրիպազերծման սերիան և կսկսենք CAN ավտոբուսը 500 կբիթ / վ արագությամբ:
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println («Հաղորդիչը կարող է»); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // քանի որ հնարավոր է վերահսկել, երբ (1); }}
Քայլ 17. Աղբյուրի կոդ ՝ Loop (), ուղարկելով ստանդարտ CAN 2.0 փաթեթ
Օգտագործելով ստանդարտ CAN 2.0 ՝ մենք փաթեթ ենք ուղարկում: 11-բիթանոց ID- ն նույնականացնում է հաղորդագրությունը: Տվյալների բլոկը պետք է ունենա մինչև 8 բայթ: Այն փաթեթը սկսում է ID 18 -ով տասնվեցական թվով: Այն փաթեթավորում է 5 բայթ և փակում գործառույթը:
void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o id tem 11 bits e identifica a menagagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote … »); CAN.beginPacket (0x12); // id 18 em hexadecimal CAN.write ('h'); // 1º բայթ CAN.write ('e'); // 2º բայթ CAN.write ('l'); // 3º բայթ CAN.write ('l'); // 4º բայթ CAN.write ('o'); // 5º բայթ CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado"); ուշացում (1000);
Քայլ 18. Աղբյուրի կոդ ՝ Loop (), ուղարկելով ընդլայնված CAN 2.0 փաթեթ
Այս քայլում ID- ն ունի 29 բիթ: Այն սկսում է ուղարկել 24 բիթ ID և կրկին փաթեթավորում է 5 բայթ և դուրս է գալիս:
// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits e identicala a menagemem (prioridade, evento) // o bloco de dados deve possuir até 8 at bytes Serial.println ("Enviando pacote estendido …"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 տասնորդական (abcdef em hexa) = 24 բիթ preenchidos até aqui CAN.write ('w'); // 1º բայթ CAN.write ('o'); // 2º բայթ CAN.write ('r'); // 3º բայթ CAN.write ('l'); // 4º բայթ CAN.write ('d'); // 5º բայթ CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado"); ուշացում (1000); }
Քայլ 19: Ստացողի աղբյուրի կոդը
Աղբյուրի ծածկագիր. Ներառում և կարգավորում ()
Կրկին, մենք կներառենք CAN գրադարանը, կսկսենք կարգաբերման կարգը և կսկսենք CAN ավտոբուսը 500 կբիթ / վ արագությամբ: Եթե սխալ տեղի ունենա, այս սխալը տպագրվելու է:
#ներառել // Ներառել գրադարան CAN void setup () {Serial.begin (9600); // inicia a serial para debug while (! Serial); Serial.println («Ռեցեպտորը կարող է»); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // երբ դուք կարող եք վերահսկել կամ վերահսկել (1); }}
Քայլ 20. Աղբյուրի կոդ ՝ Loop (), Փաթեթ ստանալը և ձևաչափի ստուգումը
Մենք փորձեցինք ստուգել ստացված փաթեթի չափը: CAN.parsePacket () մեթոդը ցույց է տալիս ինձ այս փաթեթի չափը: Այսպիսով, եթե մենք ունենք փաթեթ, մենք կստուգենք ՝ այն երկարաձգվա՞ծ է, թե՞ ոչ:
void loop () {// Tenta verificar o tamanho do acote Recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Se temos um pacote Serial.println («Recebido pacote»); եթե (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }
Քայլ 21. Աղբյուրը ՝ Loop (), ստուգում է ՝ արդյոք դա հեռակա փաթեթ է
Այստեղ մենք ստուգում ենք, արդյոք ստացված փաթեթը տվյալների հարցում է: Այս դեպքում տվյալներ չկան:
եթե (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }
Քայլ 22. Աղբյուրի կոդ ՝ Loop (), Պահանջվող կամ ստացված տվյալների երկարություն
Եթե ստացված փաթեթը խնդրանք է, մենք նշում ենք պահանջվող երկարությունը: Այնուհետև մենք ստանում ենք Տվյալների երկարության ծածկագիր (DLC), որը ցույց է տալիս տվյալների երկարությունը: Ի վերջո, մենք նշում ենք ստացված երկարությունը:
Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); եթե (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 o comprimento Recebido Serial.println (packetSize);
Քայլ 23. Աղբյուրի կոդ. Loop (), Եթե տվյալները ստացվում են, ապա տպվում են
Մենք տպում ենք (սերիական մոնիտորի վրա) տվյալները, բայց միայն այն դեպքում, երբ ստացված փաթեթը խնդրանք չէ:
// 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 (); }}
Քայլ 24: Ներբեռնեք ֆայլերը
ԻՆՈ
Խորհուրդ ենք տալիս:
Հաջորդի ցուցադրում - Ինտերֆեյս և արձանագրություն բացատրված PIC- ով և Arduino- ով. 10 քայլ

Հաջորդի ցուցադրում | Ինտերֆեյսը և արձանագրությունը բացատրվում են PIC- ով և Arduino- ով. կգործի ցուցադրելու համար
Այո/Ոչ, կոճակով վերահսկվող LCD: 4 քայլ

Այո/Ոչ կոճակով վերահսկվող LCD. Այս նախագիծը «Բարև աշխարհ» -ի համադրություն է: նախագիծը Arduino կայքում (https://www.arduino.cc/hy/Tutorial/HelloWorld) և " Ստեղնաշարի և մկնիկի կառավարման " նախագիծը Arduino կայքում (https://www.arduino.cc/hy/Tut
Թվային ծանուցման տախտակ ՝ օգտագործելով Raspberry Pi և MQTT արձանագրություն. 8 քայլ

Թվային ծանուցման տախտակ ՝ օգտագործելով Raspberry Pi և MQTT արձանագրություն. Դրանք կարող են նորից ու նորից օգտագործվել կարևոր ծանուցումներ ցուցադրելու կամ առաջիկա իրադարձությունների կամ հանդիպումների գովազդման համար: Բայց ծանուցումը կամ գովազդը պետք է լինեն հիմնական
Այո - Ոչ. Arduino- ով շարժվող փոստարկղ. 4 քայլ (նկարներով)

Այո - Ոչ. Arduino- ով առաջնորդվող փոստարկղ. Այս նախագծում մենք ձեզ ցույց կտանք, թե ինչպես ձեր փոստարկղը դարձնել ավելի զվարճալի և օգտակար: Այս փոստարկղով, եթե նամակ կա ձեր փոստում, դուք ունեք մի լավ լույս, որը ցույց է տալիս, եթե ունեք փոստ, և կարող եք վերահսկել այս փոստարկղը Bluetooth- ով ավտոմատ կերպով
Ինչպես ստանալ երաժշտություն Գրեթե (ԱՆԿԱԱ Ha (Haha) կայքից (քանի դեռ կարող եք լսել, կարող եք այն ձեռք բերել Լավ, եթե այն տեղադրված է ֆլեշում, հնարավոր է ՝ չկարողանաք) Խմբագրված !!!!

Ինչպես ստանալ երաժշտություն Գրեթե (ԱՆԿԱԱ Ha (Haha) կայքից (քանի դեռ կարող եք լսել, կարող եք այն ձեռք բերել … Լավ, եթե այն տեղադրված է ֆլեշում, հնարավոր է, որ չկարողանաք) Խմբագրվել է !!!!! Ավելացված տեղեկատվություն. Եթե երբևէ այցելում եք որևէ կայք և այն նվագում է այն երգը, որը ձեզ դուր է գալիս և ցանկանում եք, ապա այստեղ ձեզ ուսուցանվում է ոչ իմ մեղքը, եթե ինչ -որ բան խառնեք (միակ ճանապարհը դա կլինի, եթե առանց պատճառի սկսեք ջնջել իրերը ) կարողացել եմ երաժշտություն ստանալ