
Агуулгын хүснэгт:
- Алхам 1: Ашигласан нөөц
- Алхам 2: CAN (Controller Area Network)
- Алхам 3: CAN - Онцлог шинж чанарууд
- Алхам 4: Ашигласан хэлхээ
- Алхам 5: Дамжуулах шугамын хүчдэл (дифференциал илрүүлэх)
- Алхам 6: CAN стандарт ба хүрээний формат
- Алхам 7: CAN стандарт ба хүрээний формат
- Алхам 8: CAN стандарт ба хүрээний формат
- Алхам 9: Дөрвөн төрлийн хүрээ (хүрээ)
- Алхам 10: Хэлхээ - холболтын дэлгэрэнгүй
- Алхам 11: Хэлхээ - Мэдээлэл авах
- Алхам 12: Хэлхээ - Мэдээлэл авах
- Алхам 13: Хэлхээ - Мэдээлэл авах
- Алхам 14: Arduino номын сан - CAN
- Алхам 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 15:00



Саяхан миний YouTube сувгийн дагалдагчдын санал болгосон өөр нэг сэдэв бол CAN (Controller Area Network) протокол байсан бөгөөд үүнд бид өнөөдөр анхаарлаа хандуулах болно. CAN бол нэгэн зэрэг цуваа холбооны протокол гэдгийг тайлбарлах нь чухал юм. Энэ нь сүлжээнд холбогдсон модулиудын хоорондох синхрончлол нь автобус руу илгээсэн мессеж бүрийн эхэнд хийгддэг гэсэн үг юм. Бид CAN протоколын үндсэн ойлголтуудыг танилцуулж, хоёр ESP32s ашиглан энгийн угсралтыг эхлүүлэх болно.
Манай хэлхээнд ESP нь эзэн ба боолын аль алиных нь үүрэг гүйцэтгэж чаддаг. CAN нь бүх зүйлийн мөргөлдөөнийг автоматаар зохицуулдаг тул та олон микроконтроллерыг нэгэн зэрэг дамжуулж болно. Энэ төслийн эх код нь маш энгийн. Үүнийг үзээрэй!
Алхам 1: Ашигласан нөөц
- ESP WROOM 32 NodeMcu -ийн хоёр модуль
- WaveShare -аас хоёр CAN дамжуулагч
- Холболтын зориулалттай холбогч
- Логик анализатор
- ESP ба анализаторын гурван USB кабель
- 10 метр эрчилсэн хос нь автобусаар үйлчлэх болно
Алхам 2: CAN (Controller Area Network)

- Үүнийг 1980 -аад онд Robert Bosch GmbH автомашины үйлдвэрлэлд зориулан боловсруулсан болно.
- Энэ нь бат бөх, хэрэгжүүлэх уян хатан байдлаас шалтгаалан олон жилийн туршид өргөн тархсан болсон. Үүнийг цэргийн техник, хөдөө аж ахуйн техник, үйлдвэр, барилгын автоматжуулалт, робот техник, эмнэлгийн тоног төхөөрөмжид ашигладаг.
Алхам 3: CAN - Онцлог шинж чанарууд


- Хоёр утастай цуваа холбоо
- Нэг фрэймд хамгийн ихдээ 8 байт мэдээлэл хэрэгтэй бөгөөд үүнийг хэсэгчлэн хуваах боломжтой
- Зурвас руу чиглэсэн хаяг
- Мессежүүдэд тэргүүлэх ач холбогдол өгч, "хүлээгдэж буй" мессежийг дамжуулж байна
- Алдааг илрүүлэх, дохио өгөх үр дүнтэй чадвар
- Олон мастер чадвар (бүх зангилаа нь автобусанд нэвтрэх хүсэлт гаргах боломжтой)
- Олон дамжуулах чадвар (нэгэн зэрэг олон хүлээн авагчийн нэг мессеж)
- 40 метрийн автобусанд 1Mbit / s хүртэлх дамжуулах хурд (автобусны уртыг нэмэгдүүлэх замаар ханшийг бууруулах)
- Тохиргооны уян хатан байдал, шинэ зангилаа нэвтрүүлэх (нэг автобусанд 120 хүртэлх зангилаа)
- Стандарт тоног төхөөрөмж, хямд үнэ, хүртээмж сайтай
- Зохицуулалттай протокол: ISO 11898
Алхам 4: Ашигласан хэлхээ

Энд надад дамжуулагч байна. Тал бүр дээр нэг ширхэг байдаг бөгөөд тэдгээрийг хос утсаар холбодог. Нэг нь илгээх, нөгөө нь мэдээлэл хүлээн авах үүрэгтэй.
Алхам 5: Дамжуулах шугамын хүчдэл (дифференциал илрүүлэх)

