ARDUINO в качестве бортового компьютера для автомобиля.

Аватара пользователя
DrMario
Лейтенант
Сообщения: 371
Зарегистрирован: 07.11.2016{, 13:11}
Репутация: 58
Откуда: Камень-на-Оби
Имя: Евгений
Контактная информация:

ARDUINO в качестве бортового компьютера для автомобиля.

#121

Сообщение DrMario » 09.08.2017{, 09:51}

Andrej писал(а):Все верно! Я использую протокол 5 - ISO 14230-4 KWP (fast init, 10.4 Kbaud) с устойчивой скоростью ( не путать с максимальной) 10400Kb. Но так как в ФЛпрог нет такой скорости, я использовал 9600, это ближе к тем параметрам что заявил разработчик ЭБУ. У меня раз получилось подцепиться, но как вы уже знаете ноут разрядился.Вот по такой схеме у меня получилось. диск. Возможно я что то перемудрил, но спрашивать нестал. Схема примерная, так как я порядком трех часов что то изменял, корректировал. Изменения помоему только в данных. Ну может что то из блоков добавил.
Упс!
В Вашем случае НЕЛЬЗЯ использовать скорость обмена данными 9600. Все данные будут кривые. В ФЛПроге нет  возможности устанавливать произвольную скорость обмена, я об этом полгода назад высказывал пожелание но осталось без ответа. В этом случае перед заливкой скетча в ардуину необходимо находить строку где указана скорость и руками привить на 10416.
На скорую руку набросал пример инициализации и отправку данных. Обмен с К линией сделан на блоке пользователя со встроенным расчетом и добавлением к отправляемым данным КС. В качестве КОМ порта со стороны К линии применен AltSoftSerial, описание и библиотеку найдете в сети.
Сделан расчет и обработка запрашиваемых данных, для правильного заголовка КВП протокола.
Для инициализации использован дополнительный вывод, сигнал с которого через резистор 1К необходимо подать на базу NPN транзистора. Коллектор непосредственно на К линию, эммитер на массу.
Скорее всего сразу не заработает, сомневаюсь что вообще заработает на слабом камне. Временные интервалы на слабых контроллерах будут плавать. Для этих целей желательно использовать Arduino DUE.
По ходу нашел ошибку. В коммутаторе вместо 81 запишите C133F181, и не пользуйтесь встроенным монитором КОМ порта! Он на конце добавляет перенос строки и отправляемые данные будут кривые.
А КС вычисляется очень просто. Если пакет вот такой C133F181 то в калькуляторе в режиме Hex складываем все байты, получается 266, откидываем двойку - остается 66. Это и есть КС
Вложения
KWP2000_10416_A.flp
(1.3 МБ) 100 скачиваний
Последний раз редактировалось DrMario 09.08.2017{, 10:03}, всего редактировалось 1 раз.

Andrej
Рядовой
Сообщения: 84
Зарегистрирован: 13.07.2017{, 17:30}
Репутация: 0

ARDUINO в качестве бортового компьютера для автомобиля.

#122

Сообщение Andrej » 09.08.2017{, 20:25}

Библиотека AltSoftSerial.h не работает. Уже и на портативной версии попробовал, не найдена. Хотя она есть там.

Добавлено (09.08.2017, 20:22)
---------------------------------------------
DrMario писал(а):НЕЛЬЗЯ использовать скорость обмена данными 9600
Согласен, но выбора нет. При ручной правке ругается.
DrMario писал(а):На скорую руку набросал пример инициализации и отправку данных.
Это для кабеля который еще в пути. В моем случае я использую высокоуровневый компаратор. Это не прокатит наверно. Да и стринг он не поймет, так как не имеет своего дешифратора.
DrMario писал(а):В качестве КОМ порта со стороны К линии применен AltSoftSerial, описание и библиотеку найдете в сети.
Нашел, почитал. Честно, смутно понял. Буду еще читать и пытаться понять. Блок хорош, но вот его я совсем не понял. Если не против я почитаю еще и потом позадаю вопросы по блоку.
DrMario писал(а):Для инициализации использован дополнительный вывод, сигнал с которого через резистор 1К необходимо подать на базу NPN транзистора. Коллектор непосредственно на К линию, эммитер на массу
DrMario писал(а):В коммутаторе вместо 81 запишите C133F181, и не пользуйтесь встроенным монитором КОМ порта! Он на конце добавляет перенос строки и отправляемые данные будут кривые.
У меня тоже резал, пока не понял что ему надо дать время перейти в готовность. В той версии уже помоему не резало. 
А перенос строки вроде же отключен в блоке! Он получается не отключается?

