Агуулгын хүснэгт:

CAN протокол - Тийм ээ, бид чадна !: 24 алхам
CAN протокол - Тийм ээ, бид чадна !: 24 алхам

Видео: CAN протокол - Тийм ээ, бид чадна !: 24 алхам

Видео: CAN протокол - Тийм ээ, бид чадна !: 24 алхам
Видео: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, Долдугаар сарын
Anonim
Image
Image
Ашигласан нөөц
Ашигласан нөөц

Саяхан миний 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)

CAN (Controller Area Network)
CAN (Controller Area Network)
  • Үүнийг 1980 -аад онд Robert Bosch GmbH автомашины үйлдвэрлэлд зориулан боловсруулсан болно.
  • Энэ нь бат бөх, хэрэгжүүлэх уян хатан байдлаас шалтгаалан олон жилийн туршид өргөн тархсан болсон. Үүнийг цэргийн техник, хөдөө аж ахуйн техник, үйлдвэр, барилгын автоматжуулалт, робот техник, эмнэлгийн тоног төхөөрөмжид ашигладаг.

Алхам 3: CAN - Онцлог шинж чанарууд

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

Алхам 4: Ашигласан хэлхээ

Ашигласан хэлхээ
Ашигласан хэлхээ

Энд надад дамжуулагч байна. Тал бүр дээр нэг ширхэг байдаг бөгөөд тэдгээрийг хос утсаар холбодог. Нэг нь илгээх, нөгөө нь мэдээлэл хүлээн авах үүрэгтэй.

Алхам 5: Дамжуулах шугамын хүчдэл (дифференциал илрүүлэх)

Дамжуулах шугамын хүчдэл (дифференциал илрүүлэх)
Дамжуулах шугамын хүчдэл (дифференциал илрүүлэх)

CAN хэл дээр давамгайлах бит нь тэг юм.

Шугамын дифференциал илрүүлэлт нь дуу чимээний мэдрэмжийг бууруулдаг (EFI)

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

CAN стандарт ба хүрээний формат
CAN стандарт ба хүрээний формат

11 битийн таних тэмдэг бүхий стандарт формат

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

CAN стандарт ба хүрээний формат
CAN стандарт ба хүрээний формат

29 битийн таних тэмдэг бүхий өргөтгөсөн формат

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

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

Алхам 9: Дөрвөн төрлийн хүрээ (хүрээ)

Дөрвөн төрлийн хүрээ (хүрээ)
Дөрвөн төрлийн хүрээ (хүрээ)

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

Дөрвөн төрлийн хүрээ (хүрээ)

CAN -д өгөгдөл дамжуулах, хүлээн авах нь дөрвөн төрлийн хүрээ дээр суурилдаг. Хүрээний төрлүүдийг хяналтын битүүдийн өөрчлөлт эсвэл тохиолдол бүрийн хүрээ бичих дүрмийн өөрчлөлтөөр тодорхойлно.

  • Өгөгдлийн хүрээ: Хүлээн авагчийн дамжуулагчийн өгөгдлийг агуулдаг
  • Алсын хүрээ: Энэ нь зангилааны аль нэгнээс өгөгдөл авах хүсэлт юм
  • Алдааны хүрээ: Энэ нь автобусны алдааг тодорхойлох үед аль ч зангилаанаас илгээсэн хүрээ бөгөөд үүнийг бүх зангилаа илрүүлж болно.
  • Хэт ачааллын хүрээ: Нэг буюу хэд хэдэн зангилааны өгөгдлийн хэт ачаалал эсвэл саатал зэргээс шалтгаалан автобусны хөдөлгөөнийг удаашруулдаг.

Алхам 10: Хэлхээ - холболтын дэлгэрэнгүй

Хэлхээ - холболтын дэлгэрэнгүй мэдээлэл
Хэлхээ - холболтын дэлгэрэнгүй мэдээлэл

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

Circuit - Мэдээлэл авах
Circuit - Мэдээлэл авах

11 битийн ID бүхий стандарт CAN-ийн хувьд авсан долгионы уртыг

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

Circuit - Мэдээлэл авах
Circuit - Мэдээлэл авах

29 битийн ID бүхий CAN-ийг өргөтгөсөн долгионы уртыг олж авсан

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

Circuit - Мэдээлэл авах
Circuit - Мэдээлэл авах

Логик анализаторын олж авсан өгөгдөл

Алхам 14: Arduino номын сан - CAN

Arduino номын сан - БОЛНО
Arduino номын сан - БОЛНО

Би CAN драйверын номын санг суулгах хоёр сонголтыг энд харуулав

Arduino IDE номын сангийн менежер

Алхам 15: Github

Github
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: Файлуудыг татаж авах

PDF

INO

Зөвлөмж болгож буй: