Например TDA7294

РадиоКот > Конкурс: Поздравь Кота по-человечески 2014!

Бортовой компьютер для автомобиля ВАЗ2110

Автор: КАШАК, neo-bars@yandex.ru
Опубликовано 20.09.2014.
Создано при помощи КотоРед.

ПОЗДРАВЛЯЮ уважаемого кота с днем рождения! Желаю ему доброго здравия, а его его замечательному ресурссу - процветания!

По случаю торжества хочу представить свой проект.

Итак, я являюсь “счастливым” обладателем творения отечественного автопрома под названием ВАЗ-2110. Как и любая техника машина имеет свойство ломаться в самый неподходящий для этого момент. Но оставим обсуждение поломок для других сайтов, все-таки тут собрались радиолюбители, а не автомеханики =)

В общем история данного проекта началась примерно год назад, когда я остался без генератора в 300км от цели поездки и пришлось продолжать путешествие на АКБ чтобы встретиться с другим авто и далее ехать на его АКБ. В добавок к этому, уже начинало смеркаться. Вот тут-то и оказалось, что на приборной панели отсутствует такой полезный прибор, как вольтметр. Видимо, разработчики посчитали, что раз двигатель инжекторный, то и напряжение на АКБ знать совершенно не обязательно. Во время поездки я уже серьезно подумывал о том, чтобы подключить к бортовой сети обычный мультиметр, т.к. слышал, что падение напряжения на АКБ может вызвать порчу памяти ЭБУ двигателя и в тот момент проверять справедливость этого утверждения совершенно не хотелось. Естественно по приезду домой я решил встроить нечто, измеряющее напряжение. Но тут вспомнилась еще одна неприятная особенность инжекторного двигателя, а именно контрольная лампа Check Engine. Которая умеет загораться совершенно неожиданно и почему-то обычно достаточно далеко от какого-либо сервиса. Такое, конечно, случается довольно редко, но все же случается. Первой мыслью было пойти, купить маршрутный компьютер и не морочить голову. А он уже покажет и напряжение, и ошибки, много чего еще. Но после похода на авторынок энтузиазм поубавился. Оказалось, что железка, содержащая деталей рублей на 300-400, может стоить в несколько раз дороже.

Вот тогда и было принято решение собрать такой девайс самому. Сначала думал сделать что-то простое на AVR МК и небольшом дисплее от мобильника. Но т.к. в то время я начал активно изучать МК STM32, то делать на AVR было не интересно, особенно учитывая тот факт, что у меня в городе стоимость того же Mega32 превышает стоимость STM32 103 серии. Кроме этого, на просторах интернет-магазинов я наткнулся на очень интересную штуковину под названием TFT дисплей. Вот такой:

 

Диагональ целых 3,2”, сенсор с АЦП, слот для SD карты, да еще и на плате запаян. Вот только шина данных у него параллельная и для управления требуется целых 21 вывод (16 бит сама шина данных и 5 служебных выводов). После некоторого времени поисков в интернете, я выяснил, что данная железка достаточно легко и просто подключается к STM32 МК при наличии у них FSMC (Flexible static memory controller). Если объяснять в двух словах, то это некий интерфейс, к которому можно подцепить память с параллельным интерфейсом, при этом МК будет работать с ней, точно так же, как и со своей внутренней. Т.е. просто указываем адрес и пишем данные. Очень удобно. А вот теперь, если подключить туда дисплей, то можно просто засылать туда данные по неким адресам, при чем аппаратно и очень быстро.

Далее подобрал и сам МК, выбор пал на STM32F103VCT6, это 100-лапое чудище содержит на борту блок FSMC, ЦАП (к тому времени уже решил, что обычные звуковые уведомления в виде писка будут только раздражать), целую пачку USART, SPI и т.п., 256 Кб памяти, тактовую частоту 72МГц, да еще и USB модуль. Все описывать не буду, дабы не захламлять статью, остальное можно найти в даташите. Заказав дисплей и МК, начал разводить плату. К слову, плату под корпус LQFP предстояло изготавливать впервые. Не смотря на это, плата удалась (пусть и не с первого раза), делал методом ЛУТ.