Добавлено (09.08.2017, 20:25)
---------------------------------------------
Два блока очень заинтересовали которых нет у меня. Спасибо! 
Перечитал еще раз описание, я был не прав!!! Пошел изучать и пробовать эксперементировать. Спасибо!!! Если что добьюсь сразу напишу.

Аватара пользователя
DrMario
Лейтенант
Сообщения: 371
Зарегистрирован: 07.11.2016{, 13:11}
Репутация: 58
Откуда: Камень-на-Оби
Имя: Евгений
Контактная информация:

ARDUINO в качестве бортового компьютера для автомобиля.

#123

Сообщение DrMario » 10.08.2017{, 17:32}

Andrej писал(а):У меня тоже резал, пока не понял что ему надо дать время перейти в готовность. В той версии уже помоему не резало. А перенос строки вроде же отключен в блоке! Он получается не отключается?
Вы путаете прием и передачу данных. Если отправлять монитором порта, встроенным в Arduino CC, то вместе с данными в конце строки посылаются служебные символы переноса строки или возврата каретки (не помню уже).
Положите библиотеку AltSoftSerial сюда
c:\Program Files\Arduino\libraries\
и заново подключите библиотеку в блоке пользователя, должно все заработать.
Работает этот виртуальный порт очень просто, даже не нужно указывать выводы RX и TX. Они зависят от платы Arduino.
Вот из описания

// AltSoftSerial always uses these pins:
//   http://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
// Board          Transmit  Receive   PWM Unusable
// -----          --------  -------   ------------
// Teensy 3.0 & 3.1  21        20         22
// Teensy 2.0         9        10       (none)
// Teensy++ 2.0      25         4       26, 27
// Arduino Uno        9         8         10
// Arduino Leonardo   5        13       (none)
// Arduino Mega      46        48       44, 45
// Wiring-S           5         6          4
// Sanguino          13        14         12

Andrej
Рядовой
Сообщения: 84
Зарегистрирован: 13.07.2017{, 17:30}
Репутация: 0

ARDUINO в качестве бортового компьютера для автомобиля.

#124

Сообщение Andrej » 13.08.2017{, 10:44}


Не выходит. Пишет что библиотека не найдена и ошибка в строке. Уже дней 5 читаю форум и пробую.

Добавлено (13.08.2017, 10:28)
---------------------------------------------
Даже винду переустановил и на флешку порт программы установил, бесполезно.

Добавлено (13.08.2017, 10:44)
---------------------------------------------
Пишет теперь 
'Serial3' was not declared in this scope
«Serial3» не был объявлен в этой области
Что не так? 
Разобраться помог знакомый. Удаленным доступом починил. Что то говорил про кривой сертификат.
Вложения
4373493.jpg

Аватара пользователя
DrMario
Лейтенант
Сообщения: 371
Зарегистрирован: 07.11.2016{, 13:11}
Репутация: 58
Откуда: Камень-на-Оби
Имя: Евгений
Контактная информация:

ARDUINO в качестве бортового компьютера для автомобиля.

#125

Сообщение DrMario » 13.08.2017{, 12:22}

Упс!
В блоке пользователя ошибочка вышла. Блок был предназначен для ардуины с несколькими портами. Из этого блока я переделал на AltSoftSerial.
В блоке пользователя во вкладке LoopSection замените Serial3 на altSerial.
Скорость обмена порта 0 (Ардуино - Компьютер) установите 38400 ну или еще выше.

Andrej
Рядовой
Сообщения: 84
Зарегистрирован: 13.07.2017{, 17:30}
Репутация: 0

ARDUINO в качестве бортового компьютера для автомобиля.

#126

Сообщение Andrej » 13.08.2017{, 13:33}

