![]() |
Arduino+CANBUS Shield
Вложений: 1
Помогите разобраться.
Имеется автомобиль семейства Mazda. Имеется Ардуино Про Микро и CAN-BUS Shield. Между собой соединял согласно даташита про микры и MCP2515 (прозванивал ноги). Цитата:
Согласно найденной информации шина в мазде работает на скорости 500 kbps. Пробовал залить example receive скетч идущий с CANBUS либой. Эффект нулевой - в мониторе порта вообще ничего. Судя по внешнему виду шилда - терминирующего резистора на нём нет, но для эксперимента выпаял резистор R2 - не помогло. Что я делаю не так, и что мне надо сделать, чтобы стало как надо. Вопрос стоит не в расшифровке сообщений идущих по can, а в их простом получении, для начала. PS диагностические приблуды мне не нужны. Использую ардуину с шилдом, потому как в итоге хочу получить самостоятельное устройство непрерывно передающее по шине определенную информацию. Если есть альтернативные ардуине варианты (стоящие копейки) то предлагайте. |
GND c массой на машине подключаете?
|
Цитата:
В соседней теме у людей не работают параллельно подключенные к колодке OBD устройства - может причина в этом? Хотя у меня подключение скорее последовательное. |
Цитата:
В can шине не бывает последовательного подключения. |
Цитата:
у шилда своя земля, у авто своя. проблема не в этом. может быть всё таки в параллельном соединении? хотя если все системы в авто итак параллельно висят, то добавление шилда ничего не должно менять. |
а масса шилда, ардуины и компа как нибудь с массой машиной соединены? шилд начинает принимать данные если подключена масса и can_h, на шилде начинает мигать светодиод.
|
Масса не обязательна. У меня на Octavia Tour и на FF3 без массы всё отлично принимает и отправляет.
|
Цитата:
|
Цитата:
На шилде очень быстро моргает светодиод RX, почти непрерывно, и немного реже моргает светодиод TX - значит шилда чтото принимает. И либо не передаёт на ардуину, либо делает это неправильно. Или ошибка в соединении ардуино-шилд или загвоздка в скетче. Попробовал ради эксперимента в скетче разные скорости шины указывать - результата нет. В мониторе порта вообще ничего не отображается. Если скорость неправильная так и должно быть? Или должен быть поток ничего не значащих цифр? |
Итак, шина работает на скорости 500kbps - это 100%.
Прозвонил все контакты на моём безымянном шилде и на ардуине - подключены они между собой верно - 99% Залил скетч с вот таким содержанием: Код:
if(CAN_OK == CAN.begin(CAN_500KBPS)) // init can bus : baudrate = 500k Значит дело в скетче для приёма сообщений с can шины. Нашел вот такую информацию: Цитата:
|
покажи весь скетч и либу для шилда
При передачи данных шилду (по SPI) нет аппаратного подтверждения принятых данных, поэтому нужно проверять программно, например, прочитать один из регистров cnf и сравнить с тем, что туда было записано. Если совпадает, значит соединение прошло успешно. Не во всех либах это сделано. Ещё момент, у тебя перемычка J1 (рядом с контактом Тх) открыта, а это значит, что питание для платы 3.3В, а не 5В. По крайней мере, для настоящего Pro Micro. Проверь напряжение на Vcc. И чем питается шилд? Судя по фотке, кварц на шилде 8Мгц, это влияет на значения регистров CNF, с помощью которых устанавливается скорость CAN шины в шилде. Чаще всего используется 16МГц, поэтому в либе значения могут быть рассчитаны для 16, а не для 8 |
Gorynch
либа отсюда https://github.com/Seeed-Studio/CAN_BUS_Shield напряжение на vcc 4.64 - на китайских про микро перемычка открыта как я понимаю, шилд питается от ардуины, которая в свою очередь от usb порта ноутбука шилд соединял с ардуиной по инструкции от iti1 у которого всё работает (правда с другим шилдом) скетчи пробовал разные вот один и зних: Код:
// demo: CAN-BUS Shield, receive data with check mode по факту, на данный момент - шилда/ардуино подключены к проводке авто и как только на них поступает питание - шилда начинает безостановки что-то принимать (светодиод rx мерцает, почти непрерывно светится) но ардуино нихрена не получает от шилды - даже сообщение из START_INIT (не появляется в мониторе порта ни при каких условиях, и на ардуине светодиод rx не моргает вообще) |
ПрОвода питания от ардуины к шилду на картинке нет. Есть земля и данные
В данном скетче для проверки наличия нового сообщения идёт обращения к шилду через SPI, по идее для этого нужно использовать прерывание от шилда по пину 2 (в твоём случае), это будет быстрее Увеличь скорость rs232 до 115200 (и в скетче, и на компе) Добавь обработку прихода данных от компа: пришла "1" (т.е. ты в терминале нажал 1 и Enter) - инициализировать шилд, пришла "2" - запустить приём данных от шилда Светодиод rx на ардуине связан с rs232, а не с шилдом. Когда пойдут данные должен моргать Tx Самое главное - в скетче значения регистров CNF рассчитаны для 16МГц. Нужно пересчитывать для 8, или менять кварц |
Disgraced, попробуйте этот скетч, я им сканировал FF3, только скорость CAN поменяйте:
PHP код:
|
Итак, по порядку: соединил разъем шилда 5V и разъем VCC ардуины - никакого эффекта.
Скетч в посте от lti1 не дал результата, в мониторе порта по прежнему тишина. Gorynch, по вашей подсказке поменял кварц - впаял на 16mhz. Что получилось - скетч из моего поста, шилда запитана, кварц на 16mhz - в мониторе порта поток сообщений: Код:
CAN BUS Shield init fail Т.е. до этого не было никаких сообщений, а теперь сообщает что всё плохо. По поводу Цитата:
|
в ардуино не силён, но что-то вроде
PHP код:
в либе на mcp2515 добавь своих отладочных сообщений в терминал, чтобы понять где именно затык |
У меня таже проблема!
На шилде светодиод RX аж светится, а на Arduino данные не идут. Кварц тоже кстати 8MhZ. Gorynch Спасибо что направил в нужную сторону! Такс, Выдернул отсюда https://github.com/Flori1989/MCP2515_lib с поддержкой 8MhZ. Теперь вопрос как установить 8MhZ в скетче. Вот так нужно? Или она сама определит? if(CAN_OK == CAN.begin(CAN_500KBPS,MCP_8MHz)) Вот так данные пошли Цитата:
На диагностической колодке CAN-Comfort нету чтоль? Я невижу нажатий кнопок на руле в упор! |
T_r_D, скетч который ты выложил - у тебя работает? у тебя кварц 8MHz? А шилд, как у меня на фото?
Цитата:
|
Disgraced у меня шилд с кнопками вообще.
Но это не важно! Кварц у меня 8мегагерц так что качай по ссылке библиотеку и заливай мой скетч. И да, у меня после этого заработало, но только я увидел то что мне не нужно :) На магнитоле FT CAN так что надо шилд допилить. Микруху уже заказал, через пару недель приедет. |
Цитата:
Я уже в отчаянии. |
я знаю с кем тебе поговорить https://www.drive2.ru/b/1567416/
)) |
Disgraced
5V========5V GND======GND D3========D3 (INT) D9========D9 D10=======PMW10 D11=======PMW11 D12=======12 D13=======13 Так подключи! И кварц 8МгЦ верни на место. А шилд у тебя такой же как и у меня. Отпиши результат. У тя походу каких-то соединений не хватает. Чем так мучится купил бы уже UNO :) Не так дорого это стоит. |
Цитата:
Но в любос случае пока никаких результатов. УНО бы купил, если бы мог быть уверен, что это поможет. В конечном итоге, я бы хотел получить готовое устройство на одной плате - т.е. микрухи от шилда и ардуины спаяные вместе, без лишних компонентов и контактов. |
Цитата:
http://content.foto.my.mail.ru/mail/...leon/i-618.jpg http://content.foto.my.mail.ru/mail/...leon/i-619.jpg |
Достал Ардуино Уно, испробовал кучу разных библиотек, результат нулевой.
По прежнему не хочет инициализировать шину. Похоже проблема в шилде. Bersenev не могли бы вы дать схему по которой собирали свою щилду? |
Цитата:
|
Цитата:
Тоже вмешаюсь в разговор. Не так давно мутил проектик для своей ауди. Тоже весь мозг сломал по поводу can сниффилки. Купил шилд и ардуину - не мог подружить. Что только не делал. И кварц менял и трансивер... После 2 недель пыток пришла мысль о том, что шилд мертв. Шилд, кстати, был такой-же, как у тебя... Покупал я его в России. Было безумно жалко денег на новый шилд. Порылся на алиекспрессе и нашел дешманские варики. И купил сразу по 5 штук:) Ардуина нано http://ru.aliexpress.com/item/Nano-3...659109175.html 151руб штучка CAN шилд http://ru.aliexpress.com/item/5pcs-l...259606078.html 200рублей штучка. С этим всем заработало почти сразу... Вот мои комменты: 0. Если ни с какими либами шилд не хочет инициализироваться - либо мертв шилд, либо не корректное подключение... 1. Перед включением еще раз проверяем провода. В моем случае ардуина питалась от USB, а шилд от ардуины. Соединяем MOSI, MISO, SCK, +5 и землю. Любой не задействованный DigitalPin в качестве CS для модуля (его же и в скетче указываем). INT по началу можно вообще не использовать. 2. Для общения с машиной нужно только 2 провода CanH и CanL. Общая земля с машиной не нужна. Скорее всего от общей земли с машиной у меня умер трансивер на первом шилде. Если попутать H и L - ничего страшного не будет. Шилд инициализнется, но данных не будет. 3. Важно выбрать нужную либу - если кварц на 8мгц - нужна соответствующая либа. Почти все либы в нете на 16мгц. Просто замена кварца на 16мгц не приносила результатов. Если кварц не совпадает с либой, то инициализация все равно проходит успешно... только данных нет никаких... или в шину начинает что-то срать - аж блоки теряются. 4. В некоторых либах фильтры изначально настроены так, чтобы ничего не принимать (нужно глядеть код либы). В этом случае инициализируем их, чтобы принимать все: CAN.init_Mask(0, 0); CAN.init_Filt(0, 0, 0); CAN.init_Mask(1, 0); CAN.init_Filt(1, 1, 0); 5. И самое важное. В некоторых автомобилях (к примеру у меня в AUDI) на диагностическом разъеме (ODB) нет вообще ничего и работает он в режиме запрос-ответ. Т.е. если у диаг шины ничего не спросить - то будет тишина. Поэтому нужно вкурить место подключения. У меня 4 различные шины (моторная, комфорт, инфотеймент и диагностическая). Нужно понимать, что не во всех шинах есть вся информация... И скорости у шин могут быть разные. У меня часть 100, часть 500... Если интересно, то могу прислать фотку с подключением, либу и скетч... |
А, забыл добавить про терминирующий резюк.
Если подключаться ВМЕСТО устройства или в диаг разъем - то терминирующий резюк нужен. В общем случае 120 ом. Но, судя по спецификации, у меня в ауди нужно 60 ом. Если подключаться ВМЕСТЕ (параллельно) с устройством - то терминатор не нужен. И еще одно. Проводки CAN шины должны быть витой парой. Я по началу подцепил 2 проводка и не скрутил их. С не скрученными проводками длиною 30см у меня портились данные... |
olegik_ah, тоже использую нано и почти такой же кан-модуль :good: Все думаю как их между собой закрепить, сейчас просто болтаются на проводках, как решил этот вопрос?
|
У меня что-то китайский NANO не пошел...драйвера под Win не ставятся, всякие пробовал - на видит его комп. Кто какие подсовывал драйвера?
ПроМикро (Леонардо) нормально определяется, но с ним точно такая же ситуация как автора поста - нет инициализации с шилдом. MCP2515 + TJA1050 (с кварцем на 8МГц) и пробовал со вторым MCP2515 + 2551 с кварцем на 16МГц - глухо... |
Цитата:
|
Цитата:
Внутри выглядит не очень... Но снаружи вполне достойно |
Цитата:
|
Цитата:
Подробнее http://arduino-project.net/driver-ch340g/ |
Цитата:
По итогу для моей тачки (как выяснилось потом) TJA вполне подходит... Но я то этого не знал еще. Взял какой-то блок со свой машины и разобрал его с целью посмотреть что VAG ставит в качестве трансивера - выяснил, что используется MCP2551 (не путать с контроллером MCP2515). MCP2551 1 в 1 по распиновке подходит вместо TJA1050... Но это все имеет смысл ТОЛЬКО если инициализация проходит успешно, но нет данных!!! Если инициализации нет - то еще раз повторюсь - либо не так подключен шилд к ардуине, либо контроллер MCP2515 мертв. И про терминатор не забываем тоже. Особенно на быстрых шинах. Если подключаемся куда-то в шину, то он скорее всего не нужен. Если вместо какого-то устройства или в диаг разъем - то точно нужен. Но пляски с терминатором тоже имеют смысл, если инициализация есть, но данных нет. |
olegik_ah, стабилизатор ардуиновский разве не потянет блютус и КАН, а то может без DC-DC обойтись можно? У себя хочу немного напругу сбить 4 диодами, чтобы не выше 12 в было при работающем генераторе. Преобразователь городить не хочется.
[оффтоп] Какое ГУ в Ауди, не как у остальных VAG? |
Инициализация шилда прошла, после того как сменил ПроМикро на Нано:
CAN BUS Shield init ok! Больше в мониторе ничего нет. На 4-пине MCP2551 есть пачки импульсов во время нажатия кнопок, если не нажимать, то тишина... |
Цитата:
Что такое ГУ? |
Вложений: 2
Цитата:
В аттаче моя либа и скетч. Либа не типовая - взял какую-то с гитхаба и ее под себя немного допилил. Обрати внимание на строчку CAN.begin(CAN_100KBPS, MCP_8MHz) Первый параметр - скорость шины, второй - тип кварца (MCP_16MHz или MCP_8MHz) на шилде. Либа и скетч 100% рабочие - проверено на разных тачках, на разных шинах, на разных кварцах... |
Цитата:
ГУ - головное устройство, магнитолка. |
Часовой пояс GMT +4, время: 12:55. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot