Internal combustion engine spark timing controller

Implementation of a micro-controller that controls for the speed, temperature and vacuum, and optimizes the ignition timing in every cycle according to the values measured

In a spark ignition internal combustion engine, Ignition timing refers to the timing, relative to the current piston position and crankshaft angle, of the release of a spark in the combustion chamber near the end of the compression stroke.

In modern engines, ignition timing is made by a controller that schedules the ignition, so it is timed according to some parameters: engine speed, temperature, vacuum, etc.

However, in legacy car engines, ignition timing is traditionally made only by mechanical means and can’t be controlled. Controlling the ignition timing is critical for increasing the engine’s reliability and improving efficiency.

In order to solve this, this project implements a micro-controller that controls for the speed, temperature and vacuum, and optimizes the ignition timing in every cycle according to the values measured.

The micro-controller was implemented on an ESP32 Arduino board. In addition, in order to simulate the full system, some simulators were implemented.

The code was written in C and using the freeRTOS operating system.