Бортовой компьютер для ЭБУ Bosch 7.9.7+ на MSP430

Бортовой компьютер для ЭБУ Bosch 7.9.7+ на MSP430

Статья отличается от этого проекта тем, что работает с ЭБУ типа Bosch 7.9.7+

Функции выполняемые БК:

1. Считывание параметров из ЭБУ (расход, скорость, обороты. температура ОЖ и т.д.)

2. Считывание ошибок ЭБУ и сброс ошибок.

3. Система управления отопителем салона. Измерение текущей температуры, релейное управление электромагнитным клапаном (открыт, закрыт) с настраиваемыми уровнями включения и выключения.

4. Регулировка яркости дисплея.

5. Звуковая сигнализация превышения температуры охлаждающей жидкости и напряжения аккумулятора.

Принципиальная схема бортового компьютера:

В качестве сердца используется микроконтроллер фирмы Texas Instruments (почему смотри ниже). Но код написан на Си и может быть легко портирован на любой другой типа mega128 от ATMEL. Контроллер любой из MSP430F1610 MSP430F1611 MSP430F1612 (Даташит).

Требования к контроллеру: не менее 20кБ flash, 4кБ ОЗУ, минимум один USART для связи с ЭБУ и еще один, если используется как у меня SPI датчик температуры.

Экранчик от nokia1202 96х68. Он хорош тем, что в магазине http://siriust.ru/ стоил 25 рублей и было куплено когда-то 10 штук про запас. Была в наличии текстовая библиотека и все было сделано первоначально на ней, но в ней не было русского шрифта. Зато требовалось меньше ОЗУ, так как не требовалось иметь видеобуфер размером почти килобайт (96*64/8+96=864 байта), а писать свою мне было лень. Позже в процессе решения другой задачи, понадобилась графичка под экран nokia 1202. Пришлось взять графичку от nokia3310 и портировать под nokia1202. А как бонус там шел русский шрифт и поэтому в процессе продолжения работ по БК перешел на неё. Подключение с помощью софтварного SPI и тоже естественно легко портируется под любой доступный и понятный вам экран типа Nokia 3310, Nokia 1100 или даже МЭЛТ, ибо в программе используются понятные вызовы библиотечных функций вывода символов. Печатки для этого экрана я сделал сразу штук 5. На них легко припаивается шлейф от экрана и затем сама плата приклеивается на заднюю часть экрана. Получаются этакие доработанные экраны с большими контактами для подпайки и уже обвязанные по питанию и контактами для распайки mosfet-а в корпусе sot-3 для организации регулируемой подсветки в виде ШИМ. Очень полезные странички про покурить экраны

Для связи с ЭБУ используется специализированная микросхема SN65HVDA195 от Texas Instruments (Даташит). Печатная плата также выполнена отдельно.

Датчик температуры TMP121 или TMP123 на аппаратном SPI (Даташит). Меряет температуру от -25 до +85С.

Отличие схемы включения датчика от даташита заключается в том, что я не стал подводить ногу питания к датчику. Вместо этого на плате я поставил диод Шоттки и конденсатор на 10 мкФ между ногами Vcc и Gnd. Сигнал на диод берется с вывода CS. По алгоритму работы с датчиком вывод CS всегда находится под высоким уровнем (при этом происходит непрерывное измерение температуры) и опускается вниз только для считывания измеренного значения температуры. Так как допустимое напряжение питания составляет 2,7В, а ток потребления 50 мкА то данное упрощение вполне допустимо.

И так почему были выбраны детали от техас инструмент? Да потому что бесплатно.

У техаса можно заказать сразу и контроллер и микросхему к-line интерфейса и стабилизатор на 3.3В и датчик температуры (к тому же все это можно заказать не по одному экземпляру, а по 3-5 штук и собрать соответственно не один, а несколько БК).

В чём и как программировать

Я использую IAR Workbench 5.1 который вполне легально можно скачать на сайте ИАРА. После регистрации и запроса evolution версии по ссылке, получаем полнофункциональную версию на 30 дней. А потом можно и еще заказать для продолжения.

Программатор либо по LPT, либо по COM (или переходник USB-COM, так называемый BSL).

Схема для программирования по LPT проста как две копейки (к сожаленью не так проста как 5 проводков для AVR, но уж точно порт не спалите) позволяет прошивать и отлаживать прям из IAR, что для меня большой плюс. Но требует LPT порт, а он все реже попадается.

Программатор BSL по последовательному порту. Использует вшитый в MSP bootloader. Можно шить, но нельзя отлаживать. Зато работает от COM порта и что более актуально – от переходника USB-COM используя линии TXD, RXD, DTR, RTS. У меня прекрасно работает от переходника TUSB3410 фирмы техас инструмент (тут продолжительные аплодисменты).

Переключение по экранам происходит кнопкой "MENU". Регулировка значений включения отключения клапана отопителя кнопками "ВВЕРХ" "ВНИЗ". Переключение между уставками включения отключения клапана отопителя кнопками "СМЕНА". Кнопку "ВКЛ" и "ENTER" пока не используются. Просто они есть на корпусе.

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

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

Регулировка яркости реализована на аппаратном ШИМ с ноги Р4.1.

Алгоритм работы БК следующий:

1. Инициализируется периферия МК, экран, SPI, USART.

2. В таймере формируются так называемые признаки событий.

– признак запроса установления связи с ЭБУ каждые 750 мс.

– признак запроса данных из ЭБУ каждые 270 мс при наличии признака положительного ответа от ЭБУ

– признак запроса температуры  каждые 1,5 сек.

Признак запроса данных из ЭБУ меняется на признак запроса ошибок при нахождении в меню "Ошибки" и запрашивается соответственно каждые 270 мс.

Также в таймере ведется подсчет временного интервала с последнего положительного ответа ЭБУ на запрос данных. Если временной интервал между положительными ответами превысит 2,5с, то произойдет сброс признака запроса данных и выставится признак запроса установления связи с ЭБУ. Сброс данного таймера осуществляется в прерывании от принятого байта из USART.

В прерывании USART организован FIFO буфер на 80 байт. Данный объем выбран из условия, что длина максимального ответа от ЭБУ составляет 80 байт.

Также в прерывании USART формируются признаки положительно ответа от ЭБУ, читаются ошибки, вычисляются данные из массива переданного ЭБУ.

В основной программе происходит опрос кнопок и обработка запросов сформированных в прерывании таймеров.

Перед входом в цикл основной программы происходит чтение info сегмента ППЗУ. В ячейке 0х1000 храниться значение температуры включения клапана СУОС рассчитанное по формуле tппзу=t_вкл/5 (Данная запись позволяет регулировать температуру с точностью 0,2С используя один байт для хранения). В ячейке 0х1001 храниться значение дельты температуры включения-отключения клапана СУОС. Таким образом клапан открывается при температуре меньше уставки на величину дельты и выключается при увеличении температуры выше заданной на величину дельты. В ячейке 0х1004 храниться значение последнего экрана. Если в процессе работы сменить экран и находиться в нем более 30с, то этот экран станет основным и запишется в ППЗУ. В ячейке 0х1002 храниться значение яркости экрана. Если ячейки не заполнены, то записываются первоначальные значения 20С, 0.5С, 10,1.

Немного теории. Для тех, кому данный проект будет являться отправной точкой для создания своего БК на другой элементной базе.

Спецификация протокола KWP2000 приведена в файле kwp2000_euro2.doc. Данный документ описывает протокол общения с ЭБУ типа Motronic 1.5.4N, “Январь-5”. У меня контроллер Bosch 7.9.7+. Анализ снифа протокола обмена ЭБУ с диагностической программой на ПК показал достаточно существенные отличия от указанного выше документа.

Во первых инициализация. Мало того, что должна быть послана соответствующая последовательность команд на ЭБУ, необходимо чтобы в процессе инициализации выдерживались строгие временные интервалы выдачи команд.

Так описанный в приведенном документе процесс "быстрой инициализации" должен заключать в передаче низкого уровня по k линии в течении 25мс (с погрешностью +-1мс), затем высокий уровень на k линии в течении 25мс (с погрешностью +-1мс), затем последовательность управляющих команд. Время между посылками инициализации не менее 200мс. При попытке провести указанным образом инициализацию (так ее пытаются выполнить 4 из 5 диагностических программ), ЭБУ возвращает последовательность 0x83 0xF1 0x10 0x7F 0x81 0x11 0x95, что в соответствии с описанием протокола означает, что ЭБУ не знает такую команду.

В ЭБУ Bosch 7.9.7+ инициализация должна выполняться несколько иначе.

Передается инициализирующая последовательность высокий уровень к линии 25мс, низкий уровень к линии 25мс, последовательность 0х81 0х10 0xF1 0x81 0x03. При этом важно отметить, что интервал между инициализирующими посылками не менее 500 мс. ЭБУ сразу выходит на связь с положительным ответом.

Скорость обмена 10400 бод.

Перед запросом информации из ЭБУ его необходимо инициализировать на работу с БК.

Это делается из БК: шлется последовательность команд 0х81 0х10 0xF1 0x81 0x03. В ответ ЭБУ присылает ответ 0x83 0xF1 0x10 0xC1 0xEF 0x8F 0xC3. Это является признаком положительного ответа на запрос инициализации.

Теперь БК может запрашивать информацию.

Запрос диагностической информации осуществляется последовательностью команд 0x82 0x10 0xF1 0x21 0x01 0xA5. В ответ ЭБУ присылает 79 байт начинающихся с последовательности 0x80 0xF1 0x10 0x4A 0x61 0x01 после которой следует массив диагностической информации. Некоторые значения соответствующих данных приведены в файле анализ.xls. Настроив на ПК связку виртуальных COM портов и подключив один к гипертерминалу, а второй к программе диагностики были выявлены конкретные байты передающие диагностическую информацию и порядок преобразования их в физические величины. Если сравнить их с приведенных описанием на протокол KWP2000, то видно множество отличий, что при одинаковости управляющих команд говорит о том, что протокол обмена с Bosch 7.9.7+ является некой надстройкой над KWP2000. Из статьи видно, что указанный выше документ подходит под ЭБУ типа Январь 5 и Январь 7.2+.

Запрос ошибок выполняется последовательностью команд 0x84 0x10 0xF1 0x18 0x00 0xFF 0x00 0x9C

Ответом на запрос в случае отсутствия ошибок, является последовательность 0x82 0xF1 0x10 0x58 0x00 0xDB.

Сброс ошибок выполняется последовательностью 0x83 0x10 0xF1 0x14 0xFF 0x00 0x97

На чем проверялся БК. Точно работает на ЭБУ типа Bosch 7.9.7+ евро 2 на машине Нива 2131. Больше нигде не проверялась, так как нет в наличии других машин.

Скачать печатные платы в формате Sprint-Layout, проект в IAR и др. файлы к проекту

Автор: Трухов Виктор Павлович (tvilsa)


Категория: В помощь автолюбителям
Метки:

Написать коментарий

*
= 4 + 1

Добавить изображение

Последние статьи