CLONE - на заре развития: часть первая.

В начале разработки топливного контроллера КЛОН была проведена серьезная работа по исследованию "аппаратной части" и программного обеспечения распространенного блока управления PowerCommander.

С того момента - прошло несколько лет, наши технологии ушли далеко вперед - и мы сочли возможным открыть для общего доступа информацию и технологии, лежащие в осное контроллера "КЛОН" первого поколения.

В мировой практике - начало разработки нового продукта с Reverse Ingeneering'а изделия конкурентов - является разве что не "золотым стандартом" инженеров. Первоочередная задача - определить преимущества и недостатки имеющегося на рынке продукта, понять - какие моменты имеет смысл улучшить, какие - полностью изменить, либо - наоборот, оставить как есть.

Для начала, был приобретен полный комплект Dynojet PC III USB.


Механическое исполнение.

Power Commander III USB

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

С торца блока имеется USB разъем для соединения с ЭВМ, и дополнительный многоконтактный разъем для подключения внешних модулей, таких как Dynojet Ignition Module (блок управления зажиганием), Quick Shifter и т.п.

Рядом с разъемом выходит жгут проводов, оканчивающийся разъемами к форсункам. Отдельно выходит проводник с клеммой - его предлагается подключать к "массе" мотоцикла (методом болтового соединения с минусовой клеммой аккумулятора) и провод подключения к датчику TPS (положение заслонки) - он соединяется при помощи врезного контакта.


Мы обратили внимание и "взяли на вооружение" следующие моменты:

1) Габариты корпуса. Они стали для нас "отправной точкой" - будем считать, поскольку PC III реально разместить во всех мотоциклах - любой другой блок аналогичного, или меньшего размера - тоже получится установить.

2) Влагозащищенное исполнение. Корпус неразборный, залит теплопроводным компаундом - что обеспечивает достаточно высокую защиту от воды и вибрации.

3) Наличие кнопок на панели. Мы так делать не будем. Ввод коррекций топлива без динамометического стенда не представляется возможным, а вот жалобы на случайные нажатия были - при этом в память блока прописывается некорректная информация. PC III размещают как правило в "бардачке" мотоцикла, и предметы, лежащие рядом - способны от вибрации вызвать случайное нажатие кнопок.

4) Светодиодная шкала. Красиво - факт. По факту - необходимости в ней нет. Настройка дросселя делается через программу на ЭВМ, блок лежит внутри мотоцикла и шкалу на нем не видно. Решено отказаться от шкалы и использовать индикаторный светодиод, отображающий факт работы блока.

5) USB разъем на корпусе. Через наш сервис прошло много мотоциклов с проблемой - плохой контакт в разъеме. Стоит попасть воде в разъем - в нем моментально начинается электрохимическая коррозия (на контактах присутствует потенциал 5V) - после чего соединение с ЭВМ установить невозможно по причине отсутствия надежного соединения в разъеме интерфейсного кабеля.
При выходе из строя этот разъем поменять невозможно - он запаян напрямую в плату. Принято решение использовать только герметичные разъемы, и по возможности не устанавливать их на корпус - это обеспечивает ремонтопригодность.

Интерфейс USB не обладает достаточной помехозащищенностью, были случаи - при возникновении электромагнитного импульса вблизи от мотоцикла (например включение нагрузки диностенда, мощного вентилятора и т.п.) - блок попросту "зависал". Принято решение использовать более помехозащищенную шину данных.

6) Многоконтактный интерфейс для подключения доп.опций. Не оправдано. Учитывая предыдущий факт (зависание USB) -применен интерфейс CAN, который обладает достаточной защищенность от помех, имеет всего 4 контакта. Подключение блока к компьютеру и дополнительным модулям осуществляется через одну шину данных. Сам же разъем - размещен в жгуте проводов, а не на корпусе.

7) Клеммы заземления. "Массу" контроллера предлагается подключить к клемме АКБ мотоцикла. Это приводит к образованию "земляной петли" и ухудшению помехоустойчивости системы.

8) Обжимная клемма датчика TPS - недостаточно надежна и со временем перетирает провод. Вывод - все соединения - только пайка или герметичные разъемы.

9) Общий жгут проводов - имеет 2 разъема на каждую форсунку и включается в разрыв проводки. В случае выхода из строя PC III - потребуется частичная разборка мотоцикла чтобы восстановить "заводские" соединения. Учитывая эти факторы - оптимальным является решение установки дополнительного жгута проводов (методом пайки), оканчивающихся многоконтактными герметичными разъемами, находящимися в "бардачке" или ином доступном месте мотоцикла. В случае выхода из строя блока - разъемы соединяются напрямую, что восстанавливает заводскую схему проводки.

10) Исполнение кабеля - жгут проводов, обмотанный изоляционной лентой. Простое решение, но у него есть недостаток - вода, попавшая внутрь - остается там на длительное время, что портит изоляцию проводов и в конечном счете приводит к их коррозии. Решено использовать специальную сетчатую кабельную оплетку.


Схемотехника.


Warning: уважаемые Инженеры и Разработчики. Упростите жизнь своим коллегам. Не заливайте блоки герметиком и не затирайте названия микросхем. Мы все равно "срисуем" Вашу схему, просто на это уйдет чуть больше времени. :)


Итак, неразборный корпус - конечно же, разобран; печатная плата аккуратно очищена от компаунда.

Разобранный PowerCommander


Для начала - "механика" .

Разъем USB предусмотрительно залит термоклеем - вода дальше разъема не попадает. Разъем гниет, но коммандер при этом продолжает работать. А вот кнопки стоят обычные, и ничем не защищены. При разборке бывших в использовании блоков - замечена коррозия контактов вокруг них. Это еще один аргумент в пользу отказа от кнопок управления.

На плате - множество незапаянных деталей. Это говорит о том, что плата - универсальная на всех версиях PC III.

Вычислитель.

Большая микросхема - процессор, на нем полностью стерта маркировка.
Это не страшно. Тип корпуса и количество "ножек" - известно. Схема включения "кварца" - характерна для процессоров Motorola (шунтирующий резистор плюс наличие на соседних с кварцем выводах цепочки RC-фильтра для встроенного PLL генератора). Это уже что-то. Вызваниваем номера контактов, подключенных к "земле", питанию, определяем где находятся аналоговые входы. Сравниваем получившуюся распиновку процессора с документацией на сайте Motorola - и однозначно идентифицируем марку используемого процессора.

RC фильтр ФАПЧ Кварцевый генератор по схеме Пирса
RC-цепочка фильтра ФАПЧ Кварцевый генератор по схеме Пирса 

 

Память.


Сразу же стало понятно назначение назапаянного разъема в углу платы - это контакты для внутрисхемного BDM программатора. Через эти контакты при помощи специального оборудования был снят дамп памяти из микросхемы. 
Бит защиты от чтения? Было бы желание, а технологии у нас найдутся :)

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

 Прошивка PowerCommander в HEX виде

В специальном программном обеспечении считаем автокорелляционную функцию (далее - АКФ) и смотрим получившийся график. На нем тоже - ничего нет. Сплошной "белый шум":

График автокорелляционной функции

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

Рядом с процессором стоит микросхема в SOIC-8 корпусе с маркировкой 24LC256 - это память. Выпаиваем, WizardProg'ом считываем - и сразу же видим характерные пики на АКФ:

 

АКФ информации из внешней EEPROM

 

В данном случае мы разложили побайтно содержимое памяти, и рассматриваем этот ряд чисел как непрерывную последовательность. Так как таблица имеет повторяющиеся, либо линейно увеличивающиеся ряды чисел (колонки/строки) - мы наблюдаем на АКФ характерные пики - это говорит о том, что требуемая нам информация - найдена.

Определим по интервалу пиков размерность таблицы и отобразим ее в виде 3D поверхности:

3D поверхность из EEPROM

Внешний вид поверхности полностью соответствует карте, "прошитой" через программу PowerCommander'а - таким образом, мы разобрались с расположением данных и их методом кодирования во внешней памяти блока.

Связь.

Чуть правее процессора - стоит микросхема моста USB-UART фирмы Cypress. Со своим кварцем и внешней SPI памятью, в которой лежит USB ID - благодаря которому устройство распознается компьютером не как COM порт, а как "Power Commander ...что-то там".

Припаиваем между "моторолой" и мостом дополнительный usb-uart переходник - это позволило при помощи обычной программы "Terminal" - "подслушать" обмен данными между программой на ЭВМ и контроллером. Повезло - все оказалось очень просто, в протоколе отсутствует даже примитивное шифрование и подсчет контрольных сумм.

Программа "гипертерминал"

Изучение протокола передачи данных дало нам сразу 2 возможности


1) При помощи дополнительного адаптера, сделанного из Cypress'овского моста и соответсвующей EEPROMки (с дампом снятым из PC, конечно же) - новые КЛОНы стало возможно прошивать из софта PowerCommander'а - например для загрузки уже имеющихся топливных карт. Подключенный к USB переходник распознается как Power, и ничего не подозревающая программа осуществляет с ним обмен данными. На выходе переходника получаем поток данных (физ.уровень UART), который преобразуется в физ.уровень CAN (с которым работает КЛОН) при помощи  микросхемы MAX3053.
2) создано программное обеспечение, позволяющее динамометрическому стенду получать данные из PC III - такие как обороты, положение дросселя и др. Настройка мотоцикла на стенде стала проще и точнее, нет необходимости подключать отдельный датчик оборотов двигателя. Реализация - программа на VB.NET, которая замыкает поток данных с PowerCom'а на физический COM-порт, подключенный к порту расширения стенда.

