Мазмуну:
- 1 -кадам: Колдонулган ресурстар
- 2 -кадам: CAN (Controller Area Network)
- 3 -кадам: БОЛОТ - Өзгөчөлүктөр
- 4 -кадам: Circuit колдонулат
- 5 -кадам: Өткөрүү линиясынын чыңалуусу (дифференциалдуу аныктоо)
- 6 -кадам: CAN стандарттары жана фреймдер форматы
- 7 -кадам: CAN стандарттары жана фреймдер форматы
- 8 -кадам: CAN стандарттары жана фреймдер форматы
- 9 -кадам: Фреймдердин төрт түрү
- 10 -кадам: Район - Байланыштардын чоо -жайы
- 11 -кадам: Район - Маалыматтарды тартуу
- 12 -кадам: Район - Маалыматтарды тартуу
- 13 -кадам: Район - Маалыматтарды тартуу
- 14 -кадам: Arduino китепканасы - БОЛОТ
- 15 -кадам: Github
- 16 -кадам: Бергичтин коду
- 17 -кадам: Булак коду: Loop (), CAN 2.0 пакетин жөнөтүү
- 18 -кадам: Булак коду: Loop (), Extended CAN 2.0 пакетин жөнөтүү
- 19 -кадам: Алуучу Source Code
- 20 -кадам: Булак коду: Loop (), пакетти алуу жана форматты текшерүү
- 21 -кадам: Булак: Loop (), Бул алыскы пакет экендигин текшерүү
- 22 -кадам: Булак коду: Loop (), маалыматтын узундугу суралган же алынган
- 23 -кадам: Булак коду: Loop (), эгер маалыматтар алынса, анда басып чыгарат
- 24 -кадам: Файлдарды жүктөп алыңыз
Video: CAN протоколу - Ооба, биз кыла алабыз !: 24 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:41
Жакында менин YouTube каналымдын жолдоочулары сунуштаган дагы бир тема CAN (Controller Area Network) протоколу болду, биз бүгүн ага токтолобуз. CAN бир эле учурда сериялык байланыш протоколу экенин түшүндүрүү маанилүү. Бул тармакка туташкан модулдардын ортосундагы синхронизм автобуска жөнөтүлгөн ар бир билдирүүнүн башталышына карата аткарылганын билдирет. Биз CAN протоколунун негизги түшүнүктөрүн киргизүүдөн баштайбыз жана эки ESP32 менен жөнөкөй куралды аткарабыз.
Биздин схемада, ESPлер кожоюн жана кул катары иштей алышат. Сизде бир эле убакта бир нече микроконтроллер өткөрүлүшү мүмкүн, анткени CAN автоматтык түрдө баарынын кагылышуусу менен алектенет. Бул долбоордун баштапкы коду супер жөнөкөй. Муну карап көр!
1 -кадам: Колдонулган ресурстар
- ESP WROOM 32 эки модулу NodeMcu
- WaveShare'ден эки CAN transceivers
- Байланыш үчүн секиргичтер
- Логикалык анализатор
- ESP жана анализатор үчүн үч USB кабели
- Автобус катары кызмат кылуу үчүн 10 метр буралган жуп
2 -кадам: CAN (Controller Area Network)
- Бул 1980 -жылдары Robert Bosch GmbH тарабынан унаа тармагына кызмат кылуу үчүн иштелип чыккан.
- Ал бышыктыгынан жана ишке ийкемдүүлүгүнөн улам көп жылдар бою кеңири таралган. Бул аскердик техника, айыл чарба техникасы, өнөр жай жана имараттарды автоматташтыруу, робототехника жана медициналык жабдуулар менен колдонулат.
3 -кадам: БОЛОТ - Өзгөчөлүктөр
- Эки зымдуу сериялык байланыш
- Бөлүнүп кетиши мүмкүн болгон ар бир кадрга максимум 8 байт пайдалуу маалымат
- Дарек түйүнгө эмес, билдирүүгө багытталган
- Билдирүүлөргө артыкчылык берүү жана "кармалып турган" билдирүүлөрдү өткөрүү
- Каталарды аныктоо жана сигнал берүү боюнча эффективдүү жөндөм
- Мульти-мастер мүмкүнчүлүгү (бардык түйүндөр автобуска кирүүнү талап кыла алат)
- Multicast мүмкүнчүлүгү (бир эле учурда бир нече кабыл алуучу үчүн бир билдирүү)
- 40 метрлик автобуста 1 Мбит / с чейин өткөрүү ылдамдыгы (шинанын узундугу жогорулаганда тарифти төмөндөтүү)
- Конфигурациянын ийкемдүүлүгү жана жаңы түйүндөрдү киргизүү (бир автобуска 120 түйүнгө чейин)
- Стандарттык жабдыктар, арзандыгы жана жакшы жеткиликтүүлүгү
- Жөнгө салынган протокол: ISO 11898
4 -кадам: Circuit колдонулат
Бул жерде менде Transceivers бар. Ар бир тарапта бирөө бар, алар жуп зымдар менен туташкан. Бири жөнөтүү үчүн, экинчиси маалыматтарды алуу үчүн жооптуу.
5 -кадам: Өткөрүү линиясынын чыңалуусу (дифференциалдуу аныктоо)
CANда доминант бит Zero.
Line Differential Detection ызы -чуу сезгичтигин (EFI) азайтат
6 -кадам: CAN стандарттары жана фреймдер форматы
11-биттик идентификатору бар стандарттык формат
7 -кадам: CAN стандарттары жана фреймдер форматы
29-бит идентификатору менен кеңейтилген формат
8 -кадам: CAN стандарттары жана фреймдер форматы
Белгилей кетүүчү нерсе, протокол CRCди эсептеп, ACK жана EOF сигналдарын жөнөтөт, бул CAN протоколу менен жасалган иштер. Бул жөнөтүлгөн билдирүү туура эмес жол менен келбейт деп кепилдик берет. Себеби, эгерде бул маалымат текшерүүчү цифрасы менен бирдей болгон CRCде (ашыкча циклдик текшерүү же ашыкча текшерүү) көйгөй берсе, ал CRC тарабынан аныкталат.
9 -кадам: Фреймдердин төрт түрү
Белгилей кетүүчү нерсе, протокол CRCди мурунтан эле эсептеп, ACK жана EOF сигналдарын жөнөтөт, бул CAN протоколу менен жасалган иштер. Бул жөнөтүлгөн билдирүү туура эмес жол менен келбейт деп кепилдик берет. Себеби, эгерде бул маалымат текшерүүчү цифрасы менен бирдей болгон CRCде (ашыкча циклдик текшерүү же ашыкча текшерүү) көйгөй берсе, ал CRC тарабынан аныкталат.
Кадрлардын төрт түрү (фреймдер)
CANда маалыматтарды берүү жана кабыл алуу кадрлардын төрт түрүнө негизделген. Кадрдын түрлөрү башкаруу биттеринин вариациялары, ал тургай, ар бир учур үчүн кадр жазуу эрежелеринин өзгөрүшү менен аныкталат.
- Маалымат алкагы: алуучу (лар) үчүн өткөргүч маалыматтарды камтыйт
- Remote Frame: Бул түйүндөрдүн биринен маалымат сурап алуу
- Error Frame: Бул автобустагы катаны аныктоодо түйүндөрдүн бири тарабынан жөнөтүлгөн жана бардык түйүндөр тарабынан аныкталышы мүмкүн болгон кадр
- Ашыкча жүктөө алкагы: Автобустагы трафикти бир же бир нече түйүндөрдө ашыкча жүктөө же кечигүү үчүн кечиктирүү үчүн кызмат кылат.
10 -кадам: Район - Байланыштардын чоо -жайы
11 -кадам: Район - Маалыматтарды тартуу
11-биттик ID менен стандарттык CAN үчүн алынган толкун узундугу
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 катардагы пара мүчүлүштүктөрдү оңдоо (! Сериялык); Serial.println ("Transmissor CAN"); // Inicia o barramento CAN 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possibil invisar 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 bayt Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 эм он алтылык CAN.write ('h'); // 1º байт CAN.write ('e'); // 2º байт CAN.write ('l'); // 3º байт CAN.write ('l'); // 4º байт CAN.write ('o'); // 5º байт CAN.endPacket (); // encialra pacote para envio Serial.println ("Enviado."); кечигүү (1000);
18 -кадам: Булак коду: Loop (), Extended CAN 2.0 пакетин жөнөтүү
Бул кадамда ID 29 битке ээ. Ал 24 бит ID жөнөтө баштайт жана дагы бир жолу 5 байтты таңгактайт жана чыгат.
// Usando CAN 2.0 Estendido // Envia um pacote: ал 29 битти аныктоодо (артыкчылыктуу, окуядагы) // 8 байттагы 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 (); // encialra pacote para envio Serial.println ("Enviado."); кечигүү (1000); }
19 -кадам: Алуучу Source Code
Булак коду: камтыйт жана орнотуу ()
Дагы, биз CAN китепканасын кошобуз, мүчүлүштүктөрдү оңдоо үчүн серияны баштайбыз жана CAN автобусун 500 кбит / с баштап баштайбыз. Эгер ката кетсе, бул ката басылып чыгат.
#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia катардагы пара мүчүлүштүктөрдү оңдоо (! Сериялык); Serial.println ("Receptor CAN"); // Inicia o barramento CAN 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possibil invisar or controlador while (1); }}
20 -кадам: Булак коду: Loop (), пакетти алуу жана форматты текшерүү
Биз алган пакеттин көлөмүн текшерүүгө аракет кылдык. CAN.parsePacket () методу мага бул пакеттин көлөмүн көрсөтөт. Ошентип, бизде пакет бар болсо, анын узартылганын же узартылбаганын текшеребиз.
void loop () {// Туура эмес маалымат пакетиSize = CAN.parsePacket (); if (packetSize) {// Негизги бет Serial.println ("Recebido pacote."); if (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }
21 -кадам: Булак: Loop (), Бул алыскы пакет экендигин текшерүү
Бул жерде, биз алынган пакет маалымат сурамы экенин текшеребиз. Бул учурда эч кандай маалымат жок.
if (CAN.packetRtr ()) {// Verifica se pacote eé um pacote remoto (Requisição de dados), nesto casus não há dados Serial.print ("RTR"); }
22 -кадам: Булак коду: Loop (), маалыматтын узундугу суралган же алынган
Эгерде алынган пакет суроо болсо, биз суралган узундукту көрсөтөбүз. Биз андан кийин маалыматтын узундугун көрсөтүүчү Data Length Code (DLC) алабыз. Акыр -аягы, биз алынган узундугун көрсөтөбүз.
Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); if (CAN.packetRtr ()) {// se pacote recebido é de recuisidão, indicamos complico soicitado 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"); // акысыз көрсөтмө Serial.println (packetSize);
23 -кадам: Булак коду: Loop (), эгер маалыматтар алынса, анда басып чыгарат
Биз маалыматтарды (сериялык мониторго) басып чыгарабыз, бирок алынган пакет суроо -талап болбосо гана.
// Imprime os dados somente seo pacote recebido não foi de Requisição while (CAN.available ()) {Serial.print ((char) CAN.read ()); } Serial.println (); } Serial.println (); }}
24 -кадам: Файлдарды жүктөп алыңыз
МЕН ЖОК
Сунушталууда:
Биз үйрөткүчтөрдүн тобубуз 6 UQD10801 (Robocon1) Университеттин студенттери Тун Хусейн Онн Малайзия (UTHM): 4x4 жана LCD Arduino клавиатурасы: 3 кадам
Биз үйрөткүчтүн тобу 6 UQD10801 (Robocon1) Университеттин студенттери Tun Hussein Onn Malaysia (UTHM): Keypad 4x4 жана LCD Arduino: Баскычтоптор - бул колдонуучуларга сиздин долбооруңуз менен баарлашууга эң сонун жол. Сиз аларды менюларды чабыттоо, сырсөздөрдү киргизүү, оюндарды жана роботторду башкаруу үчүн колдоно аласыз. Бул үйрөткүчтө мен сизге Arduinoдо баскычтопту кантип орнотууну көрсөтөм. Биринчиден, мен арду тилин кантип түшүндүрөм
Интернет сааты: NTP протоколу менен ESP8266 NodeMCU колдонуп OLED менен күндү жана убакытты көрсөтүү: 6 кадам
Интернет сааты: NTP протоколу менен ESP8266 NodeMCU колдонуп OLED менен күндү жана убакытты көрсөтүү: Саламатсыздарбы, бул көрсөтмөлөрдө биз интернеттен убакыт ала турган интернет саатын курабыз, андыктан бул проектти иштетүү үчүн эч кандай RTC кереги жок, ал үчүн иштеп жаткан интернет байланышы Жана бул долбоор үчүн сизге esp8266 керек, ал
Биринчи кыла турган иштердин тизмесин колдонуу: 8 кадам
Биринчи кыла турган иштер тизмеңиздин колдонмосун жайылтыңыз: Эгерде сиз коддоону жаңы билсеңиз же фон кодуңуз болсо, анда кайдан үйрөнүүнү ойлонушуңуз мүмкүн. Сиз кантип, эмнени, каякты коддоону үйрөнүшүңүз керек, анан код даяр болгондон кийин, аны кантип жалпыга көргөзүү үчүн жайылтууну үйрөнүшүңүз керек
Reverse Engineering Ritter 8341C ESP3866 протоколу: 5 кадам
Reverse Engineering Ritter 8341C ESP3866 протоколу: Hi @all.For менин кичинекей үйүмдү автоматташтыруу үчүн мен негизги 433 МГц башкарылуучу розеткаларды колдоном. Даректи тууралоо үчүн DIP которгучтары бар 3 комплект бар. Булар жакшы иштеп жатышты. Бирок бир нече убакыт мурун (бир же эки жыл мурун) мен " ritter & quo”компаниясынан розеткаларды сатып алдым
Биз жөнүндө
howwhatproduce.com жөнүндө