Arduino powered fuel injector tester.

Disclaimer: Links on this page pointing to Amazon, eBay and other sites may include affiliate code. If you click them and make a purchase, we may earn a small commission.

Jrgunn5150

Questionable methods
Joined
Jan 11, 2016
Posts
2,739
Reaction score
1,412
Location
Ionia Mi
First Name
J.R.
Truck Year
1979
Truck Model
C10
Engine Size
6.slow
I'm working on an Arduino powered fuel injector flow tester. I started out with a simple wave generator and a timer, but the relay I was using couldn't operate quickly enough, then I burned up the wave generator lol.

It seems quite a few people have started on different testers, and either never finished them, or post Youtube videos and won't post up the code. I guess that's their pejorative, but not really how I roll.

So, it's my personal first Arduino project, and I intend to keep it simple.

I bought a heavy duty MOSFET board capable of 100V and 100A here, https://www.tindie.com/products/DrAzzy/4-channel-logic-level-mosfet-driver-100a-up-to100v/

In theory, that should allow me to turn the Arduino's 5v PWM output into a 12v output, or whatever I want really. That will cover the dynamic testing. I'm simply going to run them at 50khz to simulate 6000 rpm, I see no need to run them through a range of RPM like I see some people doing.

Then I believe I should be able to write an even simpler program to short the injectors open for a set time, which will give me static testing and my actual flow numbers on my decaps.

So, next week as the parts get here and I teach myself IDE programming, stay tuned for more updates.
 

yevgenievich

Full Access Member
Joined
Mar 1, 2014
Posts
4,789
Reaction score
3,327
Location
Texas
First Name
Viktor
Truck Year
sad
Truck Model
very sad
Engine Size
less sad
Should be simple, do you want to change frequency and duty cycle via two pots or just set it and have two switches for activating different modes? There are plenty examples of code out there. I can post some parts from different projects that I had to deal over time if interested that might be relevant.
Pwm is easy, but usually implies a specific frequency set. Less documented projects change clock frequency depending on input parameters. Smaller foot print and maybe simpler could implement using 555 timer. Just a couple of components and it can have variable frequency and variable duty cycle just using two pots.
 
Last edited:

Jrgunn5150

Questionable methods
Joined
Jan 11, 2016
Posts
2,739
Reaction score
1,412
Location
Ionia Mi
First Name
J.R.
Truck Year
1979
Truck Model
C10
Engine Size
6.slow
Should be simple, do you want to change frequency and duty cycle via two pots or just set it and have two switches for activating different modes? There are plenty examples of code out there. I can post some parts from different projects that I had to deal over time if interested that might be relevant.

Well, initially, I only need a timed 100% duty cycle since injectors are rated at 100@ and 43.5lbs of fuel pressure. They will give me the actual "flow" of the injectors I need for HP Tuners.

For the dynamic part, I'm open to suggestions. I believe being able to change the frequency via pots might be most beneficial for dynamic testing though.

This guy runs some kind of oddball cycle that I really can't see the value of, although I can certainly see the value of being able to observe flow and spray pattern at various rpm's

xc_hide_links_from_guests_guests_error_hide_media
 

yevgenievich

Full Access Member
Joined
Mar 1, 2014
Posts
4,789
Reaction score
3,327
Location
Texas
First Name
Viktor
Truck Year
sad
Truck Model
very sad
Engine Size
less sad
555 timer example

You must be registered for see images attach
 

yevgenievich

Full Access Member
Joined
Mar 1, 2014
Posts
4,789
Reaction score
3,327
Location
Texas
First Name
Viktor
Truck Year
sad
Truck Model
very sad
Engine Size
less sad
The example he has is super simple and will work for static. Can even just use the wait function to create a certain frequency output for simple preset outputs. The 555 timer can be used for full dynamic testing or arduino. I can upload some code on Monday that shows dynamic manipulations to frequency output. It requires changing the clock multiplier via register edits.
Dave Follet's plan, I found here, http://www.twistedbuilds.com/arduino-controller-setup-for-the-home-build-fuel-injector-flow-bench/

Is more than sufficient for the initial flow testing I believe. I just came across it now.
 

yevgenievich

Full Access Member
Joined
Mar 1, 2014
Posts
4,789
Reaction score
3,327
Location
Texas
First Name
Viktor
Truck Year
sad
Truck Model
very sad
Engine Size
less sad
Originally was written by Nick Gammon in 2012
I modified and added to the code in 2013
All credit goes to Nick as was built purely on his example and modified for my needs.
Was working on mega 2560
The purpose for me was to read input frequency and out put a modified frequency with a specific multiplier.

#include <PWM.h>

// input on pin D47 (T5)

// these are checked for in the main program
volatile unsigned long timerCounts;
volatile boolean counterReady;

// internal to counting routine
unsigned long overflowCount;
unsigned int timerTicks;
unsigned int timerPeriod;
void startCounting (unsigned int ms)
{

counterReady = false; // time not up yet
timerPeriod = ms; // how many 1 mS counts to do
timerTicks = 0; // reset interrupt counter
overflowCount = 0; // no overflows yet

// reset Timer 2 and Timer 5
TCCR2A = 0;
TCCR2B = 0;
TCCR5A = 0;
TCCR5B = 0;

// Timer 5 - counts events on pin D47
TIMSK5 = _BV (TOIE1); // interrupt on Timer 5 overflow

// Timer 2 - gives us our 1 mS counting interval
// 16 MHz clock (62.5 nS per tick) - prescaled by 128
// counter increments every 8 uS.
// So we count 125 of them, giving exactly 1000 uS (1 mS)
TCCR2A = _BV (WGM21) ; // CTC mode
OCR2A = 124; // count up to 125 (zero relative!!!!)

// Timer 2 - interrupt on match (ie. every 1 mS)
TIMSK2 = _BV (OCIE2A); // enable Timer2 Interrupt

TCNT2 = 0;
TCNT5 = 0; // Both counters to zero

// Reset prescalers
GTCCR = _BV (PSRASY); // reset prescaler now
// start Timer 2
TCCR2B = _BV (CS20) | _BV (CS22) ; // prescaler of 128
// start Timer 5
// External clock source on T4 pin (D47). Clock on rising edge.
TCCR5B = _BV (CS50) | _BV (CS51) | _BV (CS52);

} // end of startCounting

ISR (TIMER5_OVF_vect)
{
++overflowCount; // count number of Counter1 overflows
} // end of TIMER5_OVF_vect


//******************************************************************
// Timer2 Interrupt Service is invoked by hardware Timer 2 every 1ms = 1000 Hz
// 16Mhz / 128 / 125 = 1000 Hz

ISR (TIMER2_COMPA_vect)
{
// grab counter value before it changes any more
unsigned int timer5CounterValue;
timer5CounterValue = TCNT5; // see datasheet, (accessing 16-bit registers)

// see if we have reached timing period
if (++timerTicks < timerPeriod)
return; // not yet

// if just missed an overflow
if (TIFR5 & TOV5)
overflowCount++;

// end of gate time, measurement ready

TCCR5A = 0; // stop timer 5
TCCR5B = 0;

TCCR2A = 0; // stop timer 2
TCCR2B = 0;

TIMSK2 = 0; // disable Timer2 Interrupt
TIMSK5 = 0; // disable Timer5 Interrupt

// calculate total count
timerCounts = (overflowCount << 16) + timer5CounterValue; // each overflow is 65536 more
counterReady = true; // set global flag for end count period
} // end of TIMER2_COMPA_vect

int32_t frq_out = 0;
void setup () {
Serial.begin(115200);
Serial.println("Frequency Counter");
Timer1_Initialize();


} // end of setup


void loop () {

// stop Timer 0 interrupts from throwing the count out
byte oldTCCR0A = TCCR0A;
byte oldTCCR0B = TCCR0B;
TCCR0A = 0; // stop timer 0
TCCR0B = 0;

startCounting (500); // how many mS to count for

while (!counterReady)
{ } // loop until count over

// adjust counts by counting interval to give frequency in Hz
float frq = (timerCounts * 1000.0) / timerPeriod;
frq_out = frq * 3;
SetPinFrequencySafe(12, frq_out);
//Timer1_SetFrequency(frq_out);
float getfrq = Timer1_GetFrequency();
pwmWrite(12, 125);
// restart timer 0
TCCR0A = oldTCCR0A;
TCCR0B = oldTCCR0B;

Serial.print ("Frequency: ");
Serial.println ((unsigned long) frq);
Serial.print ("Frequency out: ");
Serial.println ((unsigned long) frq_out);
Serial.print ("Getfrq: ");
Serial.println ((unsigned long) getfrq);

// let serial stuff finish
delay(200);

} // end of loop
 

Jrgunn5150

Questionable methods
Joined
Jan 11, 2016
Posts
2,739
Reaction score
1,412
Location
Ionia Mi
First Name
J.R.
Truck Year
1979
Truck Model
C10
Engine Size
6.slow

That looks pretty helpful. Hopefully my stuff shows up tomorrow and I can start digging into it. I've ordered some SSR's as well to be able to replicate the ECU controlling the grounds.

If nothing else, I'd like to be able to quantify if it makes any difference how the injector is controlled, whether via ground or hot.
 

Jrgunn5150

Questionable methods
Joined
Jan 11, 2016
Posts
2,739
Reaction score
1,412
Location
Ionia Mi
First Name
J.R.
Truck Year
1979
Truck Model
C10
Engine Size
6.slow
Ok, so I have everything here, I'm going to dig into it today. I got Dale Follets simple diagram done and the sketch almost working last night. For some reason it's not clicking off after the pre-set time, but I'm sure I'll sort that out this afternoon and get a fixture built.

I got a set of super MOSFETS and a set of Solid State Relays so I can try to run dynamic and cleaning cycles as well.
 

Jrgunn5150

Questionable methods
Joined
Jan 11, 2016
Posts
2,739
Reaction score
1,412
Location
Ionia Mi
First Name
J.R.
Truck Year
1979
Truck Model
C10
Engine Size
6.slow
Version 1.0 is done, at least part 1,

xc_hide_links_from_guests_guests_error_hide_media
 

Jrgunn5150

Questionable methods
Joined
Jan 11, 2016
Posts
2,739
Reaction score
1,412
Location
Ionia Mi
First Name
J.R.
Truck Year
1979
Truck Model
C10
Engine Size
6.slow
Cabinet mostly finished,

You must be registered for see images attach
 

Jrgunn5150

Questionable methods
Joined
Jan 11, 2016
Posts
2,739
Reaction score
1,412
Location
Ionia Mi
First Name
J.R.
Truck Year
1979
Truck Model
C10
Engine Size
6.slow
And, phase 1 complete

xc_hide_links_from_guests_guests_error_hide_media
 

Rustybucket73

Junior Member
Joined
Dec 5, 2017
Posts
22
Reaction score
27
Location
SF Bay Area
First Name
John
Truck Year
'73
Truck Model
C10 Stepside
Engine Size
5.3 LS
I'm doing the same thing, just built the frame today. Still waiting on parts but getting ready for that decapped goodness.

You must be registered for see images attach



I'll be using Dale's code and modified the dynamic test so it goes through the following ranges:

600rpm @85%DC = 30 low 170 high For 5 Sec = 25 cycles
1200rpm @85%DC = 15 low 85 high For 5 Sec = 50 cycles
2000rpm @85%DC = 9 low 51 high For 5 Sec = 83 cycles
3000 rpm @85%DC = 6 low 34 high For 5 Sec = 125 cycles
6000 rpm @85%DC = 3 low 17 high For 5 Sec = 250 cycles

I'm also taking cues from sloppy and planning on "y-ing" two cheap pumps together. Hopefully I'll be able to flow four decapped injectors at the same time.
 
Last edited:

shiftpro

Full Access Member
Joined
Aug 31, 2012
Posts
4,855
Reaction score
6,086
Location
BC Canada
First Name
shiftpro
Truck Year
73-87
Truck Model
1500, 2500, 3500
Engine Size
350, 383, 454, 496!
I read the definition of Arduino several times and still kinda wtf? Umm... a computer controlled servo...?
And Open source... no idea.. a gang bang maybe? Fluster cluck?
Looking at Viktor's post above totally finished me off.
 

Rustybucket73

Junior Member
Joined
Dec 5, 2017
Posts
22
Reaction score
27
Location
SF Bay Area
First Name
John
Truck Year
'73
Truck Model
C10 Stepside
Engine Size
5.3 LS
Finished making my flow rig and flowed about 20 injectors, still don't have a perfectly matched set.

The closest set of 8 is within 2.5% dynamically and perfect on the static test.

Gotta go back to the junkyard and get some more.

xc_hide_links_from_guests_guests_error_hide_media

How everything is wired up on the back, might be a little overkill haha

You must be registered for see images attach


The "sloppy" dual fuel pump setup

You must be registered for see images attach


The injectors I flowed

You must be registered for see images attach


And the flow numbers for all the injectors

You must be registered for see images attach
 

Forum statistics

Threads
42,116
Posts
909,467
Members
33,611
Latest member
RNFL
Top