Запаяв МК и дисплей, сел за написание программы. После пары недель плясок с бубном, удалось запустить дисплей и немного оптимизировать библиотеку. Уже тогда было решено, что весь интерфейс будет представлен в виде набора картинок, а звуковые уведомления в виде WAV файлов. Вот тут и ждало первое разочарование. При проектировании платы я подключил SD карточку через SPI, и если с проигрыванием звуков он справлялся на отлично, то для чтения изображений у него катастрофически не хватало скорости. На вывод картинки 320х240 пикселей уходило около 3 секунд. Промучившись еще недели три, начал искать другое решение и довольно скоро нашел. Оказывается, помимо прочих полезностей, у данного МК есть интерфейс под названием SDIO (Secure digital input/output interface), который предназначен для работы с SD (и не только) картами памяти. Отложив программирование, я заказал мешок слотов для MicroSD карточек и занялся новой платой. В итоге на отдельной плате уютно разместились MicroSD карточка и Mini USB разъем, а основная плата дополнилась выводами под SDIO, а также некоторыми полезностями, пришедшими на ум в процессе разработки. После очередных плясок с бубном все это дело завелось. Картинки выводились с приемлемой скоростью. Дело осталось за малым, сделать интерфейс пользователя, реализовать задуманные функции и заставить все это дело работать. Как раз на разработку интерфейса ушла примерно половина всего времени, во-первых, надо было придумать нечто удобное, а во-вторых создать всю графику, с которой я в принципе не особо дружу. Подробно этот момент я описывать не буду, чтобы не утомлять читателей, скажу только, что была еще раз переработана библиотека дисплея, созданы с нуля несколько шрифтов, отдельно буквенные (сразу решил делать только английские, надписи получаются короче) и отдельно цифровые. И графику я все-таки сделал.

Но, когда оставалось дописать примерно 30% прошивки, стало ясно, что придется переделать плату еще раз. Причинами послужило то, что из-за некоторых недоработок не получалось реализовать все задуманное, и просто адски грелись линейный стабилизаторы в питании схемы. (понижение до 3.3В было сделано в 2 ступени, 12В->5В, 5В->3.3В). В итоге был применен DC-DC Step-Down преобразователь на 3.3В, исправлены предыдущие недоработки, и наконец-то получена финальная версия платы, на которой и дописывалась прошивка.

В процессе написания программы количество функций увеличилось процентов на 30 по сравнению с изначально задуманными.

Итак, на момент написания статьи, функционал получился следующий.

  1. Показ времени (RTC в МК есть, почему бы не использовать).
  2. Измерение температуры в салоне и на улице (датчики DS18b20, невероятно удобная штуковина в плане подключения).
  3. Связь с ЭБУ через K-Line и получение таких параметров, как: Напряжение, Расход топлива (путевой/часовой), Температура двигателя, Обороты, Скорость движения, Массовый расход воздуха, Цикловой расход воздуха, Положение дроссельной заслонки, Длительность импульса впрыска, Положение регулятора холостого хода. Чтение и сброс ошибок.
  4. Слежение за уровнем охлаждающей жидкости и уровнем масла в двигателе, с выдачей звукового и визуального уведомления (раз уж есть датчики, то почему бы их не задействовать).
  5. Напоминание о замене масляного и воздушного фильтров.
  6. Управление фарами и ДХО в зависимости от уровня освещенности с настройкой уровня срабатывания.
  7. Показ максимального/минимального/среднего уровня таких параметров, как: часовой расход топлива, скорость за поездку, напряжение в бортовой сети, температура за бортом. А также вывод примерных графиков данных величин.
  8. Сохранение параметров и ошибок, полученных с ЭБУ, на SD карту в *.txt файл.
  9. Ведение статистики поездки (время, расстояние, количество израсходованного топлива, расход на 100км.).
  10. Управление освещением салона. У родного блока управления была такая функция, вот и сюда встроил.

 

Внешний вид всего устройства представлен на рисунке:

 

Конструктивно оно состоит из 5 отдельных блоков: дисплей, плата-адаптер K-Line, плата с Micro SD и USB, УНЧ и центральная “материнская” плата. Модульная система была выбрана специально, т.к. это заметно упрощает разводку плат и установку в авто. Кроме этого я не был уверен, что тот же адаптер K-Line будет нормально работать, а переделывать из-за него всю плату совершенно не хотелось. Рассмотрим каждый блок подробнее.

На центральной плате расположено сердце все конструкции – МК STM32F103VCT6 со всей необходимой обвязкой. На этой же плате находятся DC-DC преобразователь 12В->3.3В на MC34063 для питания всей электроники, два реле для управления фарами, мощный MOSFET для управления светом в салоне (даже излишне мощный, но их был целый мешок, поэтому его и поставил) и батарея 3В для часов реального времени.

 

Адаптер K-Line сделан по распространенной схеме на компараторе LM339. Так же на этой плате установлена пара транзисторов, которые служат связующим звеном между датчиками в авто и МК.

 

Плата с USB и Micro SD вообще ничем ни примечательна и содержит только пару разъемов и горсть резисторов.

 

Рассматривать УНЧ особого смысла не имеет, сделан он на TDA2003 по схеме из даташита. Тут уже каждый выбирает то, что ему удобнее. У меня была в наличии данная микра, на ней и сделал.

На плюсовом проводе питания установлен предохранитель.

Подключение дисплея осуществляется гибким шлейфом, который раньше служил для подключения IDE диска к материнке. Он обладает большей прочностью, чем обычные китайские, спокойно выдержал около месяца издевательств без единого обрыва. Кроме того, он одножильный, что заметно ускорят процесс пайки и дает гарантию, что случайно загнувшаяся незамеченная “волосинка” что-нибудь замкнет.

 

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

 

Для подключения датчиков температуры использовал обычную телефонну лапшу. Наружний датчик установлен под задним бампером, а внутренний под декоративную накладку на стоке между дверьми. Наружний датчик был заказан у китайцев и по их заверениям абсолютно водонепроницаем. Проверить пока возможности не было, сезон дождей еще не начался. Всего ушло около 3-3,5м провода. При такой длинне провода подтягивающий резистор на линии 1-Wire пришлось уменьшеить до 1К. Фотодатчик подключен экранированным микрофонным кабелем. Для установки статусного светодиода была использована стандартная фишке датчика иммобилайзера, которая бесцельно торчала в панели. Красный светодиод заменил на желтый.

 

А вот и схема всего девайса:

Теперь постараюсь описать его работу. В дежурном режиме экран погашен и питние УНЧ отключено. Каждые 5 сек. вспыхиввает статусный светодиод, показывая, что девайс жив. Потребление тока в этом режиме 30-35мА. Можно его еще уменьшить, если перевести МК в спячку, но пока такое потребление никакого пагубного влияния на АКБ не оказывает.

Для того, чтобы вдохнуть в него жизнь, требуется либо просто коснуться экрана, либо повернуть ключ в замке зажигания. Кстати, при прикосновении к экрану зажигается статусный светодиод, и гаснет при отпускании, сигнализируя тем самым, что касание произошло и МК его зарегистрировал. В первом случае будет включена подсветка и предоставлен доступ ко всем функциям, но без соединения с ЭБУ. Т.е. сразу же будет включен главный экран программы без заставок, мелодий и т.п. Так же не будет проводиться контроль состояний датчиков. Если же в течении 20 секунд пользователь не предпринимает никаких действий, то экран погаснет.

 

Во втором случае сначала будет показана заставка и через 5 секунд будет осуществлено соединение с ЭБУ и выключение произойдет только после выключения зажигания. Задержка в 5 секунд обусловлена спецификой работы ЭБУ BOSCH, установленного в моей машине, первые 5-6 секунд после включения он шлет какую-то белиберду и на входящие данные не реагирует. Иными словами – это рабочий режим. В данный момент заставка выглядит так:

 

После перехода на главный экран, осуществляется попытка соединения с ЭБУ. Если по каким-то причинам соединиться с первых двух попыток не удалось, на экран выводится вот такая пиктограмма и попытки наладить соединение продолжаются.

 

После 8 неудачных попыток будет выведено сообщение об ошибке, если после этого коснуться экрана в любом месте, процедура соединения повторится сначала.

 

Вся основная информация  выводится на Главном экране в виде таблицы. Данные обновляются каждые 100мс. Кроме напряжения (1с) и температуры с DS18b20 (2с). Главный экран разделен на две области. В верхней, большей, области отображаются параметры представленные в виде таблицы, как:

  • Напряжение в сети (MAIN VOLT.)
  • Температура в салоне (TEMP. INT.)
  • Температура за бортом (TEMP. OUT.)
  • Время
  • Температура двигателя (ENGINE TEMP.)
  • Количество оборотов (ENGINE RPM)
  • Скорость движения (SPEED)
  • Часовой расход топлива (FUEL RATE)

 

Нижняя область отведена под иконки статуса и кнопки. Слева направо:

  • Уровень масла 
  • Уровень охлаждающей жидкости
  • Напоминания о замене фильтров
  • Переключение режимов управления наружным светом
  • Включение/отключение звука
  • Меню

В случае возникновения проблем, пиктограмма выделяется красным цветом, это же относится и к напряжению. Кроме этого о неполадке сообщается частым миганием статусного светодиода (5 раз с интервалом 300мс.) и звуковым сигналом (в том случае, если включен звук). Уведомления об уровне масла/тосола/напряжения повторяются раз в минуту, а уведомления о замене фильтров раз в час. Пробег перед заменой взят из справочной литературы и для воздушного фильтра составляет 15000км, а для масляного – 10000км.

Значок “минус” для отрицательной температуры уже никак не помещался, поэтому отрицательная температура выводится синим цветом. Четвертая цифра в количестве оборотов тоже не поместилась, пришлось ее заменить точкой. Теперь если точка стоит после числа (123.) то это означает, что обороты превысили 1000, в данном примере - это 1230 об/мин. А если точка стоит слева от числа (.876), то обороты меньше 1000, в данном случае - 876 об/мин. (на фото не совсем верная информация, оно было сделано во время одного из тестов).

Часть пунктов таблицы кликабельна, это:

  • Напряжение
  • Температура за бортом
  • Время
  • Скорость
  • Расход топлива

Нажатие на перечисленные пункты, кроме времени, открывает экран статистики, в верхней части которого представлены минимальное/максимальное/среднее значение параметра, а в нижней примерный график.

Первые 18 раз запись данных производится с интервалов в 10с, далее в 1мин, а потом с интервалом в 5 мин. 

Нажатие на часы откроет экран статистики за поездку:

Статистика ведется в двух режимах. Пока не нажата кнопка START, статистика сбрасывается через минуту, после выключения зажигания. Если же нажать кнопку START, то ведение статистики будет работать до нажатия кнопки RESET даже с выключенным двигателем. Это будет полезно, если движение осуществляется с остановками и требуется узнать общее время, проведенное в пути, или же общее количество израсходованного топлива.

 Нажатие на пикограммы с надписями AIR/OIL откроет экран статистики фильтров.

Здесь отображается расстояние, пройденное с момента замены фильтра. Соответственно, после замены фильтра требуется сбросить пробег удерживанием кнопки RESET. При выключении зажигания и по прошествии часа, значения пробега сохраняются на карту памяти.

Далее идет кнопка управления внешним освещением. При нажатии происходит перебор режимов, на что указывает изменение вида кнопки. Всего режимов 3:

 - управление выключено

 - включение габаритных огней

 - включение фар и габаритных огней

Габаритные огни включаются после 2 минут работы двигателя если машина не движется, либо сразу после начала движения, либо при достижении температуры двигателя равной 60 градусам. Выключение происходит через минуту после выключения зажигания.

С фарами все гораздо интереснее, они реагируют на уровень освещенности. Как только этот уровень станет ниже порогового (устанавливается в меню) и продержится в этом состоянии не менее 15сек. Будет произведено включение фар. Выключение произойдет либо через 3сек. после выключения зажигания, либо в том случае, если уровень освещенности продержится выше порогового не меньше минуты. Включение фар или габаритных огней сопровождается звуковым уведомлением и миганием статусного светодиода (3 раза с интервалом 800 мс.).

Следующая кнопка управляет звуком. Тут все просто:

 - звук выключен

 - звук включен

При отключенном звуке уведомления будут выводиться только при помощи статусного светодиода и пиктограмм.

При нажатии на кнопку меню откроется экран настроек девайса:

Он состоит из 6 пунктов:

  • Расширенный экран параметров двигателя
  • Экран чтения ошибок
  • Подключение USB
  • Настройка часов
  • Настройка порога включения фар
  • Настройка яркости дисплея

 

Начнем по порядку. Расширенный экран параметров представляет собой вот такую таблицу:

Тут можно увидеть:

  • Напряжение в сети (MAIN VOLT.);
  • Обороты (ENGINE RPM);
  • Расход воздуха (AIR FLOW);
  • Датчик массового расхода воздуха (MAF SENSOR);
  • Положение дроссельной заслонки (THROTTLE POSITION);
  • Время впрыска (IHJECT. TIME);
  • Регулятор положения ХХ (REG-R IDLE);
  • Угол опережения зажигания (IGNITION ANGLE).

Все это дело можно сохранить в текстовый документ diagnost.txt. на карту памяти нажатием на кнопку SAVE. Если все прошло успешно, рядом с кнопкой появится зеленый квадрат, а в случае ошибки – красный.

