Страница 1 из 3

Бортовой компьютер

Добавлено: Чт окт 09, 2014 12:57:47
Mishultz
Доброго дня уважаемые форумчане!

Встречайте новую версию БК для тех, у кого руки растут из правильного места! Бам-Бара-Бам!

Ну а если серьезно, прошу без сарказма оценить мою новую, скромную поделку. Видимо, я плотно подсел на эти железки, до тех пор, пока не куплю себе приличный автомобиль.

Итак: "Car monitor 2".

Изображение

Прошу сильно не пинать, за дизайн и исполнение корпуса.

Основные характеристики прибора и отличия от прежней версии:
Описание первой версии БК здесь.
- Графический, инверсный ЖК дисплей 128 x 64 точки (бело — синий).
- Пять кнопок управления.
- Встроенный пъезо-динамик.
- Встроенный слот для микро-SD карты памяти. (Для хранения голосовых сообщений и возможной записи треков поездки. <Пока не реализовано.>).
- Светодиодная подсветка кнопок управления и индикация обмена с ЭБУ.
- Регулировка яркости и контрастности экрана.
- Полноценное, многоуровневое экранное меню для настройки прибора, параметров вычислений и отображаемой информации.
- Разъем mini-USB, для прошивки. Возможно, при условии дальнейшего развития проекта, через этот разъем, будет реализован доступ к встроенной SD карте и прямая связь с K-L модулем для получения диагностической информации на планшете или ноутбуке.
- Работа напрямую с ЭБУ(ECU) автомобиля по K-L линии, с помощью внутреннего, съемного модуля преобразования интерфейсов (UART <> K-L линия).
- Поддержка протоколов связи: ISO 14230-4 (KWP2000) и ISO 9141-2.
- Отображение значений 18 из 79 заложенных стандартных параметров ЭБУ и 12 расчетных параметров расхода топлива, в разрезах: За поездку; С момента последней заправки; С момента запуска двигателя (текущий выезд).
- Отображение и сброс кодов ошибок ЭБУ (гашение лампочки ”Check engine”).
- Аппаратное измерение и отображение напряжения на АКБ (используется АЦП контроллера).
- Четыре режима отображения информации:
1. 3 листаемых страницы по 6 параметров на странице.
2. Отображение значения одного параметра крупным шрифтом.
3. Графическое отображение значения одного параметра в виде слайдера имитирующего прибор приборной панели АМ.
4. Отображение значения параметра в виде графика в реальном времени.
 В виде слайдера и графика могут отображаться только те параметры, для которых настроены верхняя и нижняя границы значений и шаг сетки графика, в меню настроек свойств параметров. Для тех параметров, для которых это имеет смысл, при прошивке прибора, устанавливаются адекватные значения этих настроек по умолчанию.
- Переключение режимов отображения одной кнопкой. Для перелистывания страниц и переключения одиночных параметров — две другие кнопки(вверх, вниз).
- Назначение кнопок зависит от контекста выполняемой задачи. В режиме отображения параметров — одно, в режиме меню — другое, в режиме корректировки настроек — третье. Текущее назначение кнопок поясняется пиктограммами в нижней строке экрана над кнопками. Крайняя, пятая кнопка, во всех режимах служит для циклического переключения яркости экрана.
- Кнопки управления выполнены на отдельной плате и используют только 3 сигнальных пина контроллера. Две «лишних» кнопки делят по паре пинов с другими кнопками через диоды. При нажатии на одну из них происходит эффект одновременного нажатия двух кнопок из первой тройки.
- Включение и выключение прибора осуществляется поворотом ключа зажигания.
- Задержка выключения с отображением основных показателей выезда: пробег за выезд, общий расход топлива, холостой расход. Время задержки регулируется в настройках.
- При выключении прибора, запоминаются текущий режим отображения, текущая страница или текущий отображаемый параметр и текущая настройка уровня яркости экрана. Благодаря этому, при следующем включении, экран выглядит так-же, как перед выключением.
- Используется контроллер Atmega1284 (44 ноги TQFP), но вполне можно заменить на Atmega644 в таком-же корпусе.
- Размер прошивки на момент написания статьи — 46 790 байт.
- Подача напряжения питания на контроллер контролируется самим контроллером через MOSFET транзистор. Схема выполнена на отдельной плате коммутации.
- К АМ прибор подключается шестижильным телефонным проводом с вилкой 6P6C (RJ25). На плате коммутации имеется соответствующая розетка. Этот разъем мне понравился своей компактностью и тем, что вилка практически полностью прячется в корпусе, не выпирает и не выскакивает. Под панелью приборов в машине спрятана маленькая распаячная коробочка. С одной стороны на ней такая-же как в приборе розетка 6P6C, с другой клеммник на 6 проводов. К клеммнику подключаются 4 провода от диагностического разъема: земля, L, K, +12в АКБ и еще 2 провода: «+»от замка зажигания и «+»бортовой сети. Эти провода протянул от магнитолы. В распаячной коробке, в разрыв цепи «+»бортовой сети, установлено токопонижающее сопротивление — 24om, 2W.
- Все платы покрыты китайской однокомпонентной защитной краской синего цвета, затвердевающей под ультрафиолетом. С помощью этой краски, напечатанных на пленке шаблонов и ультрафиолетовой лампочки сделаны паяльные маски. Краска, надо сказать, полное Г. Пока таскал плату в кармане вместе с ключами к машине и обратно, защитный слой местами отвалился.
- Отдельный модуль K-L линии сажается на плату контроллера в цанговый разъем. В этот разъем можно подключить какой-нибудь другой модуль связи. Например с модулем HC-05 на борту и связь держать по Bluetoth через ELM-327BT, как в прежней версии БК (необходимо только подправить прошивку). Все необходимые сигналы и напряжения в разъеме имеются.

Модуль K-L линии:

- K линия управляется специализированной микросхемой L9637D (цена: 40руб в «chipdip»).
- L линия гальванически развязана оптопарой.
- Отдельное управление подключением L линии осуществляется контроллером через транзистор, коммутирующий «землю» входной цепи оптопары.
- Управление подачей +12В питания интерфейса от диагностического разъема на модуль, осуществляется контроллером через MOSFET. При выключении прибора, контроллер отключает модуль, иначе — будет сажать аккумулятор.
- На плате модуля запаян делитель напряжения с защитным стабилитроном и выходом для подключения к АЦП контроллера (для измерения напряжения).

А теперь, оставшиеся недоделки:

Была задумка, прикрутить голосовые предупреждения о критических ситуациях: Критическое понижение температуры за бортом (гололед); Перегрев охлаждающей жидкости; Снижение заряда АКБ; Критический остаток топлива в баке... В настоящее время разбираюсь с чтением/записью на SD карту для чтения WAV файлов. С забортной температурой вышел полный облом: на машине не предусмотрено датчика наружной температуры и поэтому ЭБУ не поддерживает этот параметр. Для подключения внешнего датчика к контроллеру, у последнего не осталось свободных входов.

Хреново работает регулировка контрастности (хотя, в принципе и не надо). В экранчике для этого используется отрицательное напряжение от внутреннего преобразователя. По уму, здесь нужен цифровой потенциометр, но на момент разводки платы у меня в запасе и во всех, двух радиомагазинах города, такого добра не было. Поэтому, сделал безопасную для преобразователя схему управляемую ШИМом. Но схема работает плохо — почти незаметна разница в контрастности на всем диапазоне регулировки. Теперь пришли потенциометры из интернет-магазина, но кардинально переделывать плату не хочу. Можно сделать гальваническую развязку на оптопаре или использовать полевой транзистор. Это хозяйство можно сварганить на отдельной малюсенькой платке и воткнуть вместо переменного резистора на плате контроллера. Если возникнет необходимость — буду экспериментировать, но пока и так устраивает.

Картинки:

Изображение
Изображение
Изображение
Изображение
Изображение
Изображение
Изображение
Изображение
Изображение
Изображение
Изображение
Изображение
Изображение
Изображение
Изображение

Re: Бортовой компьютер

Добавлено: Пн окт 13, 2014 08:00:33
mr_smit
Какие ЭБУ поддерживает?

Re: Бортовой компьютер

