Блок электронного зажигания на STM32VL DISСOVERY

Давно хотел иметь работающий настольный сувенир, такой как двигатель внутреннего сгорания. Есть такие, продаются в магазинах и в интернете. Качество и красота присутствуют, но цена немного не подходящая. (Восстановил одну из первых своих статей за 2011 год.)





Решил сделать себе такой из доступных средств. Время для этого было мало и то урывками. В качестве основы был взят уже неработающий по причине износа цилиндро-поршневой группы двухтактный компрессионный двигатель от авиамодели КМД-2.5. Изначально, пока он был новый, лет так 40 назад, он работал на трёх компонентной смеси, остатками не сгоревшего топлива забрызгивал всё вокруг, и очень громко шумел. В комнате такой запускать чревато бытовыми проблемами.

Я переделал мотор для работы на газе от бытовой зажигалки, для этого убрал из мотора контр-поршень, сделал отверстие и установил в цилиндр свечу зажигания. Катушку зажигания купил самую дешёвую, от какого-то там снегохода, свеча зажигания от него же.

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

Конденсаторная система зажигания многим хорошая, но требует чуть большего количества деталей, в том числе и намоточных изделий (высоковольтный трансформатор).

Решил сделать электронную бес контактную систему зажигания на микроконтроллере STM32, которая могла с максимальной экономией расходовать при работе электрическую энергию.

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

Начинать такой проект, отлаживать программу и контролировать процессы, не подключив к микроконтроллеру жидкокристаллический дисплей, счёл неразумным.

За основу системы зажигания взял плату STM32VL-DISCOVERY, добавил к ней:

LCD дисплей от nokia 6100 (RGB 132×132 пикселей)



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



А схема получилась такая:



U1 является оптическим датчиком, выполняющим роль датчика угла положения коленчатого вала. Датчик (красный круг на рисунке ниже) установлен сбоку на блоке двигателя, примерно в 90 градусах до верхней мёртвой точки поршня (ВМТ).



В окне датчика проходит край сегментного колеса (сделанного из пробки от баллона карбюраторной промывки), установленного на коленчатом валу двигателя. Сегментное колесо разделено по окружности прорезями на 16 секторов (пропилено бор машинкой), интервал между ними соответствует 22,5 градусам поворота коленчатого вала, один сектор имеет увеличенную прорезь (зелёный овал на рис.3, назовём его сектором ВМТ), что позволяет определить момент прохождения поршня в 90 градусах до ВМТ. Рядом видна наклеенная полоска фольги, отражающая свет от белого прозрачного светодиода LED4, установленного над секторным колесом, выполняющий функции стробоскопа, что позволяет визуально наблюдать момент зажигания.

Сигнал от датчика поступает на вход PB1 микроконтроллера, вызывая прерывание микроконтроллера, как по переднему, так и по заднему фронту сигнала.

При работе с этим оптическим датчиком выявилась проблема, похожая на дребезг контактов, для решения этой проблемы был задействован вывод PB2, реализующий программный дополнительный триггер шмидта для входа PB1.
Переменный резистор R8 подключен к выводу PA4, который используется как вход АЦП. Результат преобразования используется при дополнительном регулировании угла опережения зажигания.

Светодиоды LED1, LED3 (красный, синий) отображают по какому фронту сигнала на выходе оптического датчика произошло прерывание, LED2 (зелёный) информирует о успешном детектировании сектора ВМТ при скорости оборотов коленчатого вала больше 5 в секунду.

Алгоритм детектирования я описал в тексте программы, думаю, кому действительно интересно прочтёт и там.

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

После вычисления требуемого угла опережения, вычисляется, сколько секторов нам надо пропустить (фиксированные значения по 22,5 градуса) после сектора ВМТ, и сколько единиц градусов ещё добавить к ним. Это все переводится в
значение количества тактов для таймера17. В таймер 17 загружаются два числа, первое число (в CCR1)— сколько тактов таймера выждать, прежде чем начать накапливать энергию в катушке зажигания, второе число (в ARR) – сколько тактов таймера накапливать энергию в катушке зажигания. При совпадении значения счётчика таймера 17 и его значения ARR, транзистор катушки зажигания закрывается, и на свече зажигания появляется искра как раз в тот момент, который нам необходим.

Таймер 15 служит для определения соотношения количества тактов таймера в прозрачной и непрозрачной части сектора, что позволяет определить сектор ВМТ и скорость вращения коленчатого вала двигателя.

Я старался программу максимально снабжать комментариями, если что непонятно всегда можно задать вопрос.
При работе схема электронного зажигания потребляла меньше 0.4 ампера при питании 12 вольт. Катушка и силовой транзистор не нагревались.

Опытным путём было установлено, что достаточная энергия в катушке запасается за 3 миллисекунды, что и было задано в программе.

Схема подключения LCD описана в предыдущих проектах, повторятся, не будем.

Вид на мотор со стороны драйвера катушки зажигания:



Какие особенности проявились при отладки устройства:

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

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

Система смазки как на самолёте братьев Райт, детали двигателя смазывается маслом перед полётом, 1 капельки трансмиссионного масла на поршень хватает на несколько запусков. Главное, что бы это масло вылетая, не заляпало, что ни будь. Холодный двигатель на газе запускается без особых проблем, ну а горячий — запросто. Запаха выхлопных газов практически не чувствуется.

