Fuel injector driver

Hey im new to the forum and Arduinos in general, so any and all input is appreciated. What im working with will be an Arduino uno and what im looking to make is a fuel inejctor driver for my truck. I know the issue of building an ecu has been touched on many a time but im not looking to make a whole ECU, i simply want it to read a voltage from a MAP sensor (0-5v) and determine a pulse width to apply to the two fuel injectors. some background for this project is im running a 91 ford f-150 with a stock ECU and am about to slap twin turbos on it, the only issue being the factory MAP sensor is only a 1 BAR so it isnt able to read the 14.7 lbs ill be running. So my solution instead of buying a mega squirt is to use an Arduino to read the secondary MAP sensor voltage and then do a calculation to determine how much fuel to give, its basically a supplementary set of injectors that will only run when the truck is under a boost condition, so any time there is no boost the only thing running will be the factory set of injectors. Thanks again for any and all responses!

1 Like

So..

To clarify...

You get a pulse that would normally fire the injector for a set period of time, e.g. the pulse stays at for example 12V for 1 millisecond, and you want to sense when this 1 millisecond pulse arrives, and then output a different length pulse based on the value read from an analogue input in the range 0 to 5V and possibly MAP the pulse length so that its not a linear relationship between input voltage and output pulse width?

How many inputs are you using, i.e you have multiple injectors, so do you have multiple incoming pulses that he Arduino has to listen for?

If so how many e.g. is it an 8 cylinder engine ? so you'd need 8 injector pulse inputs and 8 injector pulse outputs ?

Is there just one incoming voltage which controls the width of all output pulses ?

Does each injector need a different pulse width mapping (I'm assuming not, but its best not to assume)

I suspect that if you have more than 1 injector input, you are going to need to handle the timing in the main loop(), as the Arduino doesn't have enough hardware timers to handle multiple injectors

What sort of timing accuracy do you require, ie is it millisecond accuracy or is microsecond accuracy required. I suspect the latter.

The engine is a straight six, and it will be retaining all of its factory ecu and inectors, all im adding is a second MAP sensor and 2 inejctors that will batch fire, they dont have to be timed with the engine speed they just need a pulsed interval.

so the inputs of the arduino ill be the analog voltage from the MAP sensor (0-5v)

and the outputs will be the constant 5 volt reference for the MAP sensor and then a pwm for a set of mosfets that will ground out the two fuel injectors, they will be fed a constant 12v

Basically what i am building is a supplementary fuel system that will be triggered when the engine goes into boost, so when the MAP sensor reads 2.5v or something it will start the injector cycle and then depending on if the voltage and boost increase it will increase the pulse width or if the voltage decreases it will either lower the pulses or turn the secondary injectors off.

I am doing this because the main ECU cant read above atmospheric pressure

As for accuracy its not so much a concern, i just want to make sure fuel is getting to the cylinders.

I was thinking of trying to do something like the manufacturers do and build a table for the arduino to call on when calculating the pulse width for the injectors based on the voltage of the MAP sensor

I may include a temperature sensor for richening the mixture at colder temperatures, but at the moment i dont really see it as a necessity sense i wont be boosting the engine while its cold

A map sensor on it's own is not the whole story is it? You'd also need to look at engine RPM (at an absolute minimum) and possibly engine temperature.

I think I understand what you're doing. Some small Ford engines have just one fuel injector for 4 cylinders. This is just putting fuel into the airstream in a similar manner to a carburetor system. So although the timing isn't critical, the volume of air IS. That can't be assessed by a MAP sensor alone.

It's quite doable though.

A MAP sensor should be all i need because all im trying to do is introduce more fuel into the engine because the factory ecu cant. Rpm isnt really necessary in my opinion sense all im trying to accomplish is supplying more fuel for the boost pressures ill be reaching.

i will be keeping the original ECU that will still run the whole time, the arduino is just going to add more fuel into the plenum and calculate how much from the output of the secondary MAP sensor

Even with the factory fitted injectors doing their job, you still need the volume of air moving through the engine to have the remotest chance of getting your mixture stable.

i was just going to go for the basic, dump fuel into it and hook a wideband to it and adjust the pulsewidth till its 11:1 while in boost

Do you think i should add a rpm reference from the distributor? Also am i asking an uno to do too many things?

The engine is a 1991 4.9L Ford inline six, so it will be turning 3500-4k at most

An uno could cope with that easy. Had a guy on here the other week that was measuring RPM upto and beyond 20,000 rpm.

I'd suggest you also have some kind of display. Then during testing, you could have an observer watching RPM and MAP reading. If you detect any performance issues, you'll know which part of your map table needs adjusting.

Well cool, I was debating using a LCD to show the readings, and maybe even add an SD card to map the data, but like I said I have no idea how to code this sense this is my first time using arduino. So if you could point me in the correct direction to get me started that would be awesome, and if you could help me write the code that would be great too, but if you do help with the code could you explain it so I can have learned something and not just mooched off you? Thanks a million