Можно было дальше разобрать прошивку Commander'а - был проведен успешный эксперимент по обратной загрузке считанной прошивки (но без бита защиты) и подключение к процессору при помощи USB Multilink (JTAG-отладчик, позволяющий в режиме реального времени видеть процессы в памяти микроконтроллера) . Выяснилось, что обновление прошивки выполняется через загрузчик-несколько модифицированный файл "monitor.s19", предоставляемый Motorol'ой, который передает управление основной программе. Все усовершенствования загрузчика сведены к двум ключевым моментам:

1) Контроль целостности кода. В случае если область главной программы повреждена (CRC не сходится) - с выводов процессора, подключенных к затворам MOSFET-транзисторов принудительно снимается управление, и на LED индикаторе зажигается 2 светодиода - крайний нижний, и крайний верхний. Это сигнализирует о повреждении прошивки в памяти PC. При этом двигатель мотоцикла продолжает функционировать, ввиду особенностей  схемы управления форсунками в PC.

2) Загрузчик передает в программу на ЭВМ серийный номер блока в начале обмена данными

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

Выводы.

Решение использовать процессор Motorola - хорошее, и мы это "взяли на заметку". В нем есть 8 аппаратных входов захвата (input capture), позволяющих с большой точностью измерять длительность импульса на форсунках, не вызывая прерывания главного цикла - что сильно уменьшает джиттер и общую нагрузку. Плюс процессоры доступны в military исполнении и имеют более высокую надежность по сравнению с аналогичными контроллерами (расширенный диапазон температур и т.д.).
Мост USB-UART решено заменить на драйвер CAN шины; от внешней памяти - отказались в виду наличия большого количества EEPROM внутри выбранного нами процессора.
В протокол обмена данными заложена 8и битная контрольная сумма и изначально предусмотрена возможность установки соединения с программным обеспечением динамометрического стенда.

Один из самых интересных моментов - то, что мотоцикл продолжает работать даже если с блока "слетела" прошивка. Обратим внимание на это при изучении схемы управления форсунками, реализованной в PC III.

 

 

Исследование программного обеспечения. 

После того как мы полностью изучили устройство блока - приступим к анализу работы системы. Требуется понять - какие сигналы блок получает на вход, как их обрабатывает. Что на выходе. Какие алгоритмы вступают в работу в случае частичного отказа системы управления, и есть ли такие "функции" в ней вообще.

PowerCommander предназначен для коррекции длительности импульса впрыска в системе управления мотоциклом.
Физически - блок подключается в разрыв проводки к форсункам, параллельно выходу потенциометра датчика положения дроссельной заслонки.

Рассмотрим главное окно программы управления:

 Программа PowerCommander

 В левой части экрана находятся кнопки чтения-передачи данных. Программа не работает в режиме ON-line, и все внесенные в таблицу изменения начинают работать только после нажатия кнопки "Send Map" либо "Send Table".

Снизу находится поле для текстового комментатрия. Туда обычно записывают конфигурацию мотоцикла или иную полезную информацию. Содержимое поля передается в ASCII виде во внешнюю EEPROM при нажатии кнопки "SEND MAP".

По центру - Таблица и оси системы координат. Одна ось - обороты двигателя, вторая - положение дроссельной заслонки.
Надо заметить, что по умолчанию коммандер не умеет работать с датчиком абс.давления в коллекторе - по этому характеристика дроселя имеет логарифмический вид - 0, 2, 5, 10 и т.д. процентов. Таким образом - в области малых открытий газа таблица имеет большее разрешением, чем в районе "Full Throttle" .

Каждое число в таблице означает уменьшение, либо увеличение длительности импульса впрыска на соответствующее количество процентов.

Индикаторы RPM, Throttle и Fuel Change не требуют комментариев, а вот при помощи Duty Cycle (скважность) - оператор может видеть какое осталось количество "запаса" по производительности форсунки.

 

Выводы.

1) Табличное отображение недостаточно наглядно показывает вносимые коррекции. В случае больших таблиц не видны резкие переходы значений на соседних клетках.  В нашем программном обеспечении решено использовать более удобную 3D поверхность, но с возможностью переключения в 2D вид:

3d карта
2) Отображение "режимной точки" (подсветка ячейки, соответствующей оборотам-дросселю в данный момент времени) - удобно. Будем использовать такую же методику, но добавим "следование" курсора за режимной точкой. Таким образом, нажимая кнопки +/- оператор стенда вносит коррекции в текущей режимной точке.
3) OFFLINE режим категорически непригоден при настройке мотоцикла на стенде. Приходится постоянно нажимать "Send Table" -  в ситуации, когда правая рука удерживает заданное положение ручки газа,  левой рукой при помощи "тачпада" искать кнопку передачи данных - большая потеря времени. В результате это приводит к излишне долгой работе мотоцикла на нагрузке.
В собственной разработке - только ON-line режим работы!
4) Логарифмическая шкала дросселя - полезна, но мы добавим еще и переключение в "линейный" вид.
5) Цветная подсветка ячеек таблицы - в двухмерном виде позволяет увидеть резкие переходы между величинами коррекции:
Двухмерная карта подачи топлива

Так появилась концепция интерфейса управления КЛОНом.

 Продолжение следует.