Мазмұны:

CAN протоколы - Иә, жасай аламыз !: 24 қадам
CAN протоколы - Иә, жасай аламыз !: 24 қадам

Бейне: CAN протоколы - Иә, жасай аламыз !: 24 қадам

Бейне: CAN протоколы - Иә, жасай аламыз !: 24 қадам
Бейне: ПОЧЕМУ НА САМОМ ДЕЛЕ ГИБНУТ ОРХИДЕИ? ДЕЛАЮ ВСЁ НЕ ПО ПРАВИЛАМ И ПОКАЗЫВАЮ РЕЗУЛЬТАТ! АДАПТАЦИЯ 100%! 2024, Шілде
Anonim
Image
Image
Қолданылған ресурстар
Қолданылған ресурстар

Жақында менің YouTube арнасының ізбасарлары ұсынған тағы бір тақырып - CAN (Controller Area Network) протоколы, біз бүгін оған тоқталамыз. CAN бір мезгілде сериялық байланыс протоколы екенін түсіндіру маңызды. Бұл желіге қосылған модульдер арасындағы синхронизация шинаға жіберілген әрбір хабарламаның басына қатысты орындалатынын білдіреді. Біз CAN протоколының негізгі түсініктерін енгізуден бастаймыз және екі ESP32 көмегімен қарапайым құрастыруды орындаймыз.

Біздің тізбекте ESPs Master және Slave рөлін атқара алады. Сізде бір уақытта бірнеше микроконтроллер болуы мүмкін, себебі CAN автоматты түрде барлық нәрселердің соқтығысуымен айналысады. Бұл жобаның бастапқы коды өте қарапайым. Мынаны көр!

1 -қадам: Қолданылған ресурстар

  • ESP WROOM 32 NodeMcu екі модулі
  • WaveShare екі CAN трансивері
  • Қосылуға арналған секіргіштер
  • Түсіруге арналған логикалық анализатор
  • ESP және анализаторға арналған үш USB кабелі
  • 10 метрлік бұралған жұп автобус ретінде қызмет етеді

2 -қадам: CAN (контроллерлік аймақтық желі)

CAN (контроллерлік аймақтық желі)
CAN (контроллерлік аймақтық желі)
  • Оны 1980 жылдары Robert Bosch GmbH автомобиль өнеркәсібіне қызмет көрсету үшін жасаған.
  • Ол беріктігі мен іске асырудың икемділігі арқасында жылдар бойы кеңінен таралды. Ол әскери техникада, ауылшаруашылық техникасында, өнеркәсіптік және ғимаратты автоматтандыруда, робототехникада және медициналық техникада қолданылады.

3 -қадам: CAN - ерекшеліктері

CAN - ерекшеліктері
CAN - ерекшеліктері
CAN - ерекшеліктері
CAN - ерекшеліктері
  • Екі сымды сериялық байланыс
  • Бір фрейм үшін 8 байт пайдалы ақпарат, бөлуге болады
  • Түйінге емес, хабарға бағытталған адрес
  • Хабарларға басымдық беру және «күтудегі» хабарларды беру
  • Қателерді анықтау мен сигнал берудің тиімді мүмкіндігі
  • Көп мастерлік мүмкіндік (барлық түйіндер автобусқа кіруді сұрай алады)
  • Multicast мүмкіндігі (бір уақытта бірнеше қабылдағыш үшін бір хабарлама)
  • 40 метрлік автобуста 1 Мбит / с дейінгі тасымалдау жылдамдығы (шинаның ұзындығының ұлғаюымен жылдамдықты төмендету)
  • Конфигурацияның икемділігі және жаңа түйіндерді енгізу (бір шинада 120 түйінге дейін)
  • Стандартты жабдықтар, төмен баға және жақсы қол жетімділік
  • Реттелетін хаттама: ISO 11898

4 -қадам: Қолданылған схема

Қолданылған схема
Қолданылған схема

Міне, менде трансиверлер бар. Әр жағында біреуі бар және олар жұп сымдармен қосылған. Бірі жіберуге, екіншісі деректерді алуға жауап береді.

5 -қадам: Тарату желісінің кернеуі (дифференциалды анықтау)

Өткізу желісінің кернеуі (дифференциалды анықтау)
Өткізу желісінің кернеуі (дифференциалды анықтау)

CAN жүйесінде басым бит - нөл.

Сызықтық дифференциалды анықтау шу сезімталдығын төмендетеді (EFI)

6 -қадам: CAN стандарттары мен кадрларының форматы

CAN стандарттары мен кадрларының форматы
CAN стандарттары мен кадрларының форматы

11 биттік идентификаторы бар стандартты формат

7 -қадам: CAN стандарттары мен кадрларының форматы

CAN стандарттары мен кадрларының форматы
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 -да мәліметтерді беру мен қабылдау кадрлардың төрт түріне негізделген. Жақтау түрлері басқару биттерінің өзгеруімен немесе тіпті әрбір жағдайға кадрларды жазу ережелерінің өзгеруімен анықталатын болады.

  • Деректер шеңбері: қабылдағыштар үшін таратқыш деректері бар
  • Қашықтағы кадр: бұл түйіндердің бірінен деректерді сұрау
  • Қате жақтауы: бұл шинадағы қатені анықтау кезінде кез келген түйін жіберетін кадр және оны барлық түйіндер анықтай алады.
  • Шамадан тыс жүктеме шеңбері: Деректердің шамадан тыс жүктелуіне немесе бір немесе бірнеше түйінге кешігуіне байланысты автобустағы қозғалысты кешіктіруге қызмет етеді.

10 -қадам: Схема - Қосылымдар туралы мәліметтер

Схема - Қосылымдар туралы мәліметтер
Схема - Қосылымдар туралы мәліметтер

11 -қадам: схема - деректерді түсіру

Схема - Деректерді түсіру
Схема - Деректерді түсіру

11 биттік идентификаторы бар стандартты CAN үшін алынған толқын ұзындығы

12 -қадам: схема - деректерді түсіру

Схема - Деректерді түсіру
Схема - Деректерді түсіру

29 биттік идентификаторы бар кеңейтілген CAN үшін алынған толқын ұзындығы

13 -қадам: Circuit - Деректерді түсіру

Схема - Деректерді түсіру
Схема - Деректерді түсіру

Логикалық анализатор арқылы алынған мәліметтер

14 -қадам: Arduino кітапханасы - БОЛАДЫ

Arduino кітапханасы - CAN
Arduino кітапханасы - CAN

Мен мұнда CAN драйверінің кітапханасын орнатуға болатын екі нұсқаны көрсетемін

Arduino IDE кітапханасының менеджері

15 -қадам: Github

Github
Github

github.com/sandeepmistry/arduino-CAN

16 -қадам: таратқыштың бастапқы коды

Бастапқы код: қамтиды және орнату ()

Біз CAN кітапханасын қосамыз, отладтау сериясын бастаймыз және 500 кбит / с жылдамдықта CAN шинасын іске қосамыз.

#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia (! сериялық) кезіндегі сериялық пара түзету; Serial.println («Транслятор CAN»); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println («Falha ao iniciar o controlador CAN»); // casus não seja possibel invisar or controlador while (1); }}

17 -қадам: бастапқы код: Loop (), стандартты CAN 2.0 пакетін жіберу

Стандартты CAN 2.0 көмегімен біз пакетті жібереміз. 11 биттік идентификатор хабарламаны анықтайды. Деректер блогы 8 байтқа дейін болуы керек. Ол пакетті ID 18 -де он алтылық жүйеде бастайды. Ол 5 байтты жинайды және функцияны жабады.

void loop () {// Usando o CAN 2.0 қосымшасы // 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 em он алтылық CAN.write ('h'); // 1º байт CAN.write ('e'); // 2º байт CAN.write ('l'); // 3º байт CAN.write ('l'); // 4º байтты CAN.write ('o'); // 5º байт CAN.endPacket (); // enerio Serial.println («Enviado.»); кешіктіру (1000);

18 -қадам: Бастапқы код: Loop (), Кеңейтілген CAN 2.0 пакетін жіберу

Бұл қадамда идентификаторда 29 бит бар. Ол 24 биттік идентификаторды жібере бастайды және тағы да 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 (); // enial Serial.println («Enviado.»); кешіктіру (1000); }

19 -қадам: Ресивердің бастапқы коды

Бастапқы код: қамтиды және орнату ()

Тағы да, біз CAN кітапханасын қосамыз, күйін келтіру үшін серияны бастаймыз және 500 кбит / с жылдамдықта CAN шинасын іске қосамыз. Егер қате пайда болса, бұл қате басып шығарылады.

#include // Inclui a biblioteca CAN void setup () {Serial.begin (9600); // inicia (! сериялық) кезінде сериялық пара жөндеу; Serial.println («CAN рецепторы»); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println («Falha ao iniciar o controlador CAN»); // casus não seja possibel 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 o pacote é 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 o pacote recebido é de recvisidão, indialos or complico solicitado Serial.print («requsitou o compimento»); Serial.println (CAN.packetDlc ()); // DLC (Data Length Code, que indica o compimento dos dados)} else {Serial.print («e compimento»); // серия.println (packetSize) рецепті бойынша нұсқаулар;

23 -қадам: Бастапқы код: Loop (), егер деректер алынса, ол басып шығарылады

Біз деректерді (сериялық мониторда) басып шығарамыз, бірақ егер алынған пакет сұраныс болмаса.

// Imprime os dados somente se o pacote recebido não foi de recuisisão while (CAN.available ()) {Serial.print ((char) CAN.read ()); } Serial.println (); } Serial.println (); }}

24 -қадам: файлдарды жүктеңіз

PDF

МЕН ЖОҚ

Ұсынылған: