Бортовой диагностический компьютер, насколько сложно это может быть?..
Задача распадается на две:
- Отображение информации
- Опрос блока управления двигателем
Для отображения используем графический ЖК дисплей MT-12232.
Чтобы понять как это все должно выглядеть, я начал с фотошопа и нарисовал там примерную компоновку данных на дисплее. Получилось вот это:
Эскиз компоновки экрана. Увеличено в 4 раза. |
Поля:
1. Верхняя строка слева направо: километраж на остатке топлива, температура двигателя, время и день недели
2. Вторая двухэтажная строка между двумя горизонтальными линиями слева направо: обороты двигателя, скорость, пройденная дистанция за поездку, передача, остаток бака.
3. Третья строка: меню для отображения параметров и настроек других подключенных модулей - модуль печки, модуль центрального замка, модуль стеклоподъемников и т.д.
Потом, эту картинку после преобразований, залил в микроконтроллер, чтобы понять как это выглядит в реальности. Выглядело вот так:
1. Верхняя строка слева направо: километраж на остатке топлива, температура двигателя, время и день недели
2. Вторая двухэтажная строка между двумя горизонтальными линиями слева направо: обороты двигателя, скорость, пройденная дистанция за поездку, передача, остаток бака.
3. Третья строка: меню для отображения параметров и настроек других подключенных модулей - модуль печки, модуль центрального замка, модуль стеклоподъемников и т.д.
Потом, эту картинку после преобразований, залил в микроконтроллер, чтобы понять как это выглядит в реальности. Выглядело вот так:
Из эскиза в фотошопе был сформирован набор шрифтов, состоящий только из использованных символов и иконок.
Дисплей вмонтирован в многострадальное центральное сопло воздуховода 2110, как в самый восприимчивый к изменениям элемент салона.
Теперь дело за прошивкой, которая должна шустро выводить постоянно меняющиеся параметры, что далось не сразу, так как дисплей не самый быстрый, и попутно опрашивая ЭБУ. В прошивке перерисовываем только то, что изменилось. Пока реализовано только отображение скорости, температуры и оборотов.
Для подключения дисплея использовал одну из первых испытательных плат, которая включала МК ATMEGA-162, а к одному из последовательных портов был подключен драйвер K-LINE, схема подключения к дисплею и драйвер K-LINE ниже:
Подключение МК к MT-12232 |
Подключение МК к K-LINE |
Испытательная плата слева. |
В машине уже был установлен маршрутный компьютер, так что я воспользовался передаваемыми данными, чтобы извлечь оттуда необходимые параметры. Т.е. общение с ЭБУ сводится к прослушиванию порта.
Привожу разобранный лог обмена между ЭБУ и маршрутником (разбор на основе широко доступной документации по протоколу KWP2000 для блока Январь 5, совпало практически все):
mul>> 81 10 F1 82 [CS: 04]ecu>> 83 F1 10 7F 82 10 [CS: 95]mul>> 81 10 F1 81 [CS: 03] 81 = startDiagnosticSessionecu>> 83 F1 10 C1 6B 8F [CS: 3F] C1 = Положительный ответ startCommunicationmul>> 82 10 F1 3E 01 [CS: C2] 3E = testerPresent 01 = Блок управления должен послать ответное сообщение на запрос тестера.ecu>> 81 F1 10 7E [CS: 00] 7E = положительный ответ на testerPresentmul>> 82 10 F1 21 01 [CS: A5] 21 = readDataByLocalIdentifierecu>> 80 F1 10 [26 - длина]61 = положительный ответ readDataByLocalIdentifier01 = afterSalesServiceRecordLocalIdentifier3B = слово комплектации 192 = слово комплектации 241 = слово режима работы 184 = слово режима работы 200 = слово флагов текущих неисправностей 100 = слово флагов текущих неисправностей 200 = слово флагов текущих неисправностей 300 = слово флагов текущих неисправностей 43E = температура охлаждающей жидкости, N=E-40 [C],80 = коэффициент коррекции СО, N=E/256, где E-знаковое00 = положение дроссельной заслонки, N=E [%]00 = скорость вращения двигателя, N=E*40 [об/мин]00 = скорость вращения двигателя на холостом ходу, N=E*10 [об/мин]6B = желаемое положение регулятора холостого хода, N=E [шагов]6B = текущее положение регулятора холостого хода, N=E [шагов]80 = коэффициент коррекции времени впрыска, N=(E+128)/25602 = угол опережения зажигания, N=E/2 [гр.КВ] , где E-знаковое00 = скорость автомобиля, N=E [км/час]7E = напряжение бортсети, N=5.2 +E*0.05 [В] 7E = 12600 = желаемые обороты холостого хода, N=E*10 [об/мин]5C = длительность импульса впрыска (младший байт)00 = длительность импульса впрыска (старший байт), N=E/125 [мсек]00 = массовый расход воздуха (младший байт)00 = массовый расход воздуха (старший байт), N=E/10 [кг/час]00 = цикловой расход воздуха (младший байт)00 = цикловой расход воздуха (старший байт), N=E/6 [мг/такт]00 = часовой расход топлива (младший байт)00 = часовой расход топлива (старший байт), N=E/50[л/час]00 = путевой расход топлива(младший байт)00 = путевой расход топлива(старший байт), N=E/128[л/100км]FFFF000042 = Контрольная сумма ПЗУ (младший байт)01 = Контрольная сумма ПЗУ (старший байт)[CS: CC]mul>> 82 10 F1 21 01 [CS: A5]ecu>> 80 F1 10 26 61 01 3B 92 41 84 00 00 00 00 3E 80 0000 00 6B 6B 80 02 00 7E 00 5C 00 00 00 00 00 00 0000 00 FF FF 00 00 42 01 [CS: CC]mul>> 84 10 F1 18 00 00 00 [CS: 9D]18 = readDiagnosticTroubleCodesByStatusecu>> 85 F1 10 58 01 16 02 20 [CS: 17]58 = положительный ответ readDTCByStatus01 = numberOfDTC
В результате получился вполне рабочий маршрутник. Пока есть небольшие баги с отображением - паразитные пиксели и залипающие неперерисованные разряды цифровых параметров. Видео работы, документальное:
Основная идея была в получении главного модуля, который бы объединил уже описанный ранее модуль стеклоподъемников, ждущий своего часа модуль печки, модуль центрального замка и другие. Следующим этапом будем встраивать небольшую телефонную клавиатуру для управления всем хозяйством.
Исходники
Комментариев нет:
Отправить комментарий