Let's start from the Aprilia Caponord ECU Injection system:
Therefore each injection coil is connected to +12V directly and grounded via the ECU circuit, the ECU Injector driver circuit looks like this:
The above picture represent a simple ECU circuit to drive the Fuel Injector. In essence, the ECU (the XE164 in the case of MaxPowerCMD) drives the first BJT transistor that acts as a voltage buffer to being able to drive the power MOS with higher voltages than the uC power supply (Aprilia RSV1000 Injector driver circuit is visible at Randomexploits).
Fuel Injectors
Let's copy some useful description of Fuel Injectors (or from Wiki).
The injector is an electromechanical device, which is fed by a 12 volt supply from either the fuel injection relay or the ECM. The injector is supplied with fuel from a common fuel rail. The injector pulse width depends on the input signals seen by the ECM from its various engine sensors, and varies to compensate for cold engine starting and warm-up periods, the initial wide pulse getting narrower as the engine warms to operating temperature. The pulse width also expands under acceleration and contracts under light load conditions. The injector has constant voltage supply while the engine is running and the earth path is switched via the ECM. An example of a typical voltage waveform is shown below in:
Note that the solenoid voltage increases up to about 60V after the power MOS is turned off (as a result of the constant elettro-magnetic field).
Is then easy to understand that every time that ECU drives a current trough the injector solenoid, after an initial set-up time, a fuel injection will occur, as visible in: fuel injection animation.
An electromechanical injector of course takes a short time to react, as it requires a level of magnetism to build before the pintle is lifted off its seat. This time is called the ‘solenoid reaction time’. This delay is important to monitor and can sometimes occupy a third of the total pulse width. A good example of the delay in opening can be seen in the example waveform shown below:
Note that the injector solenoid current is quite low, about 0.6A (Mr. Jefferies MyECU declares 1 - 2 A per injector)
The waveform is ‘split’ into two clearly defined areas. The first part of the waveform is responsible for the electromagnetic force lifting the pintle, in this example taking approximately 0.6 ms. At this point the current can be seen to level off before rising again as the pintle is held open. With this level off ind it can be seen that the amount of time that the injector is held open is not necessarily the same as the time measured. It is not however possible to calculate the time taken for the injector’s spring to fully close the injector and cut off the fuel flow.
Wiki documentation claims that
Injector pulsewidth typically ranges from 4 ms/engine-cycle at idle, to 35 ms per engine-cycle at wide-open throttle. The pulsewidth accuracy is approximately 0.01 ms.
The above voltage / current measurement scopes are showing a 4msec injection pulsewidth.
In my project MaxPowerCMD is not important to learn how to calculate the Fuel Injection pulsewidth since this is done by the motorbike ECU hardware. The motorbike ECU will feed the MaxPowerCMD with the desired Fuel Injection pulsewidth, but MaxPowerCMD will drive the Injector by changing the injection pulse, as for example:
- motorbike ECU pulsewidth = 5 msec
==> MaxPowerCMD [RPM, trottle, gear, ...] = 110%
==> MapowerCMD will drive a 5.5msec injection pulse
... and so on...
I think now is more clear what has to be done in software by using the powerful XE164 System on Chip.