Користите овај робусни серијски комуникациони протокол да повежете две Ардуино плоче заједно и пошаљете податке једна другој.
Сабирница Цонтроллер Ареа Нетворк (ЦАН) је робустан и поуздан комуникациони протокол који се широко користи у разним индустријским, аутомобилским и ваздухопловним апликацијама. Дизајниран је за пренос података између микроконтролера и уређаја преко ЦАН бус мреже. Можда ово још увек не знате, али то је ствар иза оних лудих модификација контролне табле аутомобила које видите на друштвеним медијима.
Провешћемо вас кроз како да направите ЦАН магистралу са МЦП2515 ЦАН модулом користећи Ардуино и матичну плочу. Такође ћемо проћи кроз Ардуино ЦАН библиотеку и показати како слати и примати податке преко ЦАН магистрале.
Шта је ЦАН сабирница?
ЦАН магистрала је серијски комуникациони протокол који је развио Босцх 1980-их. Широко се користи у разним апликацијама због своје високе поузданости и робусности. Омогућава пренос података између уређаја великом брзином са минималним кашњењем преко само две линије: ЦАН Хигх и ЦАН Лов.
Године 1994. ЦАН магистрала је постала међународни стандард (ИСО 11898) који је дизајниран посебно за брзу серијску размену података између електронских контролера у аутомобилским апликацијама. Погледајте наш свеобухватан водич на шта је ЦАН магистрала и какву улогу игра у аутомобилским системима за више детаља.
Један од разлога зашто је ЦАН магистрала толико популарна је због њених функција откривања грешака и исправљања. Протокол може открити и исправити грешке у преносу података. То га чини идеалним за апликације где је интегритет података критичан, као што је индустријска аутоматизација.
Познавање МЦП2515 ЦАН модула
Модул контролера ЦАН магистрале МЦП2515 је уређај који пружа изузетну подршку за широко коришћени ЦАН протокол верзије 2.0Б. Овај модул је идеалан за комуникацију при високим брзинама података до 1Мбпс.
МЦП2515 ИЦ је независни ЦАН контролер са СПИ интерфејсом који омогућава комуникацију са широким спектром микроконтролера. ТЈА1050 ИЦ, с друге стране, функционише као интерфејс између МЦП2515 ЦАН контролера и физичке ЦАН магистрале.
За додатну погодност, постоји краткоспојник који вам омогућава да причврстите завршетак од 120 ома, што олакшава повезивање ваших жица са ЦАН_Х & МОГУ ЛИ ЈА завртњи за комуникацију са другим ЦАН модулима.
одлика |
Спецификација |
---|---|
Трансцеивер |
ТЈА1050 |
Интерфејс микроконтролера |
СПИ (омогућава интеграцију Мулти ЦАН магистрале) |
Кристални осцилатор |
8МХз |
Прекид |
120Ω |
Брзина |
1Мбпс |
Потрошња струје |
Нискострујни режим приправности |
Димензија |
40 к 28 мм |
Капацитет чвора |
Подржава до 112 чворова |
Додатне информације можете добити од МЦП2515 датасхеет у случају да вам је овај модул потребан за напреднији пројекат.
ЦАН структура поруке
Структура ЦАН поруке састоји се од више сегмената, али најкритичнији сегменти за овај пројекат су идентификатор и подаци. Идентификатор, такође познат као ЦАН ИД или број групе параметара (ПГН), идентификује уређаје на ЦАН-у мреже, а дужина идентификатора може бити 11 или 29 бита, у зависности од типа ЦАН протокола коришћени.
У међувремену, подаци представљају стварне сензорске/контролне податке који се преносе. Подаци могу бити дуги од 0 до 8 бајтова, а код дужине података (ДЛЦ) означава број присутних бајтова података.
Библиотека Ардуино МЦП2515 ЦАН сабирнице
Ова библиотека имплементира ЦАН В2.0Б протокол, који може да ради при брзинама до 1Мбпс. Обезбеђује СПИ интерфејс који може да ради на брзинама до 10 МХз док подржава и стандардне (11-битне) и проширене (29-битне) податке. Штавише, долази са два бафера за пријем, који омогућавају приоритетно складиштење порука.
Иницијализација ЦАН магистрале
Ево кода за подешавање који ће вам требати да иницијализујете ЦАН магистралу:
#укључити
#укључитиМЦП2515 мцп2515(10); // Постави ЦС пин
празнинаподесити(){
док (!Сериал);
Сериал.започети(9600);
СПИ.започети(); //Започиње СПИ комуникацију
мцп2515.ресет();
мцп2515.сетБитрате (ЦАН_500КБПС, МЦП_8МХЗ);
мцп2515.сетНормалМоде();
}
Ово иницијализује МЦП2515 са ЦАН брзином од 500Кбпс и фреквенцијом осцилатора од 8МХз.
МЦП2515 ЦАН оперативни режими
Постоје три оперативна режима који се користе са МЦП2515 ЦАН бус контролером:
- сетНормалМоде(): подешава контролер да шаље и прима поруке.
- сетЛоопбацкМоде(): подешава контролер да шаље и прима поруке, али поруке које он шаље ће такође бити примљене саме.
- сетЛистенОнлиМоде(): подешава контролер да прима само поруке.
Ово су позиви функција који се користе за подешавање режима рада контролера ЦАН магистрале МЦП2515.
мцп2515.сетНормалМоде();
мцп2515.сетЛоопбацкМоде();
мцп2515.сетЛистенОнлиМоде();
Слање података преко ЦАН магистрале
Да бисте послали поруку преко ЦАН магистрале, користите сендМсгБуф() метод:
непотписанцхар подаци[] = {0к01, 0к02, 0к03, 0к04};
ЦАН.сендМсгБуф(0к01, 0, 4, подаци);
Ово шаље поруку са ИД-ом 0к01 и носивост података од {0к01, 0к02, 0к03, 0к04}. Први параметар је ЦАН ИД, други је приоритет поруке, трећи је дужина корисног оптерећења података, а четврти је сам садржај података.
Тхе сендМсгБуф() метода враћа вредност која показује да ли је порука успешно послата или не. Ову вредност можете проверити тако што ћете позвати цхецкЕррор() метод:
ако (ЦАН.цхецкЕррор()) {
Сериал.принтлн(„Грешка при слању поруке.“);
}
Ово проверава да ли је дошло до грешке током преноса поруке и штампа поруку о грешци ако је потребно.
Пријем података са ЦАН магистрале
Да бисте примили поруку преко ЦАН магистрале, можете користити реадМсгБуф() метод:
непотписанцхар лен = 0;
непотписанцхар буф[8];
непотписанцхар цанИД = 0;
ако (ЦАН.цхецкРецеиве()) {
ЦАН.реадМсгБуф(&лен, буф);
цанИД = ЦАН.гетЦанИд();
}
Ово проверава да ли је порука доступна на ЦАН магистрали и затим чита поруку у буф низ. Дужина поруке се чува у лен променљива, а ИД поруке се чува у цанИД променљива.
Када примите поруку, можете да обрадите корисне податке по потреби. На пример, можете одштампати податке на серијски монитор:
Сериал.принт(„Примљена порука са ИД-ом“);
Сериал.принт(цанИД, ХЕКС);
Сериал.принт(" и подаци: ");за (инт и = 0; и < лен; и++) {
Сериал.принт(буф[и], ХЕКС);
Сериал.принт(" ");
}
Сериал.принтлн();
Ово штампа ИД примљене поруке и садржај података на серијски монитор.
Како спојити примопредајник ЦАН сабирнице на матичну плочу
Да бисте направили ЦАН магистралу за повезивање два уређаја у овом примеру пројекта, требаће вам:
- Два микроконтролера (две Ардуино Нано плоче за овај пример)
- Два МЦП2515 ЦАН модула
- Бреадбоард
- Жице за краткоспојнике
- Модул ЛЦД екрана И2Ц 16к2
- ХЦ-СР04 ултразвучни сензор
За овај пример пројекта, четири библиотеке се користе у Ардуино скици. Ту је НевПинг библиотека, која пружа интерфејс за ултразвучни сензор једноставан за коришћење, као и СПИ библиотека, што олакшава комуникацију између Ардуино плоче и контролера ЦАН магистрале МЦП2515. Тхе ЛикуидЦристал_И2Ц библиотека се користи за модул дисплеја.
На крају, ту је мцп2515 библиотека да се повеже са МЦП2515 чипом, омогућавајући нам да лако преносимо податке преко ЦАН бус мреже.
Подешавање хардвера (пример ХЦ-СР04)
У овом пројекту који користи ХЦ-СР04 сензор и ЛЦД, једна Ардуино Нано плоча ће деловати као пријемник, док ће друга Ардуино деловати као пошиљалац. Повежите компоненте вашег пошиљаоца према дијаграму ожичења испод:
Ево дијаграма за коло пријемника:
На крају, повежите два чвора заједно помоћу ЦАН_Х и МОГУ ЛИ ЈА линије као што је приказано:
Приликом повезивања модула, важно је осигурати да је напон напајања унутар наведеног опсега и да МОЖЕ Х и МОГУ ЛИ ЈА пинови су правилно повезани са магистралом.
Програмирање модула ЦАН магистрале МЦП2515
Имајте на уму да је приликом програмирања МЦП2515 модула важно користити исправну брзину пријеноса како бисте осигурали успјешну комуникацију са другим ЦАН уређајима на мрежи.
Шифра пошиљаоца:
#укључити
#укључити
#укључитиМЦП2515 мцп2515(10);
констбајт тригПин = 3;
констбајт ецхоПин = 4;
НевПинг сонар(тригПин, ецхоПин, 200);струцтцан_фрамецанМсг;
празнинаподесити(){
Сериал.започети(9600);
мцп2515.ресет();
мцп2515.сетБитрате (ЦАН_500КБПС, МЦП_8МХЗ);
мцп2515.сетНормалМоде();
}празнинапетља(){
непотписанинт удаљеност = сонар.пинг_цм();
цанМсг.цан_ид = 0к036; //МОЖЕ ИД као 0к036
цанМсг.цан_длц = 8; //ЦАН дужина података као 8
цанМсг.дата[0] = растојање; //Ажурирај вредност влажности у [0]
цанМсг.дата[1] = 0к00; // Одмори све са 0
цанМсг.дата[2] = 0к00;
цанМсг.дата[3] = 0к00;
цанМсг.дата[4] = 0к00;
цанМсг.дата[5] = 0к00;
цанМсг.дата[6] = 0к00;
цанМсг.дата[7] = 0к00;
мцп2515.сендМессаге(&цанМсг);//Шаље ЦАН поруку
кашњење(100);
}
Код пријемника:
#укључити
#укључити
#укључитиМЦП2515 мцп2515(10);
ЛикуидЦристал_И2Ц лцд(0к27,16,2);
струцтцан_фрамецанМсг;празнинаподесити(){
Сериал.започети(9600);мцп2515.ресет();
мцп2515.сетБитрате (ЦАН_500КБПС, МЦП_8МХЗ);
мцп2515.сетНормалМоде();
лцд.инит();
лцд.бацклигхт();
лцд.сетЦурсор(0, 0);
лцд.принт(„ВОДИЧ ЗА МУО МОЖЕ“);
кашњење(3000);
лцд.јасно();
}
празнинапетља(){
ако (мцп2515.реадМессаге(&цанМсг) == МЦП2515::ЕРРОР_ОК) // За примање података
{
инт удаљеност = цанМсг.дата[0];
лцд.сетЦурсор(0,0);
лцд.принт("Удаљеност: ");
лцд.принт(удаљеност);
лцд.принт("центиметар ");
}
}
Подигните своје Ардуино пројекте на следећи ниво
Комбинација ЦАН магистрале и Ардуина пружа моћну платформу за изградњу или учење софистицираних комуникационих мрежа које се користе у различитим апликацијама. Иако се може чинити да је то стрма крива учења, поседовање сопственог подешавања на матичној плочи је прилично згодан начин да научите конопце коришћења мреже ЦАН магистрале у сложеним „уради сам“ пројектима.