Mundarija:

CAN protokoli - Ha, qila olamiz !: 24 qadam
CAN protokoli - Ha, qila olamiz !: 24 qadam

Video: CAN protokoli - Ha, qila olamiz !: 24 qadam

Video: CAN protokoli - Ha, qila olamiz !: 24 qadam
Video: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, Noyabr
Anonim
Image
Image
Ishlatilgan manbalar
Ishlatilgan manbalar

Yaqinda mening YouTube kanalim izdoshlari taklif qilgan yana bir mavzu CAN (Controller Area Network) protokoli edi, biz bugun bunga e'tibor qaratamiz. CAN bir vaqtning o'zida ketma -ket aloqa protokoli ekanligini tushuntirish muhimdir. Bu shuni anglatadiki, tarmoqqa ulangan modullar orasidagi sinxronizatsiya avtobusga yuborilgan har bir xabarning boshiga nisbatan amalga oshiriladi. Biz CAN protokolining asosiy tushunchalarini tanishtirishdan boshlaymiz va ikkita ESP32 bilan oddiy yig'ilishni amalga oshiramiz.

Bizning davrimizda ESPlar xo'jayin va qul vazifasini bajarishi mumkin. Sizda bir vaqtning o'zida bir nechta mikrokontroller uzatilishi mumkin, chunki CAN avtomatik ravishda hamma narsaning to'qnashuvi bilan shug'ullanadi. Loyihaning manba kodi juda oddiy. Tekshirib ko'r!

1 -qadam: Ishlatilgan manbalar

  • ESP WROOM 32 ning ikkita moduli NodeMcu
  • WaveShare -dan ikkita CAN translyatori
  • Ulanish uchun o'tish moslamalari
  • Qo'lga olish uchun mantiqiy analizator
  • ESP va analizator uchun uchta USB kabel
  • 10 metrli o'ralgan juftlik avtobus vazifasini bajaradi

2 -qadam: CAN (Controller Area Network)

CAN (nazorat qiluvchi hududiy tarmoq)
CAN (nazorat qiluvchi hududiy tarmoq)
  • U Robert Bosch GmbH tomonidan 1980 -yillarda avtomobilsozlik sanoatiga xizmat ko'rsatish uchun ishlab chiqilgan.
  • Ko'p yillar davomida uning mustahkamligi va amalga oshirish moslashuvchanligi tufayli keng tarqaldi. U harbiy texnika, qishloq xo'jaligi texnikasi, sanoat va binolarni avtomatlashtirish, robototexnika va tibbiy asbob -uskunalarda qo'llaniladi.

3 -qadam: CAN - Xususiyatlar

CAN - Xususiyatlari
CAN - Xususiyatlari
CAN - Xususiyatlari
CAN - Xususiyatlari
  • Ikki simli ketma-ket aloqa
  • Har bir kvadrat uchun maksimal 8 bayt foydali ma'lumot, bo'linishi mumkin
  • Manzil tugunga emas, balki xabarga yo'naltirilgan
  • Xabarlarga ustuvorlik berish va "kutish" xabarlarini o'tkazish
  • Xatolarni aniqlash va signal berishning samarali qobiliyati
  • Multi-master qobiliyati (barcha tugunlar avtobusga kirishni talab qilishi mumkin)
  • Multicast qobiliyati (bir vaqtning o'zida bir nechta qabul qiluvchilar uchun bitta xabar)
  • 40 metrli avtobusda 1 Mbit / s gacha uzatish tezligi (avtobus uzunligi oshishi bilan tezlikni pasaytirish)
  • Konfiguratsiya moslashuvchanligi va yangi tugunlarni joriy etish (bitta avtobusda 120 ta tugunga qadar)
  • Standart uskunalar, arzon narx va yaxshi mavjudlik
  • Tartibga solingan protokol: ISO 11898

4 -qadam: O'chirish davri

Ishlatilgan davr
Ishlatilgan davr

Mana, menda uzatuvchi. Har bir tomonda bittasi bor va ular bir juft simlar bilan bog'langan. Ulardan biri ma'lumotlarni yuborish uchun, ikkinchisi esa ma'lumotlarni qabul qilish uchun javobgardir.

5 -qadam: uzatish liniyasi kuchlanishlari (differentsial aniqlash)

Elektr uzatish liniyasi kuchlanishlari (differentsial aniqlash)
Elektr uzatish liniyasi kuchlanishlari (differentsial aniqlash)

CAN -da dominant bit Zero hisoblanadi.

Chiziqni differentsial aniqlash shovqin sezuvchanligini pasaytiradi (EFI)

6 -qadam: CAN standartlari va ramkalar formati

CAN standartlari va ramkalar formati
CAN standartlari va ramkalar formati

11-bitli identifikatorli standart format

7 -qadam: CAN standartlari va ramkalar formati

CAN standartlari va ramkalar formati
CAN standartlari va ramkalar formati

29-bitli identifikatorli kengaytirilgan format

8 -qadam: standartlar va ramkalar formati

Shuni ta'kidlash kerakki, protokol allaqachon CRCni hisoblab chiqadi va ACK va EOF signallarini yuboradi, bular allaqachon CAN protokoli orqali amalga oshiriladi. Bu yuborilgan xabar noto'g'ri kelmasligini kafolatlaydi. Buning sababi shundaki, agar u axborotni tekshirish raqamiga teng bo'lgan CRC (ortiqcha tsiklli tekshirish yoki ortiqcha tekshirish) da muammo tug'dirsa, u CRC tomonidan aniqlanadi.

9 -qadam: To'rt turdagi ramkalar (ramkalar)

To'rt turdagi ramkalar (ramkalar)
To'rt turdagi ramkalar (ramkalar)

Shuni ta'kidlash kerakki, protokol allaqachon CRCni hisoblab chiqadi va ACK va EOF signallarini yuboradi, bular allaqachon CAN protokoli orqali amalga oshiriladi. Bu yuborilgan xabar noto'g'ri kelmasligini kafolatlaydi. Buning sababi shundaki, agar u axborotni tekshirish raqami bilan bir xil bo'lgan CRCda (keraksiz tsikl tekshiruvi yoki ortiqcha tekshirish) muammo tug'dirsa, u CRC tomonidan aniqlanadi.

To'rt turdagi ramkalar (ramkalar)

CAN -da ma'lumotlarni uzatish va qabul qilish to'rt turdagi kadrlarga asoslangan. Ramka turlari boshqaruv bitlarining o'zgarishi yoki hatto har bir holat uchun ramka yozish qoidalarining o'zgarishi bilan aniqlanadi.

  • Ma'lumotlar doirasi: qabul qiluvchilar uchun uzatuvchi ma'lumotlarini o'z ichiga oladi.
  • Masofaviy ramka: Bu tugunlardan birining ma'lumotlarini so'rash
  • Xatolik ramkasi: bu avtobusdagi xatoni aniqlashda har qanday tugun tomonidan yuboriladigan ramka va uni barcha tugunlar aniqlay oladi.
  • Haddan tashqari yuklanish ramkasi: Ma'lumotlarning haddan tashqari yuklanishi yoki bir yoki bir nechta tugunlarda kechikish tufayli avtobusda trafikni kechiktirishga xizmat qiladi.

10 -qadam: O'chirish - ulanish tafsilotlari

O'chirish - ulanish tafsilotlari
O'chirish - ulanish tafsilotlari

11 -qadam: O'chirish - ma'lumotlarni yozib olish

O'chirish - ma'lumotlarni yozib olish
O'chirish - ma'lumotlarni yozib olish

11-bitli identifikatorli standart CAN uchun olingan to'lqin uzunligi

12 -qadam: O'chirish - ma'lumotlarni yozib olish

O'chirish - ma'lumotlarni yozib olish
O'chirish - ma'lumotlarni yozib olish

29-bitli identifikatorli kengaytirilgan CAN uchun olingan to'lqin uzunligi

13 -qadam: O'chirish - ma'lumotlarni yozib olish

O'chirish - ma'lumotlarni yozib olish
O'chirish - ma'lumotlarni yozib olish

Mantiq analizatori tomonidan olingan ma'lumotlar

14 -qadam: Arduino kutubxonasi - CAN

Arduino kutubxonasi - CAN
Arduino kutubxonasi - CAN

Men bu erda CAN haydovchilar kutubxonasini o'rnatishingiz mumkin bo'lgan ikkita variantni ko'rsataman

Arduino IDE kutubxona menejeri

15 -qadam: Github

Github
Github

github.com/sandeepmistry/arduino-CAN

16 -qadam: Transmitterning manba kodi

Manba kodi: o'z ichiga oladi va sozlash ()

Biz CAN kutubxonasini o'z ichiga olamiz, disk raskadrovka uchun serialni ishga tushiramiz va CAN avtobusini 500 kbit / s tezlikda ishga tushiramiz.

#include // Inclui a biblioteca CAN sozlamalarini bekor qilishi mumkin () {Serial.begin (9600); // inicia ketma -ket para disk raskadrovka paytida (! Serial); Serial.println ("Transmissor CAN"); // Inarmiya yoki barramento 500 kbit/ s CAN bo'lsa, (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possibel invisier iniórérétérét la (1); }}

17 -qadam: Manba kodi: Loop (), standart CAN 2.0 paketini yuborish

Standart CAN 2.0 yordamida biz paketni yuboramiz. 11-bitli identifikator xabarni aniqlaydi. Ma'lumotlar bloki 8 baytgacha bo'lishi kerak. U ID 18 bilan paketni o'n oltilikda boshlaydi. U 5 baytni o'z ichiga oladi va funktsiyani yopadi.

void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: u bir vaqtning o'zida 11 bitli identifikator (oldindan belgilash, voqea) // u 8 ta bayt Serial.println ("Enviando pacote") … "); CAN.beginPacket (0x12); // id 18 em o'n oltilik CAN.write ('h'); // 1º bayt CAN.write ('e'); // 2º bayt CAN.write ('l'); // 3º bayt CAN.write ('l'); // 4º bayt CAN.write ('o'); // 5º bayt CAN.endPacket (); // Serial.println ("Enviado.") encio yoki pacote uchun; kechikish (1000);

18 -qadam: Manba kodi: Loop (), kengaytirilgan CAN 2.0 paketini yuborish

Ushbu bosqichda identifikator 29 bitga ega. U 24 bitli identifikatorni yuborishni boshlaydi va yana 5 baytni yig'adi va chiqadi.

// Usando CAN 2.0 ni tanlashi mumkin // Envia um pacote: u 29 bitli identifikatorni tanlashda (oldindan belgilashda, hodisada) // 8 baytda Serial.println ("Enviando pacote estendido…") yozilgan; CAN.beginExtendedPacket (0xabcdef); // id 11259375 kasr (abcdef em hexa) = 24 bit oldindan yozilgan CAN.write ('w'); // 1º bayt CAN.write ('o'); // 2º bayt CAN.write ('r'); // 3º bayt CAN.write ('l'); // 4º bayt CAN.write ('d'); // 5º bayt CAN.endPacket (); // Serial.println ("Enviado") uchun encio o pacote; kechikish (1000); }

19 -qadam: Qabul qiluvchining manba kodi

Manba kodi: o'z ichiga oladi va sozlash ()

Shunga qaramay, biz CAN kutubxonasini o'z ichiga olamiz, disk raskadrovka uchun serialni ishga tushiramiz va CAN avtobusini 500 kbit / s tezlikda ishga tushiramiz. Agar xato yuz bersa, bu xato chop etiladi.

#include // Inclui a biblioteca CAN sozlamalarini bekor qilishi mumkin () {Serial.begin (9600); // inicia ketma -ket para disk raskadrovka paytida (! Serial); Serial.println ("Retseptor CAN"); // Inarmiya yoki barramento 500 kbit/ s CAN bo'lsa, (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possibel invisier iniórérétérét la (1); }}

20 -qadam: Manba kodi: Loop (), paketni olish va formatini tekshirish

Qabul qilingan paket hajmini tekshirishga harakat qildik. CAN.parsePacket () usuli menga bu paketning hajmini ko'rsatadi. Agar bizda paket bo'lsa, biz uning uzaytirilganligini tekshiramiz.

void loop () {// Ta'kidlash joizki, paketlarSiz = CAN.parsePacket (); if (packetSize) {// Maqsad Serial.println ("Recebido pacote."); agar (CAN.packetExtended ()) {// verifica se o pacote yoki estendido Serial.println ("Estendido"); }

21 -qadam: Manba: Loop (), bu masofaviy paket ekanligini tekshiradi

Bu erda biz qabul qilingan paket ma'lumot so'rovi ekanligini tekshiramiz. Bunday holda, ma'lumotlar yo'q.

if (CAN.packetRtr ()) {// Verifica se pacote é um pacote remoto (Requisição de dados), nesto não há dados Serial.print ("RTR"); }

22 -qadam: Manba kodi: Loop (), Ma'lumot uzunligi so'ralgan yoki qabul qilingan

Agar qabul qilingan paket so'rov bo'lsa, biz so'ralgan uzunlikni ko'rsatamiz. Keyin biz ma'lumotlarning uzunligini ko'rsatadigan ma'lumotlar uzunligi kodini (DLC) olamiz. Nihoyat, biz qabul qilingan uzunlikni ko'rsatamiz.

Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); if (CAN.packetRtr ()) {// se o pacote recebido é de recvisidão, indicamos complicito quloch Serial.print ("re requsitou o compimento"); Serial.println (CAN.packetDlc ()); // DLC (Data Length Code, que indica o compimento dos dados)} else {Serial.print ("e compimento"); // ko'rsatuvlar Serial.println (packetSize);

23 -qadam: Manba kodi: Loop (), agar ma'lumotlar qabul qilinsa, u keyin chop etiladi

Biz ma'lumotlarni (ketma -ket monitorda) chop etamiz, lekin faqat qabul qilingan paket so'rov bo'lmasa.

// Imkoniyatlarni o'chirib tashlamang, chunki (CAN.available ()) {Serial.print ((char) CAN.read ()); } Serial.println (); } Serial.println (); }}

24 -qadam: Fayllarni yuklab oling

PDF

INO

Tavsiya: