Fuel Injector Drivers 2010/03/22Posted by Michael in 2JZduino.
[Edited April 10th 2010: Initially I had installed FQP4N20L MOSFETs. These generated too much heat (on resistance of ~1.2 Ohms). I have since switched to IRL640 which has an on resistance of only ~0.15 Ohms.]
The stock 2JZ-GE fuel injectors are 12V 12.5 Ohm solenoids. There are 6 injectors total. When the ECU requests fuel for each cylinder it switches the respective fuel injector wire to ground through a MOSFET of it’s own (I opened the ECU box to have a look at the PCB. It was indeed a MOSFET, although I didn’t record the actual part number).
2JZduino intercepts these fuel injector signals and recreates them through a custom designed Fuel Injector driver circuitry. Below is a schematic of the fuel injector driver circuit for one of the 6 injectors. (Note the schematic shows IRF640, but IRL640 is the correct p/n.)
The stock injector ground path through the 2JZGE engine ECU (2JZGE ECU pin 10) is connected to one of the 2JZduino digital I/O pins (D21). This pin is configured with the pull-up resistor ON; the firmware logic treats itas active LOW. When the stock ECU requests fuel the 2JZduino firmware decides when to drive pin D35 output; this pin is active HIGH and controls the IRL640 MOSFET.
The Avalanche Diode (P6KE150 ) is used to protect against kickback from the solenoid. After the solenoid has been ON, the instant the MOSFET gate is turned OFF (low) the energy in the solenoid coil (inductor) will be driven into the gate of the MOSFET as a voltage spike. The Avalanche diode protects against this over-voltage by breaking down at 150V. The selected breakdown voltage is a compromise between minimizing potential for damage to electrical components and maximizing the reverse voltage to ensure short “off time” of the fuel injector (the time required for the fuel injector to close).
Note that the IRL640 has a built-in diode that breaks down at 200V. Relying on this internal protection however puts excess burden on the MOSFET to regularly dissipate energy (heat) every time the injector closes (every other engine revolution). Instead, the dedicated diode takes on this responsibility.
The last two components are the 10k pull-down resistor connected between gate and ground, and the 220 Ohm resistor at the Arduino output. The 220 Ohm limits the current rush out of the Arduino into the MOSFET gate. The 10k pull-down ensures safe operation in the event that the 2JZduino loses power and the digital output connected to the MOSFET gate floats. This resistor pulls the gate low so that the MOSFET is kept OFF unless explicitly driven HIGH by the digital output of the 2JZduino.
There are some necessary considerations for the power source of this circuit. At 12.5 Ohms each of the 6 injectors will draw about 1 Amp when energized. It is important to draw 12V power from a circuit that can supply the current. Using the IS300 Overall Wiring schematics I found pin A5 which is part of the 25A EFI circuit.
This circuit has so far successfully driven all 6 fuel injectors on my 2JZ-GE engine during idle and up to ~3000 RPM (unloaded). Additional testing is necessary to ensure the MOSFET heatsinks and thermal dissipation of the electrical enclosure provides adequate cooling.