Я бы хотел продолжить тему блока впрыска топлива на базе stm32 и рассказать о текущем статусе проекта rusEfi.
rusEfi это opensource проект по созданию универсального блока управления двигателем внутреннего сгорания. Под универсальным подразумевается поддержка широкого спектра конфигураций, датчиков и исполнительных устройств. Это значит, что этот блок можно будет установить на любой двигатель и получить полный контроль, без закрытых прошивок, недокументированных возможностей и всего остального. Если вы программист, то возможности еще шире — можно будет самому править алгоритмы, а не только доступные карты и настройки. От других подобных проектов rusEfi отличается акцентом на мощном, но недорогом железе и благодаря этому возможности писать наиболее прозрачный и переносимый код.
Немного истории.
Четыре года назад я случайно увлёкся очень любительскими кольцевыми гонками на выносливость. Шло время, хотелось быстрее и лучше, но идти банальной тропой покупки BMW e30 желания не было — так появились мысли установить на двигатель турбину. Надёжность в такой конфигурации возможна только при правильном управлении впрыском и зажиганием, а по правилам моих гонок всё это должно быть еще и очень дешёвым. Анализ существующих решений показал, что цены на них все же высоки, причем не всегда оправданно, а возможности ограничены. Самодельный блок явно выходит по цене дешевле существующих настраиваемых блоков.
Почитав доступные исходники (а по профессии я как раз программист), я решил писать код с нуля. Изначальная задача была написать понятный, расширяемый и минимально привязанный к оборудованию код.
Выбор аппаратной платформы.
В настоящее время есть большое количество мощных и недорогих микроконтроллеров, производительности которых достаточно, чтобы не заботиться о каждом такте, сконцентрироваться на качественном коде и высоком уровне абстракции. Все это позволит получить качественный и переносимый код, расширяемость и отсутствие привязки к конкретному железу. Все это сулит возможности перехода на другие аппаратные платформы, когда это потрубуется. В результате был выбран STM32 — недорогой, но мощный.
По нескольким причинам я считаю, что на текущем этапе, а возможно и вообще навсегда, железо должно быть модульным. В данный момент используется отладочная плата STM32F4DISCOVERY и два модуля — модуль силовых драйверов и модуль аналоговых входов.
Размеры платы разработки позволяют подключить к ней с разных углов как минимум четыре небольших модуля. Сейчас у нас есть модуль аналоговых входов
модуль управления соленоидами (топливная форсунка — как раз соленоид)
и модуль разъёма проводки
Платы рисуются в KiCad — опять же, открытый и бесплатный пакет. Но с учётом достаточно гибкой настройки распиновки желающие могут использовать свои платы ввода-вывода, совместимость не требуется.
С рисованием плат сейчас наверное самое узкое место — в написании кода уже участвует несколько человек, а вот с железом всё сложнее. Есть список задач, а людей нет. А уже хочется попробовать у китайцев заказать не только плату, но и заказать сборку хотя бы всех сопротивлений.
Софт
Для лучшей модульности система использует небольшую RTOS ChibiOS/RT, ценную еще и наличием уровня абстракции от оборудования. ChibiOS даёт нам во-первых потоки и примитивы блокировик — это функционал ядра RTOS, а во-вторых — драйвера железа с удобным и единым для разных МК API. За счёт этого не приходится углубляться в шины и регистры и есть надежда на переносимость. При этом большой связи конкретно с этой RTOS нет, если придётся — можно будет переехать на другую.
Главный принцип этого проекта: максимально читаемый исходный код. Всё что можно делается максимально модульно и прямолинейно: очень хочется нигде ничего не хакать, а просто честно имплементировать. При минимальной завязанности на выбранную аппаратную платформу переход на другую платформу в будущем должен быть достаточно прост.
Интеграция с программами настройки
Как известно, для настройки блока управления требуется некий софт, который позволяет писать логи, анализировать и править всевозможные таблицы, калибровки и настройки. Софт этот часто стоит денег и не всегда актуальна его покупка для единичной настройки.
Для управления нами используется популярная TunerStudio, интеграция уже работает. TunerStudio достаточно гибкая и позволяет править настройки налету, создавать любые таблицы, редактировать карты и так далее. Все работает онлайн. Также следует заметить, что интеграция с TunerStudio сулит также интеграцию с MegaLogViewer, который позволяет анализировать логи и в автоматическом режиме корректировать карту топлива, на основании лога. Также из этой же линейки есть Shadow Dash MS — android приложение от создателей Tuner Studio, которое позволяет все тоже самое, что и Tuner Studio, но с android устройства по bluetooth.
Все эти программные продукты реализуют нужные механизмы, их не придется писать с нуля. Прямо сейчас карты топлива и температурных корректировок работают в TunerStudio, механизмы налажены, дальнейшее развитие в этом направлении не представляет проблем.
Текущий статус проекта
Сейчас контроллер управляет подачей топлива, опираясь на датчки положения валов и показания датчика расхода воздуха. Из простой таблицы получаются длинны импульсов в зависимости от текущий оборотов и расхода вохдуха, с дополнительными поправками на температуры охлаждающей жидкости и воздуха. Это примитивный и далекий от идеала алгоритм, который используется больше для отладки.
Прямо сейчас управления зажиганием нет. В какой-то момент было и управление зажиганием, но сейчас его убрали — решив сконцентрориваться на более надёжной аппаратной части и более адекватной логике подачи топлива.
Если коснуться темы аналогов — то первым обычно упоминают Мегасквирт, который «приоткрытый» — исходный код открыт, но требует использования их официального железа, иное использование это нарушение лицензии. Мегасквирт стоит весьма ощутимых денег. По-настоящему открытым и при этом живым проектом можно назвать только FreeEMS — на этом блоке управления уже ездят порядке двадцати машин, но этот проект привязан к очень конкретному железу и исходный код просто коробит моё чувство прекрасного.
Сколько всё это стоит? Проект открытый, исходники не стоят ничего. Железо открытое — железо стоит столько, сколько вы потратите на его изготовление. Ориентировочно минимальный блок управления должен получиться в районе $100. Кстати, отдельно интересное направление на будущее — вживлять новый МК в плату оригинального ЭБУ. Для старых блоков эпохи DIP это будет самая экономичная версия — такой апгрейд будет стоить всего $20, при этом будет полная совместимость с rusEfi.
Сейчас нужно просто отладить фундамент — аккуратно обработать все варианты датчиков положения, аккуратно оформить в едином стиле аппаратные модули для широкого диапазона конфигураций автомобилей.
В данный момент проект нуждается в Вашей поддержке. Нужно писать код, работать над электроникой и делать другие увлекательные и полезные вещи. Помочь может каждый!
Код проекта расположен на Sourceforge — там же живёт и трекер
Схемы текущей версии железа
Есть форум
А теперь — слайды!
Автор: andrey239