Статья отличается от этого проекта тем, что работает с ЭБУ типа 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)
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
МК MSP430 | MSP430F1610 | 1 | MSP430F1611 MSP430F1612 | Поиск в магазине Отрон | ||
Микросхема | SN65HVDA195 | 1 | Поиск в магазине Отрон | |||
Датчик температуры | TMP121 | 1 | TMP123 | Поиск в магазине Отрон | ||
Кварцевый резонатор | 8 МГц | 1 | Поиск в магазине Отрон | |||
Конденсатор | 220 пФ | 1 | Поиск в магазине Отрон | |||
Конденсатор | 10 пФ | 2 | Поиск в магазине Отрон | |||
Конденсатор | 0.1 мкФ | 1 | Поиск в магазине Отрон | |||
Резистор | 15 Ом | 1 | Поиск в магазине Отрон | |||
Резистор | 20 Ом | 1 | Поиск в магазине Отрон | |||
Резистор | 100 Ом | 1 | Поиск в магазине Отрон | |||
Резистор | 330 Ом | 1 | Поиск в магазине Отрон | |||
Резистор | 1 кОм | 2 | Поиск в магазине Отрон | |||
Резистор | 10 кОм | 1 | Поиск в магазине Отрон | |||
LCD-дисплей | Nokia 1202 | 1 | Поиск в магазине Отрон | |||
LED | Светодиод | 1 | Поиск в магазине Отрон | |||
Кнопка тактовая | 6 | Поиск в магазине Отрон | ||||
Скачать список элементов (PDF)
Прикрепленные файлы:
- BK_Bosch.rar (210 Кб)
Комментарии (12) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Максим. Что Вы хотите? Вы написали что уже освоили частично msp430. Просто непонятно что Вам нужно.
Вот в этом примере работа с аппаратным spi и usart. Есть библиотеки подключения экранов nokia 1202 и siemens A60, C60, M55 к msp430. Могу выложить. У Вас конкретная задача или просто что-то хочется сделать, но не знаешь что?
Keyword Protocol 2000 Part 2: Data Link Layer
Keyword Protocol 2000 Part 3: Application Layer
Покажите пожалуйста в каком документе и где это написано. Планирую в перспективе сделать БК универсальным для разных ЭБУ.
Keyword Protocol 2000 Part 2: Data Link Layer
Keyword Protocol 2000 Part 3: Application Layer
Хотя по запросу 0х80 (а не 0х81 как для инициализации) ЭБУ должен вроде как вернуть список поддерживаемых параметров и формулы пересчета.
В документе Keyword Protocol 2000 Part 3: Application Layer в списке поддерживаемых команд Service Identifier values (стр 14) нет команды со значением 0x80.
ЭБУ должен вроде как вернуть список поддерживаемых параметров и формулы пересчета. И в документе приведены эти самые формулы!
Нет. Это не так.
на стр.56 Keyword Protocol 2000 Part 3: Application Layer для команды с кодом 0x21 readDataByLocalIdentifier сказано The format and definition of the recordValues shall be vehicle manufacturer specific. Это значит, что формат и значение должно быть определено производителем автомобиля.
В документе есть процедура запроса формулы расчета параметра (правда запрашивается она не
по запросу 0х80 (а не 0х81 как для инициализации)
82 11 F1 [COLOR=Blue]1A[/COLOR] [COLOR=Red]81[/COLOR] 1F - это ECUIdentificationScalingTable
Т.е. что то типа таблицы масштабирования/пересчета параметров к действительным значениям. Часть 3 страница 49. А на страницах 30-35 той же части есть расшифровка. И приведенный вами пример на странице 35.
Но мне по этому запросу ЭБУ вернул:
A7 F1 11 5A 81 03 [COLOR=Red]90[/COLOR] 6B 03 [COLOR=Red]91[/COLOR] 6B 03 [COLOR=Red]92[/COLOR] 6B 03 [COLOR=Red]93[/COLOR] 6B 03 [COLOR=Red]94[/COLOR] 6B 03 [COLOR=Red]95[/COLOR] 6B 03 [COLOR=Red]96[/COLOR] 6B 03 [COLOR=Red]97[/COLOR] 6B 03 [COLOR=Red]98[/COLOR] 6B 03 [COLOR=Red]99[/COLOR] 6A 03 [COLOR=Red]9A[/COLOR] 64 03 [COLOR=Red]9B[/COLOR] 68 FF A2
Т.е. это список поддерживаемых запросов из таблицы на странице 49. Но никак не таблица масштабируемых параметров. Я проверил, ЭБУ на запросы 87,88,89 и т.д. отвечает что не знает такую команду. Отвечает начиная с 90-го. Как и указывает в таблице. Т.е. можно запросить как отдельно описание какой то характеристики блока:
Например, нормы токсичности: 82 11 F1 [COLOR=Blue]1A[/COLOR] [COLOR=Red]96[/COLOR] 34
8D F1 11 5A 96 45 55 52 4F 2D .ñ.4ñ.ZEURO-
33 20 20 20 20 20 BA 3 º
Так и всё целиком:
82 11 F1 [COLOR=Blue]1A[/COLOR] [COLOR=Red]80[/COLOR] 1E
80 F1 11 7B 5A 80 41 44 45 31 .ñ..ñ.{ZADE1
49 35 32 20 20 20 20 33 39 31 31 30 32 36 36 34 I52 391102664
30 32 30 32 36 31 32 30 36 36 30 33 20 39 30 33 020261206603 903
30 39 33 30 30 39 33 20 50 44 35 49 53 30 32 45 0930093 PD5IS02E
20 20 20 4D 39 30 41 41 32 34 47 20 20 20 45 55 M90AA24G EU
52 4F 2D 33 20 20 20 20 20 41 4C 50 48 41 31 2E RO-3 ALPHA1.
35 44 20 20 52 45 50 2E 53 48 4F 50 2E 43 44 31 5D REP.SHOP.CD1
38 30 34 30 31 30 39 33 35 4D 37 39 20 70 64 35 804010935M79 pd5
69 73 30 32 65 68
ЭБУ просто возвращает свои характеристики (название, версия прошивки и т.д.) в одну строчку.
А вот приведение параметров к действительным значениям, а так же какой байт соответствует какому параметру это и в правду отведено на откуп производителю (82 11 F1 [COLOR=Blue]21[/COLOR] [COLOR=Red]03[/COLOR] A8 ). И думаю найти это описание не реально. Разве что искать знакомых на заводах. Хотя, даже не на заводах, а в конторах кто делает эти блоки (Итэлма, Bosch и прочие).
Bosch part no.: 0 261 203 940 / 941
ПОДОЙДЕТ?