CAN хэл дээр давамгайлах бит нь тэг юм.
Шугамын дифференциал илрүүлэлт нь дуу чимээний мэдрэмжийг бууруулдаг (EFI)
Алхам 6: CAN стандарт ба хүрээний формат

11 битийн таних тэмдэг бүхий стандарт формат
Алхам 7: CAN стандарт ба хүрээний формат

29 битийн таних тэмдэг бүхий өргөтгөсөн формат
Алхам 8: CAN стандарт ба хүрээний формат
Протокол нь CRC -ийг аль хэдийн тооцоолж, ACK ба EOF дохиог илгээдэг бөгөөд үүнийг CAN протоколоор аль хэдийн хийдэг болохыг анхаарах нь чухал юм. Энэ нь илгээсэн мессеж буруу замаар ирэхгүй байх баталгаа болно. Учир нь хэрэв энэ нь мэдээллийн шалгах цифртэй ижил хэмжээтэй ХХЗХ (Давхар мөчлөгийн шалгалт эсвэл илүүдэл шалгалт) -д асуудал өгвөл үүнийг ХХЗХ тодорхойлох болно.
Алхам 9: Дөрвөн төрлийн хүрээ (хүрээ)

Протокол нь CRC -ийг аль хэдийн тооцоолж, ACK ба EOF дохиог илгээдэг бөгөөд үүнийг CAN протоколоор аль хэдийн хийдэг болохыг анхаарах нь чухал юм. Энэ нь илгээсэн мессеж буруу замаар ирэхгүй байх баталгаа болно. Учир нь хэрэв энэ нь мэдээллийн шалгах цифртэй ижил хэмжээтэй ХХЗХ (Давхар мөчлөгийн шалгалт эсвэл илүүдэл шалгалт) -д асуудал өгвөл үүнийг ХХЗХ тодорхойлох болно.
Дөрвөн төрлийн хүрээ (хүрээ)
CAN -д өгөгдөл дамжуулах, хүлээн авах нь дөрвөн төрлийн хүрээ дээр суурилдаг. Хүрээний төрлүүдийг хяналтын битүүдийн өөрчлөлт эсвэл тохиолдол бүрийн хүрээ бичих дүрмийн өөрчлөлтөөр тодорхойлно.
- Өгөгдлийн хүрээ: Хүлээн авагчийн дамжуулагчийн өгөгдлийг агуулдаг
- Алсын хүрээ: Энэ нь зангилааны аль нэгнээс өгөгдөл авах хүсэлт юм
- Алдааны хүрээ: Энэ нь автобусны алдааг тодорхойлох үед аль ч зангилаанаас илгээсэн хүрээ бөгөөд үүнийг бүх зангилаа илрүүлж болно.
- Хэт ачааллын хүрээ: Нэг буюу хэд хэдэн зангилааны өгөгдлийн хэт ачаалал эсвэл саатал зэргээс шалтгаалан автобусны хөдөлгөөнийг удаашруулдаг.
Алхам 10: Хэлхээ - холболтын дэлгэрэнгүй

Алхам 11: Хэлхээ - Мэдээлэл авах

11 битийн ID бүхий стандарт CAN-ийн хувьд авсан долгионы уртыг
Алхам 12: Хэлхээ - Мэдээлэл авах

29 битийн ID бүхий CAN-ийг өргөтгөсөн долгионы уртыг олж авсан
Алхам 13: Хэлхээ - Мэдээлэл авах

Логик анализаторын олж авсан өгөгдөл
Алхам 14: Arduino номын сан - CAN

Би CAN драйверын номын санг суулгах хоёр сонголтыг энд харуулав
Arduino IDE номын сангийн менежер
Алхам 15: Github

