уровень 7.1 · практика

Зажигание

Arduino становится блоком управления зажиганием. Двигатель двухтактный карбюраторный: топливо готовит карбюратор, а от вашей программы нужен ТОЛЬКО момент искры — но именно он решает, будет двигатель работать или заглохнет через пять секунд.

Что читаете

ВыводЧто приходит
D2ДПКВ, датчик коленвала. Фронт LOW→HIGH приходит за 60° до ВМТ, дальше сигнал держится полоборота (шторка на маховике). Период между фронтами — это время оборота.
D4Ключ зажигания: HIGH — включено.
A0Ручка газа: 0…1023. Её крутит человек; на момент искры она не влияет, но влияет на обороты.

Чем управляете

ВыводЧто делает
D9Катушка зажигания. HIGH — накопление энергии, СПАД HIGH→LOW даёт искру. Накопить нужно не меньше 20 мс, а держать дольше 1 секунды — нельзя: катушка сгорит.
D13Лампа «Check» — диагностическая, зажигайте своей ошибкой.

Стенд крутится в замедлении ×10: на приборах настоящие обороты, а физически оборот идёт вдесятеро дольше. Иначе за валом не успеть — loop() исполняется около 35 раз в секунду, и прерываний в этом симуляторе нет. Углы от замедления не зависят, поэтому алгоритм у вас настоящий.

Алгоритм

  1. Поймать фронт на D2 и запомнить время: это 60° до ВМТ.
  2. Период между фронтами — время оборота T.
  3. Включить катушку (начать накопление).
  4. Через T × (60 − 15) / 360 выключить её — искра придёт за 15° до ВМТ.
  5. Ключ выключен — катушку обесточить и искр не давать.

Заводится двигатель рывком шнура — кнопка на сцене. Рывок раскручивает вал, а дальше он живёт только вспышками: без искры обороты падают до нуля за пять секунд.

← К заданию «ЭБУ двигателя»