DrMario писал(а):Скорость обмена порта 0 (Ардуино - Компьютер) установите 38400 ну или еще выше.
Вот это не понял где менять.

Andrej
Рядовой
Сообщения: 84
Зарегистрирован: 13.07.2017{, 17:30}
Репутация: 0

ARDUINO в качестве бортового компьютера для автомобиля.

#127

Сообщение Andrej » 13.08.2017{, 17:19}

Тут тоже править?

Добавлено (13.08.2017, 13:55)
---------------------------------------------
Вот честно, не могу понять блок. Да и саму схему не разберу. 

1. По короткому импульсу на входе (Open) открывается КОМ порт. По импульсу на входе (Close) закрывается. На входе Baud указывается скорость для обмена данными с ECU.
Ладно, (открыть-закрыть), по теории-подаем питание на вход, происходит инициализация ардуины, таймер задержки в 500мс отсчитав время дает добро работе генератора, тот генерирует импульсы 25мс до появления на логике импульса что ЭБУ ответила, далее запрос на инициализацию, получение ответа, переключение логики на следующий цикл. Это я так понимаю. 
Я уже если честно запутался и создается такое ощущение что я никогда не смогу собрать.

Добавлено (13.08.2017, 16:53)
---------------------------------------------
Не подключается. Что то не то. Почему данные вы решили отправлять без контрольной суммы??? Когда протокол GM четко регламентирует контрольную сумму и перые 3 байта!!! Без этих чисел он вообще не поймет кто мы и что хотим! Далее откуда вы взяли 0010? Для какого потдержания? Мы сейчас работаем через компаратор, а это как с профессором по ФЕНЕ ботать. А далее я вообще запутался. 

Добавлено (13.08.2017, 17:00)
---------------------------------------------
Есть такой анегдот.
Сидит Данила мастер, справляет нужду.
Подходит к нему хозяйка медной горы и спрашивает так нежно.
-Что, Данила мастер? Не выходит каменный цветок?
А Данила мастер ей натужно отвечает.
-Не выходииит!

Так же и у меня.  

Добавлено (13.08.2017, 17:19)
---------------------------------------------
При все при этом в готовых данных к отправлению стоит C0233F1. Что то совсем данные не похожи на 8111F18104. 
В общем я совсем не понял блок. Не понял как оно работает и с чего вы взяли что ЭБУ отзовется на C0233F1. При попытке подсунуть нужный HEX выходит билиберда, 802111F18104. С блоком сложения совсем даже мыслей нет что он складывает. 
Кто бы знал, как я расстроился. Прям руки опускаются.
СпойлерПоказать
7738713.png

Аватара пользователя
dekorator
Лейтенант
Сообщения: 427
Зарегистрирован: 06.09.2015{, 09:39}
Репутация: 7
Откуда: Баку

ARDUINO в качестве бортового компьютера для автомобиля.

#128

Сообщение dekorator » 13.08.2017{, 19:55}

Друзья. Небольшой совет. Нельзя без большого "гемороя" использовать при отправке и приёме строковые блоки ( у которых зелёненькие соединения ). Там другой формат данных.

Andrej
Рядовой
Сообщения: 84
Зарегистрирован: 13.07.2017{, 17:30}
Репутация: 0

ARDUINO в качестве бортового компьютера для автомобиля.

#129

Сообщение Andrej » 13.08.2017{, 20:04}

dekorator писал(а):Нельзя без большого "гемороя"
Это как раз и понятно. Вопрос в инициализации. Как ни странно про инициализацию все вскользь упоминают, мол было, делали. А как и что все молчат.

Аватара пользователя
DrMario
Лейтенант
Сообщения: 371
Зарегистрирован: 07.11.2016{, 13:11}
Репутация: 58
Откуда: Камень-на-Оби
Имя: Евгений
Контактная информация:

ARDUINO в качестве бортового компьютера для автомобиля.

#130

Сообщение DrMario » 13.08.2017{, 22:15}