github.com/sandeepmistry/arduino-CAN
Алхам 16: Дамжуулагчийн эх код
Эх код: оруулах ба тохируулах ()
Бид CAN номын санг багтааж, дибаг хийх цувралыг эхлүүлж, CAN автобусыг 500 kbps дээр эхлүүлнэ.
#include // Inclui a biblioteca CAN тохиргоог хүчингүй болгож болно () {Serial.begin (9600); // inicia нь цуврал para debug байхад (! Цуваа); Serial.println ("дамжуулагч CAN"); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possibel inviar or controlador while (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 mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em арван зургаатын 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 bit e identifica a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 baytes Serial.println ("Enviando pacote estendido…"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 аравтын бутархай (abcdef em hexa) = 24 битийн өмнө 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 кбит / с -ээр эхлүүлнэ. Хэрэв алдаа гарвал энэ алдааг хэвлэх болно.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia нь цуврал para debug байхад (! Цуваа); Serial.println ("Хүлээн авагч CAN"); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possibel inviar or controlador while (1); }}
Алхам 20: Эх код: Loop (), Багцыг авах, форматыг шалгах
Бид хүлээн авсан пакетийн хэмжээг шалгахыг хичээсэн. CAN.parsePacket () арга нь надад энэ багцын хэмжээг харуулдаг. Тиймээс хэрэв бид багцтай бол түүнийг сунгасан эсэхийг бид шалгах болно.
void loop () {// Tent verificar or tamanho do acote recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Энэ нь pacote Serial.println ("Recebido pacote."); if (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }
Алхам 21: Эх сурвалж: Loop (), энэ нь алсын багц мөн эсэхийг шалгах
Энд бид хүлээн авсан пакет нь өгөгдлийн хүсэлт мөн эсэхийг шалгадаг. Энэ тохиолдолд мэдээлэл байхгүй байна.
if (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); if (CAN.packetRtr ()) {// se o pacote recebido é de Requisição, indicamos or complico soicitado Serial.print ("e requsitou o compimento"); Serial.println (CAN.packetDlc ()); // obtem o DLC (Data Length Code, que indica o compimento dos dados)} өөр {Serial.print ("e compimento"); // Aqua somente зааврууд нь 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: Файлуудыг татаж авах
INO
Зөвлөмж болгож буй:
Хөдөлж буй аниматрон нүдтэй Halloween хулуу - Энэхүү хулуу нүдээ эргэлдүүлж чадна!: 10 алхам (зурагтай)

Хөдөлж буй аниматрон нүдтэй Halloween хулуу | Энэхүү хулуу нь нүдээ эргэлдүүлж чадна! Хэт авианы мэдрэгчийн гох зайг зохих утгаар нь тохируулна уу (9 -р алхам), тэгвэл таны хулуу чихэр авахаар зориглосон хүн бүрийг чулуужуулах болно
Бид бол зааварчилгааны бүлэг юм 6 UQD10801 (Robocon1) Малайзын их сургуулийн оюутнууд Tun Hussein Onn (UTHM): Keypad 4x4 ба LCD Arduino: 3 алхам

Бид бол зааварчилгааны бүлэг юм 6 UQD10801 (Robocon1) Universiti оюутан Tun Hussein Onn Malaysia (UTHM): Keypad 4x4 болон LCD Arduino: Товчлуурууд нь хэрэглэгчид танай төсөлтэй харилцах боломжийг олгодог гайхалтай арга юм. Та тэдгээрийг ашиглан цэсийг удирдах, нууц үг оруулах, тоглоом, роботыг удирдах боломжтой. Энэхүү гарын авлагад би Arduino дээр товчлуурыг хэрхэн тохируулахыг танд үзүүлэх болно. Эхлээд би Арду хэрхэн болохыг тайлбарлах болно
Робот зүрх - Та бүтээгдэхүүн хийж чадна !: 7 алхам (зурагтай)

Робот зүрх - Та бүтээгдэхүүн хийж чадна !: Та электрон бараа худалдаж авахдаа нүцгэн ПХБ хэлбэрээр ирэх нь ховор байдаг. Янз бүрийн шалтгаанаар ПХБ нь хаалттай байна. Тиймээс, энэхүү зааварчилгаанд та санаагаа хэрхэн авч, бүтээгдэхүүн болгон хувиргаж болохыг харуулах болно. SMD гагнах нь хэцүү мэт санагдаж болох ч би танд амлаж байна
ESP32 LoRa: Та 6.5 км хүртэл хүрч чадна !: 8 алхам

ESP32 LoRa: Та 6.5 км хүртэл хүрч чадна !: 6.5км! Энэ бол миний ESP32 OLED TTGO LoRa32 -тэй хийсэн дамжуулалтын туршилтын үр дүн байсан бөгөөд өнөөдөр би үүнийг тантай цаашид ярилцах болно. Миний ашиглаж байсан загвар нь муу гэж үздэг антентай байсан тул би өөр антен ашиглахаар шийдсэн
Хүүхдүүд хязгааргүй толь хийж чадна!: 8 алхам (зурагтай)

Хүүхдүүд хязгааргүй толь хийж чадна!: Dream AcadeME бол ашгийн бус боловсролын байгууллага юм. Манай философи нь STEAM (Шинжлэх ухаан, технологи, инженерчлэл, урлаг, математик), байгаль, нийгмийн конструктивизмтай холбогдсон хүүхэд төвтэй сургалтад чиглэгддэг бөгөөд энэ нь хүүхдийг