Экран чтения ошибок.

 

Здесь выводятся ошибки, содержащиеся в памяти ЭБУ, конечно, если они вообще есть (у меня, к счастью, ни одной не было). Ошибки так же можно сохранить на карту памяти в файл errors.txt, а кроме этого произвести сброс удерживанием кнопки RESET. 

Подключение USB. Тут, к сожалению, не все так хорошо. С USB подключением я не успел разобраться на момент написания статьи, поэтому пока только выводится вот такая картинка:

 

Настройка часов. Тут все просто, в этом разделе можно произвести установку времени.

Устанавливаемое значение выделяется красным цветом и стрелкой. После выставления часов, можно настроить минуты, а после минут снова часы, и так по кругу. Сохранение значений происходит по нажатию кнопки APPLY, а при нажатии кнопки CANCEL все остается без изменений. 

Настройка порога включения фар. Данный экран выглядит следующим образом:

Вверху отображается текущий уровень освещенности, получаемый с датчика, а внизу тот уровень, который был настроен. Соответственно настройка осуществляется простым нажатием на ползунок. Как и ранее применение настроек происходит после нажатия кнопки APPLY. Для контроля за освещенностью применен обычный фоторезистор. Его сдедует установить так, чтобы на него попадал свет, прошедший через лобовое стекло.

Настройка яркости дисплея. Тут всего один ползунок:

Изменения яркости при настройке можно увидеть сразу после нажатия на ползунок. Далее будет происходить автоподстройка уровня яркости по показаниям, полученным с датчика освещенности, на основе заданного уровня. Сохранение все той же кнопкой APPLY. 

На этом различные менюшки заканчиваются. Все настройки системы сохраняются на карту памяти в файлик settings.bin. Как можно заметить, вся работа устройства завязана на карте памяти. Поэтому проводится контроль ее наличия, чтобы избежать ошибок в работе. Если карта памяти по каким-то причинам не отвечает, то производится попытка инициализации карты памяти, а в том случае, если это не помогает, на экран выводится вот такое сообщение:

При нажатии в любой точке экрана будет предпринята попытка инициализировать карту памяти. Также без карты памяти девайс не включится, а на экране будет выводится сообщение об ошибке. Лично у меня подобной проблем с картой памяти пока не было, она прекрасно выдерживает тряску и из разъема не выпадает.

Также стоит остановится на первом включении, когда никакие настройки не сделаны.  Т.к. экран сенсорный, то ему просто необходима такая вещь, как калибровка. Именно в этот режим и переходит устройство при первом включении:

Для выполнения данной процедуры следует коснуться экрана в точках, указанных перекрестием. Всего таких точек 4. После этого экран погаснет и устройство перейдет в режим ожидания каких-либо действий.

И последняя функция – управление освещением салона. В момент открытия двери начинает плавно наращиваться яркость светильника. Полная яркость достигается за 13 секунд. После закрытия двери, по прошествии 10 секунд освещение начинает плавно гаснуть. При этом если начать движение, то освещение будет погашено практически мгновенно.

Теперь расскажу о формате картинок и звуков для интерфейса. Картинки представляют собой обычные BMP файлы, но сохраненные в цветовом формате RGB565 и с вертикальным зеркальным отображением. Со звуками все проще, это WAV фалы, моно, 8 бит. Частота дискретизации не важна, в программе предусмотрена автоподстройка. Т.е. смена интерфейса проводится очень легко без необходимости изменения чего-либо в прошивке. Карта памяти должна быть с файловой таблицей FAT32. Лично мной проверена работа с карточками объемом до 8 ГБ. включительно.

По идее данная схема будет работать с любым ЭБУ, который использует Keyword Protocol 2000. В планах на будущее допилить USB и добавить функцию диагностического адаптера. Также, возможно, сделать поддержку других протоколов обмена данными с ЭБУ, с простой заменой. Например, хранить необходимые команды в файлике на карте памяти или записывать по USB. Может еще чего придумаю. Пока на этом у меня все =)


Файлы:
Схемы/Платы/Прошивка
Файлы для работы схемы


Все вопросы в Форум.


ID: 1990

Как вам эта статья?

 Нравится
 Так себе
 Не нравится

Заработало ли это устройство у вас?

 Заработало сразу
 Заработало после плясок с бубном
 Не заработало совсем

112 10 4