Добавлено: Пн окт 13, 2014 17:16:17
Mishultz
mr_smit писал(а):Какие ЭБУ поддерживает?
Поддерживает ЭБУ с протоколами: ISO 14230-4 (KWP2000) и ISO 9141-2. (В диагностическом разъеме должны быть K или K+L линии).
У меня на Логане стоит Siemens EMS 3132, работает.
Для Вазовских ЭБУ с модификацией KWP2000 потребуется добавить 2 строчки в программе. Пока не делал.(никто не спрашивал).

Re: Бортовой компьютер

Добавлено: Вт окт 14, 2014 08:08:21
mr_smit
Mishultz писал(а): Поддерживает ЭБУ с протоколами: ISO 14230-4 (KWP2000) и ISO 9141-2. (В диагностическом разъеме должны быть K или K+L линии).
У меня на Логане стоит Siemens EMS 3132, работает
Так так так, очень интересно, а где взяли расшифровку ответа ЭБУ? Какой байт в ответе что означает? И как подключали? Для логана я собрал спецовый переходник (там L линия по хитрому включена), подключился через DDT. Снял логи обмена, но не вникал пока. Спрашиваю потому что делал бортовик на ВАЗ под Январь и под Bosch, на Хёндэ Акцент, на Дэу Нэксия. ISO 14230 это протокол, а вот что при помощи этого протокола передается это секрет производителя.

Re: Бортовой компьютер

Добавлено: Вт окт 14, 2014 13:08:29
Mishultz
mr_smit писал(а):а где взяли расшифровку ответа ЭБУ? Какой байт в ответе что означает?
Естественно в интернете! Действительно, информация очень скудная. Сложилось впечатление, что ее специально закрывают для того, чтобы такие как мы с Вами не лезли, куда не надо с паяльниками. Но если долго рыть, то можно и нарыть ко-чего.
mr_smit писал(а):как подключали? Для логана я собрал спецовый переходник (там L линия по хитрому включена)
L линия нужна только на этапе инициализации протокола, и то только для "медленной" инициализации. Если не подать по ней совместно с K линией определенной последовательности сигналов, ЭБУ с вами общаться не будет. После инициализации L линия отключается (притягивается к "+") и в дальнейшем обмене не участвует.
mr_smit писал(а):ISO 14230 это протокол, а вот что при помощи этого протокола передается это секрет производителя.
Любой протокол подразумевает как минимум 2 уровня:
1- Физический - схемотехника, электрика.
2- Транспортный - структура пакета, адресация, контроль ошибок, разрешение коллизий, тайм-ауты.... (к вопросу какой байт что означает)
Дальше начинается самое интересное - полезная информация, ради чего все это и накручено. В нашем случае это стандарт SAE J/1979. т.н. режимы работы и стандартные PIDы (PID - Parameter Identificator) https://ru.wikipedia.org/wiki/OBD-II_PIDs ; http://elm-scanner.ru/obd-2/obd-pids . С этим и работает БК.
А вот секреты - еще дальше - т.н. нестандартные PIDs - там каждый производитель городит, что захочет и никому об этом не говорит.

Re: Бортовой компьютер

Добавлено: Вт окт 14, 2014 14:44:34
mr_smit
Сколько не пытался въехать в эти PID - нифига не понимаю. Вот например ВАЗ: тут у нас ISO14230 (документ из 4 частей). Там всё просто и понятно расписано.

Заголовок (3-х или 4-х байтный):
Первый байт: Если первые 6 бит первого байта заголовка равны 0 то длина посылки это у нас 4-й байт, если же нет - длина посылки первые 6 бит.
Второй байт: Адрес приемника
Третий байт: Адрес передатчика

Данные:
n байт

Контрольная сумма.

Пример инициализации:

Запрос - 81 10 F1 81 03
Ответ - 83 F1 10 C1 EF 8F C3

Дальше табличка где расписаны все значения:
14230.PNG
(35.5 КБ) 1303 скачивания
И так далее. Не буду углубляться.

Идем дальше. Подключился я к Логану. Смотрю обмен с самого начала. Вижу:

Запрос: 70 - что это??? Инициализация???
Ответ: 05

Запрос: 82 7A F1 21 A9 B7
Ответ: 9A F1 7A 61 A9 00 00 A1 F6 30 B9 58 2A 2A 00 30 09 00 00 03 B6 03 B6 00 00 04 CD 04 C3 7E

Запрос: 82 7A F1 21 AA B8
Ответ: 8E F1 7A 61 AA 00 00 80 80 80 00 00 54 00 00 00 00 D8

И так далее. Т.е. всё как и в запросе 14230:

21 - readDataByLocalIdentifier
А9, АА и так далее - пошли запросы по таблицам.

Причем тут тогда SAE J1979 и все эти PID? Как тогда послать запрос по SAE J1979 и разобрать ответ? И вообще если посмотреть документ SAE J1979 то выходит что все 3 стандарта имеют одинаковый формат??
SAE.PNG
(79.94 КБ) 823 скачивания
P.S. Выходит тогда согласно https://ru.wikipedia.org/wiki/OBD-II_PIDs чтобы узнать температуру двигателя я должен послать запрос:
68 6A F1 01 05 С9 ?

Re: Бортовой компьютер

Добавлено: Вт окт 14, 2014 18:27:05
Mishultz
mr_smit писал(а): Запрос: 70 - что это??? Инициализация???
Ответ: 05
Возможно. "Медленная" инициализация делается на скорости 5бод. Поэтому если смотрите на компе, на скорости 10400бод можете увидеть нечто подобное.

mr_smit писал(а): Запрос: 82 7A F1 21 A9 B7
Ответ: 9A F1 7A 61 A9 00 00 A1 F6 30 B9 58 2A 2A 00 30 09 00 00 03 B6 03 B6 00 00 04 CD 04 C3 7E

Запрос: 82 7A F1 21 AA B8
Ответ: 8E F1 7A 61 AA 00 00 80 80 80 00 00 54 00 00 00 00 D8

И так далее. Т.е. всё как и в запросе 14230:
Это вам так DDT2000 выдает? Интересно, здесь используется физическая адресация (6й бит в первом байте =0).
У меня первый байт - С2 (функциональная адресация) и TargetAddr = 33h.
Впрочем все вписывается в 14230, можно обоими способами. Только для физической адресации надо знать адреса устройств.
mr_smit писал(а): Причем тут тогда SAE J1979 и все эти PID? Как тогда послать запрос по SAE J1979 и разобрать ответ? И вообще если посмотреть документ SAE J1979 то выходит что все 3 стандарта имеют одинаковый формат??
SAE J1979 - протокол верхнего уровня, он один. А ISO 14230 или KWP2000 и ISO 9141 и другие, более современные - протоколы нижнего уровня, и являются обертками для SAE J1979. Все равно, что послать по почте одну и ту же открытку тремя разными способами: обычным письмом, авиапочтой или бандеролью.

т.е. в описанном выше запросе: 21(readDataByLocalIdentifier) по описанию в WIKI SAE J1979 это ни что иное как нестандартный режим №21, а A9 - PID в этом режиме.
mr_smit писал(а): P.S. Выходит тогда согласно https://ru.wikipedia.org/wiki/OBD-II_PIDs чтобы узнать температуру двигателя я должен послать запрос:
68 6A F1 01 05 С9 ?
Да, если транспортный протокол ISO 9141. 68 6A - это фиксированный префикс ISO 9141.
Для ISO 14230 и физической адресации будет выглядеть так:

82 7A F1 01 05 F3

где 7A - физический адрес блока ЭБУ в конкретной модели Логана. Кстати у меня такой-же, видел эту цифру на шильдике.

Re: Бортовой компьютер

Добавлено: Вт окт 14, 2014 19:47:29
mr_smit
Mishultz писал(а): Это вам так DDT2000 выдает?
Да
Mishultz писал(а): т.е. в описанном выше запросе: 21(readDataByLocalIdentifier) по описанию в WIKI SAE J1979 это ни что иное как нестандартный режим №21, а A9 - PID в этом режиме.
Допустим. Но почему в WIKI каждому PID соответствует один параметр, а ЭБУ выдает по этому запросу целую пачку данных?

Запрос: 82 7A F1 21 A9 B7
Ответ: 9A F1 7A 61 A9 00 00 A1 F6 30 B9 58 2A 2A 00 30 09 00 00 03 B6 03 B6 00 00 04 CD 04 C3 7E

4-й байт имеет значение 61 - согласно 14230 это положительный ответ на запрос 21. А длина ответа в заголовке 9А, первые 6 бит это 11010 что в dec есть 26. Всё правильно потом идет 26 байт данных и контрольная сумма в конце.

Собственно я почему и спросил в самом начале какой байт за какой параметр отвечает...

Re: Бортовой компьютер

Добавлено: Вт окт 14, 2014 20:53:46
Mishultz
mr_smit писал(а): Допустим. Но почему в WIKI каждому PID соответствует один параметр, а ЭБУ выдает по этому запросу целую пачку данных?
А что мешает производителю упаковывать кучу данных в один параметр для экономии PIDов или еще из каких-нибудь соображений если макс. длинна данных позволяет? Нестандартный режим, что хотим, то и делаем.
mr_smit писал(а): Собственно я почему и спросил в самом начале какой байт за какой параметр отвечает...
А вот это и есть "секрет фирмы". Мне тоже, хотелось бы это узнать. Интересно, можно ли это как нибудь вычислить с помощью DDT2000 и французского словаря?

Re: Бортовой компьютер

Добавлено: Вт окт 14, 2014 21:51:29
mr_smit
Mishultz писал(а):Интересно, можно ли это как нибудь вычислить с помощью DDT2000 и французского словаря?
Я когда ковырял протокол акцента, то написал на Delphi эмулятор ЭБУ и меняя байты в ответе, следил за тем какие показания меняются в программе. Потом подбирал формулу перевода в нормальные значения. Для Daewoo Nexia делал так же: ссылка.

В случае с Логаном можно сделать так же, но DDT2000 настолько заморочена что это гораздо сложнее, да ещё и на французском.
Mishultz писал(а):А вот это и есть "секрет фирмы". Мне тоже, хотелось бы это узнать.
Mishultz писал(а):У меня на Логане стоит Siemens EMS 3132, работает.
Что то я тогда не понимаю как у вас всё работает если вы не знаете значения байтов??

Re: Бортовой компьютер

Добавлено: Вт окт 14, 2014 22:29:59
Mishultz
mr_smit писал(а): Что то я тогда не понимаю как у вас всё работает если вы не знаете значения байтов??
В моем БК все работает на стандартных PIDах (см. https://ru.wikipedia.org/wiki/OBD-II_PIDs) режим 0x01 пиды с 0x00 по 0x4E (дальше там полная охинея). Плюс режим 0x03 - запрос кодов ошибок. Плюс режим 0x04 - Очистка кодов ошибок. Всё!!! Все остальные интересные показатели вычисляются из этих значений. Единственная засада ЭБУ почему-то не поддерживает стандартный PID 0x2F - Уровень топлива. Хотя показывает ползунок и цифру в сервисном режиме на штатном дисплейчике. Подозреваю, что этот показатель, производители засунули куда-то в нестандартные PIDы. Хотелось бы узнать куда. Проказатель-то интересный.

Re: Бортовой компьютер

Добавлено: Ср окт 15, 2014 08:16:10
mr_smit
В чужом коде разбираться сами понимаете... Поэтому приведите пожалуйста пример инициализации (и как при этом надо дергать L линией), запроса одного PIDa и ответа на него. Заранее спасибо.

Re: Бортовой компьютер

Добавлено: Ср окт 15, 2014 09:40:30
Mishultz
Вот нашел более-менее вменяемый документ где понятно, с картинкой описан процесс 5boud инициализации: http://read.pudn.com/downloads118/ebook ... 4230-2.pdf
см. пункт 5.1.5.2.2 - 5 Baud Initialisation

Что касается запроса одного PIDа уже обсуждали - запрос температуры антифриза:

запрос: 82 7A F1 01 05 F3
Ответ: 83 F1 7A 41 05 3C 70

где 3С искомое значение, от которого надо отнять 40 градусов в десятичном счислении.

0x3C = 60dec. 60 - 40 = 20С˚

Re: Бортовой компьютер

Добавлено: Ср окт 15, 2014 12:12:49
mr_smit
Для Bosch я использую Fast Initialisation. Пункт 5.1.5.3. Т.е. там надо подать импульс на линию и потом послать запрос StartCommunication. А в 5 Baud Initialisation не пойму про какой адрес они постоянно говорят? Типа отправьте адрес на скорости 5 бод. Нашел документ от Фольксваген, там четко прописано:
5baud.PNG
(11.7 КБ) 823 скачивания
Т.е. отправить 33 на скорости 5 бит/сек.

А как вы делаете инициализацию?

Re: Бортовой компьютер

Добавлено: Ср окт 15, 2014 12:37:58
Mishultz
mr_smit писал(а): Т.е. отправить 33 на скорости 5 бит/сек.

А как вы делаете инициализацию?
Совершенно верно, адрес 0x33. Посылается так, как описано в документе по ссылке.
После посылки адреса на скорости 5 бит/сек.
Необходимо задрать L линию на "+", переключиться на 10400 бит/сек и ждать синхроимпульса 0x55.
Если получили именно 0x55 значит со скоростью 10400 угадали. Продолжаем ждать следующих 2 ключевых байта в которых закодированы важные параметры коммуникации. После получения этих двух байт через указанное время посылаем инвертированное значение второго полученного байта(сигнал - ок, принял) после этого ЭБУ подтверждает прием и окончание процедуры инициализации посылкой инвертированного значения адреса, т.е значение 0xCC.

Re: Бортовой компьютер

Добавлено: Ср окт 15, 2014 12:57:49
mr_smit
Ясно. Эбу отвечает: 55 D0 8F. Что в принципе сходится с описанием. Только почему то обмен в DDT2000 выглядит так:

Запрос: адрес 33
Ответ: 55 D0 8F

Запрос: 70
Ответ: 05

Если инвертировать 8F то получится F1. Но при этом на 17-18 странице сказано что мол если вам возвращается значение 8F D0 то ЭБУ не дает никакой информации о способе связи и что мол сканер должен знать что и по каким адресам запрашивать.

И дальше уже начинается обмен с адресом ЭБУ 7A.

Запрос: 82 7A F1 21 AA B8
Ответ: 8E F1 7A 61 AA 00 00 80 80 80 00 00 54 00 00 00 00 D8

Re: Бортовой компьютер

Добавлено: Ср окт 15, 2014 13:19:30
Mishultz
mr_smit писал(а): Запрос: 70
Ответ: 05
А это, я не знаю, что такое. Надо поглядеть в доках. У меня после инициализации, больше ничего такого не делается. Сразу начинаются запросы PIDов. Но, как я говорил, обмен идет с адресом 0x33 а не c 7A. И первом байте пакета 6й бит = 1, что означает что обмен не с физическим адресом, а с "функциональным". Т.е. запрос температуры у меня выглядит так:

С2 33 F1 01 05 EC

Re: Бортовой компьютер

Добавлено: Ср окт 15, 2014 13:23:34
mr_smit
Я так понимаю тут и Fast Initialisation можно использовать. Дернуть линию и заслать StartCommunication. Так же как и с Bosch.

Запрос StartCommunication:
81 7A F1 81 6D

Ответ типа такого:
83 F1 7A C1 EF 8F 2D

L линия в этом случае скорее всего и не понадобится. А дальше уже запрашивать данные так же как и DDT2000. Там много интересного:
DDT2000.PNG
(111.1 КБ) 1116 скачиваний

Re: Бортовой компьютер

Добавлено: Ср окт 15, 2014 13:34:11
Mishultz
Наверное. Я в каком-то документе видел, что обычно сначала делается "быстрая" инициализация, и только если она не проходит, через 2 секунды запускается "медленная" инициализация, типа для древних ЭБУ которые о "быстрой" инициализации не знают.

Re: Бортовой компьютер

Добавлено: Ср окт 15, 2014 13:48:04
mr_smit
И уже зная мгновенный расход R в л/час можно перевести это в мгновенный расход R100 в л/100.

R100=R*(100/V)

где V это наша скорость.

У вас как расход на Логане считается?