Andrej писал(а):Не подключается. Что то не то. Почему данные вы решили отправлять без контрольной суммы??? Когда протокол GM четко регламентирует контрольную сумму и перые 3 байта!!! Без этих чисел он вообще не поймет кто мы и что хотим! Далее откуда вы взяли 0010? Для какого потдержания? Мы сейчас работаем через компаратор, а это как с профессором по ФЕНЕ ботать. А далее я вообще запутался.
Смотрите внимательно, в блоке пользователя на входе CR стоит true. Это как раз режим добавления КС.
Читайте стандарт OBD-II на англицком, в русской версии много пропущено. Команда 0100 это запрос первых 20 ПИДов параметров по общему протоколу. Этот запрос обязателен для всех автомобилей, которые поддерживают общий протокол.
dekorator писал(а):Друзья. Небольшой совет. Нельзя без большого "гемороя" использовать при отправке и приёме строковые блоки ( у которых зелёненькие соединения ). Там другой формат данных.
Все верно, как раз в блоке происходит преобразование строчных данных в Hex.
Andrej писал(а):При все при этом в готовых данных к отправлению стоит C0233F1. Что то совсем данные не похожи на 8111F18104. В общем я совсем не понял блок. Не понял как оно работает и с чего вы взяли что ЭБУ отзовется на C0233F1. При попытке подсунуть нужный HEX выходит билиберда, 802111F18104. С блоком сложения совсем даже мыслей нет что он складывает.
Кто бы знал, как я расстроился. Прям руки опускаются.
Учите формат сообщений протокола KWP2000. Там есть два типа заголовков, с доп. байтом указателя количества отправляемых данных и без. Я ничем больше помочь не смогу. Все необходимое для установки соединения по этому протоколу есть в этой теме.
В моем примере много чего не сделано, я привел лишь пример для первого шага.
Andrej писал(а):Тут тоже править?
Эта вкладка в блоке не активна, коменты стоят везде 
А вообще лучше использовать интерфейс ELM-327 как я выше предупреждал.
Последний раз редактировалось DrMario 13.08.2017{, 22:19}, всего редактировалось 1 раз.

Andrej
Рядовой
Сообщения: 84
Зарегистрирован: 13.07.2017{, 17:30}
Репутация: 0

ARDUINO в качестве бортового компьютера для автомобиля.

#131

Сообщение Andrej » 14.08.2017{, 17:29}

DrMario писал(а):в русской версии много пропущено.
Вы смотрели выкладку что снял с общения компа и ОБД? Там есть только отправка соеденения. Я попробую еще раз и через кабель когда прийдет. Есть вариант через галетту попробовать, но там выход как раз не очень прямой, нужны дрова с библиотеками.
DrMario писал(а):Учите формат сообщений протокола KWP2000.
Я почитаю. Но или не то читал или не там, не припомню про доп байт. 
И спасибо огромное за помощь и за терпение!

Аватара пользователя
DrMario
Лейтенант
Сообщения: 371
Зарегистрирован: 07.11.2016{, 13:11}
Репутация: 58
Откуда: Камень-на-Оби
Имя: Евгений
Контактная информация:

ARDUINO в качестве бортового компьютера для автомобиля.

#132

Сообщение DrMario » 14.08.2017{, 23:01}