Дополнительная регулировка угла опережения с помощью потенциометра при работе двигателя сразу сказывается на звуке работающего мотора, при сильно раннем зажигании мотор начинает работать с повышенным стуком, а при позднем падают обороты двигателя и усиливаются «хлопки» двигателя. Очень наглядно, детям и студентам интересно. Если кому будет интересно посмотреть проект, в программировании я далеко не профессионал, возможно исходники покажутся корявыми, да и алгоритм не совершенным (учитывайте, что статья 11-года, много тогда писалось по другому). Возможны в программе ошибки и неверные комментарии, а некоторые переменные оказались не использованными. Хотел в динамике на дисплее рисовать гистограмму распределения скорости вращения коленчатого вала от его положения, но на данном дисплее всё размывается в круг, нужен дисплей побыстрее.

Видео работы двигателя: yadi.sk/i/hhBccMYXpja5W

Чуть получше (но и побольше размер): yadi.sk/i/XnV2Rf1vpjbtS

Так как статья старая, код древний (еще только начал разбираться с STM32), приложил…

1. Добавлю про газ, может моделистам будет полезно.

В зажигалке используется пропан-бутановая смесь сжиженного газа.

В простой дешевой газовой зажигалке (одноразовая по 5 рублей) примерно 5,5мл (5,5см3) сжиженного газа.

При отрегулированной высоте пламени зажигалки 4см, подавая газ в карбюратор двигателя, его обороты составляют примерно 900 в минуту.

При высоте пламени 10 см, обороты двигателя составляют примерно 2200 оборотов в минуту.

Для сжиженного газа (пропан-бутан) занимаемый объем примерно в 260 раз меньше, чем в газообразном состоянии. Следовательно, из 1 л газа в жидком состоянии получается 0,26 м3 газа в газообразной фазе.

При изменении температуры это соотношение остается таким же, изменяется объем газа при постоянной массе. Тип смеси также не влияет на это соотношение.

Удельный вес пропана (газ) при нуле градусов Цельсия -1,967 кг/м3, бутана — 2,598 кг/м3, плотность сжиженной смеси при 20 градусах — 0,5г /см3=500кг/m3.

Получается тогда:
1 кубический сантиметр сжиженного газа весит 0,5 грамма.
1 кубический сантиметр газообразного газа весит 0,002 грамма.
Удельный вес воздуха при температуре 20 градусов Цельсия и
давлении 760 мм ртутного столба равен 1,205 кг/м3.
1 кубический сантиметр воздуха весит 0,0012 грамма.

Грубо измерив, что за один оборот в секунду двигатель засасывает 1,4 кубического сантиметра воздуха, то формально при 900 оборотах в минуту двигатель должен потреблять воздуха в секунду максимум 21 кубический сантиметр, по массе это 0,025 грамма.

Учитывая, что воздух поступает через дроссельное отверстие карбюратора, и часть засасываемого воздуха вытесняется подаваемым газом, то масса воздуха поступающего в двигатель несколько меньше. При 900 оборотах в минуту расход газа примерно 0,4 см3 в сек, по массе 0,0008 грамма.

Соотношение воздуха и газа по массе в крайнем случае составит 0,025/0.0008 = 31 = 3%,

Так как взрывоопасная концентрация смеси воздуха и газа как раз от 2,1 до 9,5% то двигатель работает.

При расходе газа 0,00078 грамма в секунду, время работы двигателя при 900 оборотах в минуту от полностью заправленной зажигалки, составит примерно 600 секунд (10минут).

И для справки, измеренное манометром давление газа:

в зажигалке (выход сопла) 1,2 атм.
в баллоне УНИСМА 1,7 атм.
в баллоне карбюраторной промывки 4,0 атм.

Астанин Сергей, ICQ: 164487932.
  • +4
  • 18 февраля 2016, 19:18
  • astaninss
  • 1
Файлы в топике: ECM.zip

Комментарии (15)

RSS свернуть / развернуть
В 2016 году приглашаю использовать rusefi.com/ — про него можно прочитать статью we.easyelectronics.ru/Soft/proekt-rusefi-i-mysli-o-programmirovanii-mk-voobsche.html
0
омг, я думал о такой штуке, а кто-то не поленился реализовать )
0
что за привычка пытаться засунуть неподходящую, зато свою вещь? тут делов то на тиньку какую нибудь.
0
Какой тиньки? Симистора и пары резюков КТ315 и и пары кондеров?
0
Симистор даст вывод на дисплей?:)
0
Зачем выводить на дисплей искру?=))
Для электронного зажигания его достаточно! ТО что ТС назвал им из себя представляет ЭБУ двигателя и в него входит зажигание как подсистема
0
И не говорите, и даже это много и сложно :) в начале был пластиковый хомут в качестве эксцентрика и сломанное реле в качестве контактов:
0
«Тинька» не дешевле, из неё дальше ничего хорошего не вырастет, нет того фукционала, что предлагает STM. К тому же, унификация с другими проектами гораздо важнее, чем рассовывать постоянно тут ATMEL, там PIC, затем LPC :) На тот момент STM32 было перспективно, как и сейчас. Чего не скажешь про ATMEL (раньше я тоже много делал на ATMELах). Думаю, интересно не на чем реализовано, а как и для чего.
0
Да я не про тебя, я про контроллер расчитанный на полноценное управление инжекторным двигателем
0
В тиньку 13 влазит ФУОЗ, 2 таблицы опережения и ручная корректировка потенциометром.
0
Алгоритм детектирования я описал в тексте программы, думаю, кому действительно интересно прочтёт и там.
Так как статья старая, код не прилагаю
Приколист…
+1
  • avatar
  • Vga
  • 19 февраля 2016, 10:51
не вопрос — формулируйте что интересует :)
0
Ничего определенного. Намекаю на то, что неплохо бы проект приаттачить. Ну или хотя бы не ссылаться в тексте на неопубликованный проект.
P.S. А где ты это раньше публиковал?
0
electro.luxmentis.ru, был хороший сайт, но стал часто падать и потом совсем умер…
0
Унес в автоэлектронику. т.к. про ДВС :)
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.