На протоколе KWP2000 ответ от блока может содержать большОе кол-во байт данных. В этом случае в  ответах (запросах и ответах) добавляется дополнительный байт. Он несет в себе информацию о количестве байт данных в сообщении и добавляется после 3 байт заголовка. В таком формате ЭБУ может передать до 250 байт в одном сообщении.
Обычно обмен данными имеет такой вид.
Запрос:C2 33 F1 01 00 E7
Ответ:86 F1 11 41 00 BE 3E B8 11 8E
Если отправляемую строку разобрать по частям, то получим:
C2 33 F1 - это заголовок, который в свою очередь состоит из несколько частей. Второй символ первого байта указывает на кол-во отправляемых байт данных (это 2 байта).
Второй и третий байты указывают на адрес приемника и адрес тестера.
01 00 - это сами запрашиваемые данные.
E7 - это контрольная сумма.
Ответ от ЭБУ раскладывается по похожему принципу.
86 F1 11 - заголовок, в котором второй символ первого байта указывает на шесть байт данных в сообщении. Второй и третий байты указывают на адрес тестера и адрес ЭБУ.
41 00 BE 3E B8 11 - это строка из 6 байт, в которой первые два байта 41 00 - это "зеркало" запрашиваемых байт с обязательным добавлением к первому байту 40h (запрос был 01 00).
8E - это КС.
Второй тип сообщений с добавлением доп. байта будет выглядеть примерно так:
Запрос:82 0F F1 1A 90 2C
Ответ:80 F1 0F 0D 5A 90 54 42 48 34 4D 33 34 20 20 20 20 BD
Ответ раскладывается так:
80 F1 0F - это заголовок для этого типа сообщений. Второй символ первого байта обязательно будет равен нулю.
0D - это тот самый доп. байт, указывающий на кол-во байт данных в сообщении (0D = 13)
5A 90 54 42 48 34 4D 33 34 20 20 20 20 - это 13 байт данных, из которых 5A 90 - зеркало запрашиваемой команды 1A 90 с обязательным добавлением к первому байту 40. И сами полезные данные, это строка из 11 байт 54 42 48 34 4D 33 34 20 20 20 20.
BD - это последний байт строки, который указывает на КС.
На некоторых машинах такой же формат имеют и запрашиваемые сообщения. Для других протоколов сообщения выглядят немного иначе.
В этой теме я выкладывал документ с описанием интерфейса ELM-327. Там можно подробнее посмотреть.
В этот интерфейс уже вложен весь "расклад" для многих протоколов включая КАН шину. Работать с ним намного проще, чем самому формировать строки для всех протоколов.
Последний раз редактировалось DrMario 14.08.2017{, 23:08}, всего редактировалось 1 раз.

Andrej
Рядовой
Сообщения: 84
Зарегистрирован: 13.07.2017{, 17:30}
Репутация: 0

ARDUINO в качестве бортового компьютера для автомобиля.

#133

Сообщение Andrej » 17.08.2017{, 19:35}

Да. Я просто забыл, я читал это. На запрос 0210 выдает кучу информации о состоянии. Все же видно микруха не подходит, буду ждать кабель. Уже на таможне судя по трэку. Еще обещали дать галетту, думаю опробовать.

Добавлено (17.08.2017, 19:35)
---------------------------------------------
Как ни странно, но Galetta1260 пришла быстрее чем шнурок. Просто один человек подарил. Шнурок еще на таможне висит. 
Теперь поправте меня если я не прав. USB typ B на ардуине это же UART? Он же SERIAL 0? То есть я могу через переходник соединиться с галеттой и попробовать получить данные от ЭБУ?

Аватара пользователя
DrMario
Лейтенант
Сообщения: 371
Зарегистрирован: 07.11.2016{, 13:11}
Репутация: 58
Откуда: Камень-на-Оби
Имя: Евгений
Контактная информация:

ARDUINO в качестве бортового компьютера для автомобиля.

#134

Сообщение DrMario » 18.08.2017{, 10:28}

Что имеется ввиду USB typ B я не знаю. SERIAL 0 - это порт для подключения к компьютеру. Через него еще заливается скетч. На порты ALTSERIAL или COM1-COM3 как в ардуине Mega2560 или DUE можно вешать разные устройства. Подключить к нулевому порту какое нибудь устройство у меня не получилось.
Последний раз редактировалось DrMario 18.08.2017{, 10:30}, всего редактировалось 1 раз.

Andrej
Рядовой
Сообщения: 84
Зарегистрирован: 13.07.2017{, 17:30}
Репутация: 0

ARDUINO в качестве бортового компьютера для автомобиля.

#135

Сообщение Andrej » 25.08.2017{, 19:15}

Ясно, спасибо. Тогда жду шнурок. Сегодня получил сообщение что прошел таможню.

Добавлено (22.08.2017, 10:08)
---------------------------------------------
Кстати да. Вы были правы. Попробовал с галлетой, ничего не вышло. Даже не отзывается. Там надо скорее всего драйвера, а rx-tx с нее взять нет возможности. Там чип хитрый.

Добавлено (24.08.2017, 12:59)
---------------------------------------------
Пришел шнурок, но там не PIC контроллер, а какая то Icar 01. Даташит особо не искал, решил не заморачиваться и снять с FT232 на входе
Последний раз редактировалось Andrej 25.08.2017{, 19:28}, всего редактировалось 1 раз.

Andrej
Рядовой
Сообщения: 84
Зарегистрирован: 13.07.2017{, 17:30}
Репутация: 0

ARDUINO в качестве бортового компьютера для автомобиля.

#136

Сообщение Andrej » 01.09.2017{, 17:59}

Я сдался. Не получается. Многие говорят что на этой не собрать, только код.
Последний раз редактировалось Andrej 01.09.2017{, 18:00}, всего редактировалось 1 раз.

Аватара пользователя
DrMario
Лейтенант
Сообщения: 371
Зарегистрирован: 07.11.2016{, 13:11}
Репутация: 58
Откуда: Камень-на-Оби
Имя: Евгений
Контактная информация:

ARDUINO в качестве бортового компьютера для автомобиля.

#137

Сообщение DrMario » 02.09.2017{, 05:39}

На базе простенькой ардуины управляемый интерфейс (по типу ELM-327) не сделать. Об этом я говорил с самого начала. У меня что-то подобное получилось сделать только на ардуине дуе, а это совсем другой контроллер.
Оставьте эту затею. На основе простенькой ардуины конечно можно выводить данные двигателя на дисплей, только нужно в качестве интерфейса использовать уже готовый адаптер ELM-327. Для этого по КОМ порту необходимо соединить ардуину и ELM-327 и управлять ей при помощи АТ команд.
Последний раз редактировалось DrMario 02.09.2017{, 05:41}, всего редактировалось 1 раз.

Andrej
Рядовой
Сообщения: 84
Зарегистрирован: 13.07.2017{, 17:30}
Репутация: 0

ARDUINO в качестве бортового компьютера для автомобиля.

#138

Сообщение Andrej » 02.09.2017{, 20:44}

DrMario писал(а):АТ команд.
А блоки есть для этого? Можете набросать одну плату отправки и приема как пример? Стас обещал подарить НС-05... 
Кстать он тоже говорил что не выйдет. А я все надеялся... Кстати он предположил что может выйти на МЕГЕ, но говорит что не на китайской. Говорит что на китайской такт срывается. Как думаете, он прав?

injener
Сержант
Сообщения: 105
Зарегистрирован: 23.10.2016{, 09:42}
Репутация: 2

ARDUINO в качестве бортового компьютера для автомобиля.

#139

Сообщение injener » 30.09.2017{, 16:56}

Помогите, код 

Код: Выделить всё

serout2 PORTC.6, speed, [$81,$10,$F1,$81,$03] //посылка в микас команды StartCommunication
в блок внедрить.
Написал так 

UART=1; //лог еденица на вих к-лайн 
delay(300); //пауза 300мс
UART=0; //лог ноль на вих к-лайн 
delay(25000); //пауза 25000 мкс, время TiniL 
UART=1; //лог еденица на вих к-лайн 
delay(24000); //пауза 24000 мкс 
а дальше идет код Код
UART, speed, [$81,$10,$F1,$81,$03] //посылка в микас команды StartCommunication
 и на ней идет ошибка компиляции.
Пробовал по разному и все равно ошибка. Выход у меня UART обзывается.

Добавлено (30.09.2017, 16:56)
---------------------------------------------
Купил Андрюхе леонардо, вот пытаемся два неуча что то сообразить... Самому интересно что получится...

DrMario
Блок не для KWP Fool, а для KWP1 и соответственно он работать не будет. Протокол работы ДРУГОЙ!!! Нет там потдержки работы!
Последний раз редактировалось injener 30.09.2017{, 16:52}, всего редактировалось 1 раз.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

ARDUINO в качестве бортового компьютера для автомобиля.

#140

Сообщение rw6cm » 01.10.2017{, 01:31}

injener писал(а):Пробовал по разному и все равно ошибка.
Может все же delay(25); а не delay(25000);
Но а код должен быть как то так:
char bytes[]= {129,241,16,129,03,0};
Serial.write(bytes);
Скорость вроде как 38400
Serial.begin(38400);
Но не факт что прокатит.
Последний раз редактировалось rw6cm 01.10.2017{, 01:39}, всего редактировалось 1 раз.
Win10-64, FLProg (portable)

Ответить

Вернуться в «Проекты различных устройств на Arduino»