Go Back   EcoModder Forum > EcoModding > Instrumentation > OpenGauge / MPGuino FE computer
Register Now
 Register Now
 

Reply  Post New Thread
 
Submit Tools LinkBack Thread Tools
Old 05-14-2009, 02:26 PM   #1 (permalink)
EcoModding Lurker
 
Join Date: Apr 2009
Location: Potomac, MD
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
Question Possible way to measure injector characteristics

I don't know if anyone has tried this yet, but I had an idea about how to
empirically determine, for a given car, the values of:
- parms[injectorSettleTimeIdx]
- parms[microSecondsPerGallonIdx]

(I've looked through the EcoModder forums a bit, but did not notice anything
regarding it. I apologize if this is old hat.)

A fixed 500usec is currently coded for injectorSettleTime. This variable
is used to compensate for the time difference between;
- the electrical pulse length applied to an injector
- the length of time that the injector effectively squirts fuel.

A more accurate value for injectorSettleTime and microsecondsPerGallon
promises to improve MPGuino tank-to-tank accuracy, as a driver's ratio
of city:highway driving varies.

I haven't tried this yet so I don't even know how well it might work.

If anyone has time, I would ask for your feedback regarding this proposed method:

Step1: Modify the void "doDisplayCustom" as follows, in order to read out the
number of injector pulses.
void doDisplayCustom(){displayTripCombo('N','P',injPuls es*1000
,'S',instantmph(),'G','H',instantgph(),'C',current .mpg());}
(Does the above code look like it would work?)

Next enter best guesses for injectorSettleTime and microSecondsPerGallon.

Then take two very different "trips":
Trip 1) Idle the car for 90 minutes. (short average injector pulse lengths,
might want to bring some reading material for this trip)
Trip 2) Drive the car at max legal speed on the highway for about 40
minutes (long average injector pulse lengths)
(NOTE: Start and end each trip at the same gas station, one located just
off of the highway.)

Before each "trip":
1) top off the car with gas
2) perform an MPGuino "tank reset"

After each "trip":
1) record the total number of injector pulses (injPulses)
2) record the "tank gallons" (from "tank gallons" you can derive the
MPGuino injector "on time".)
3) top off the tank with gas and record the actual gas consumed.
4) perform an MPGuino "tank reset"

Armed with this trip information, the following two equations could be solved
for their two unknowns.

Ton1 + (ISTgi - ISTsf) * Npulse1 = uSPGsf * Gal1 [from trip 1]
Ton2 + (ISTgi - ISTsf) * Npulse2 = uSPGsf * Gal2 [from trip 2]

Where...
TonX = Total injector "on time" for each trip
(equals MPGuino "Tank Gallons" / initially guessed
microSecondsPerGallon)
ISTgi = InjectorSettleTime value guessed initially
NpulseX = Total number of injector pulses (as read from MPGuino after
each trip)
GalX = Total actual fuel consumed for each trip (from fuel gas station
receipt)

uSPGsf = microSecondsPerGallon variable to be solved for
ISTsf = InjectorSettleTime variable to be solved for

One could possibly collect this same data for each subsequent tank of gas
and perform a least squares fit to gain the best values.

Let me know what you think...


(I would like to try this but am still awaiting my MPGuino kit from Fundamental
Logic. I also have not yet attempted to use the Arduino software
development environment, to make sure that I can reprogram the
ATmega168.)


- Singletree5990

  Reply With Quote
Alt Today
Popular topics

Other popular topics in this forum...

   
Old 05-14-2009, 03:24 PM   #2 (permalink)
dcb
needs more cowbell
 
dcb's Avatar
 
Join Date: Feb 2008
Location:
Posts: 5,032

pimp mobile - '81 suzuki gs 250 t
90 day: 96.29 mpg (US)

schnitzel - '01 Volkswagen Golf TDI
90 day: 53.56 mpg (US)
Thanks: 156
Thanked 264 Times in 207 Posts
Let me understand, for a given number of pulses and injector open time, you can have multiple combinations of injdelay and us/gal that result in the same indicated quantity of fuel delivered.

What you are saying is record them for multiple trips and see if there is only one combination of injdelay and us/gal that works for all the trips.

Not a bad idea. I'm not sure how much return this will bring in terms of accuracy or what percentage of people will bother. But it is a good acedemic exercise at the least. You will have to be extra consistent on everything at refill time i.e. make everything the same, pump #, location and position in relation to pump , time of day, temperature, nozzle angle and insertion, 1st click, amount of deadweight and it's location in the car, suspension settling, etc. etc.

But the trips themselves should reflect very different driving styles, though the system voltage should somehow stay consistent.

Also note that somewhere, the injector parameters may be published including time to open at different voltages.
__________________
WINDMILLS DO NOT WORK THAT WAY!!!
  Reply With Quote
Old 05-14-2009, 04:02 PM   #3 (permalink)
dcb
needs more cowbell
 
dcb's Avatar
 
Join Date: Feb 2008
Location:
Posts: 5,032

pimp mobile - '81 suzuki gs 250 t
90 day: 96.29 mpg (US)

schnitzel - '01 Volkswagen Golf TDI
90 day: 53.56 mpg (US)
Thanks: 156
Thanked 264 Times in 207 Posts
I would suggest changing tDisplay thusly (so current and tank data screens show injector pulses in the upper left instead of mph) :
PHP Code:
//arduino doesn't do well with types defined in a script as parameters, so have to pass as void * and use -> notation.      
void tDisplayvoid r){ //display trip functions.        
  
Trip *= (Trip *)r;      
  
LCD::gotoXY(0,0);LCD::print("IP");LCD::print(format(t->injPulses*1000));LCD::print("MG");LCD::print(format(t->mpg()));      
  
LCD::gotoXY(0,1);LCD::print("MI");LCD::print(format(t->miles()));LCD::print("GA");LCD::print(format(t->gallons()));      

__________________
WINDMILLS DO NOT WORK THAT WAY!!!
  Reply With Quote
Old 05-14-2009, 05:43 PM   #4 (permalink)
EcoModding Lurker
 
Join Date: Apr 2009
Location: Potomac, MD
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
Smile Possible way to measure injector characteristics (cont.)

dcb,

Thank you very much for your response, and your advice.

I'm very impressed with the kind, helpful, humble, and extremely
technically competent EcoModder culture, which your colleagues, and you
especially, emulate.

As you mentioned, this refinement may not make much of a difference, but I
do wonder how the effective injectorSettleTimes might compare to 500usec.

As soon as I collect the data on my 1993 Volvo, I will post it in this thread.

To address the system Voltage concern, I'll plan to measure the system
Voltage at the start and end of each "trip". That will give me the option of attempting a correction if necessary.

I may be back asking for help if I have trouble getting the Arduino
environment and/or programming capability setup and working.


Thanks and regards, Singletree5990
  Reply With Quote
Old 06-18-2009, 01:10 PM   #5 (permalink)
EcoModding Lurker
 
Join Date: Apr 2009
Location: Potomac, MD
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
Thumbs up Off to a good start

Here is the latest on my progress...

I received and constructed my MPGuino kit without
issue.

Using the Arduino software environment I modified
the ATmega168's firmware, With the code change you
recommended, plus another one as well to directly
track the following variables:
- tank.injHiSec
- tank.injHius
- injPulses

These code changes worked well.

Following your suggestion, I looked further into the
effects of:
- Fuel Temperature:
- Gasoline's coefficient thermal expansion =
950ppm/deg K, which is rather large. I added
a thermometer to monitor the fuel temperature
during fill-ups to allow compensation for this.
- Battery Voltage:
- I made oscilloscope measurements to
understand how much the injector delay was
affected by battery Voltage.
- By powering the injectors with a separate
power supply, connected to a big honkin cap,
and using my oscope, I was able to look at
how the injectors' delay-time varied with
Voltage by measuring the change in time that
their "pintle humps" appeared.
- (see http://www.motor.com/magazine/pdfs/012005_04.pdf
for a great explanation about interpreting
injector oscope plots.)
- These measurements indicated that the injDelay, on
these injectors, would drop by about 155usec for
each one-Volt increase in battery Voltage.

I modified my MPGuino code to measure battery Voltage (Vbat)
using the ATmega168's ADC. This allowed me to compensate for
injector delay as battery Voltage varied. (I have attached
a copy of my latest code. This mod also required the
addition of a resistor divider and two capacitors on the
MPGuino circuit board.)

I have not yet performed my two-trip injector calibration.
(This has now become a three trip calibration since I
now have three variables, due to the fact that my inj delay
now includes a Voltage coefficient.)

As a side note: I did encounter what I suspect was an issue
with Arduino-0011 properly handling statements to modify
bits within the ADCSRA register.
I was trying to write "00000101b" by using
different permutations of
"ADCSRA|=((1<<ADPS2|1<<ADPS0)&!(1<<ADPS1));"
but had to resort to
"ADCSRA=5;"
to achieve the desired value in the register.



Thanks and regards, Singletree5990
Attached Files
File Type: zip mpguino_B.zip (12.5 KB, 151 views)
  Reply With Quote
Old 06-18-2009, 06:52 PM   #6 (permalink)
dcb
needs more cowbell
 
dcb's Avatar
 
Join Date: Feb 2008
Location:
Posts: 5,032

pimp mobile - '81 suzuki gs 250 t
90 day: 96.29 mpg (US)

schnitzel - '01 Volkswagen Golf TDI
90 day: 53.56 mpg (US)
Thanks: 156
Thanked 264 Times in 207 Posts
Very cool, added a mention to the guino hacks page:
Code hacks - EcoModder
__________________
WINDMILLS DO NOT WORK THAT WAY!!!
  Reply With Quote
Old 01-02-2015, 04:52 AM   #7 (permalink)
EcoModding Apprentice
 
Join Date: Aug 2014
Location: Adelaide, Australia
Posts: 118

Emerald - '97 Honda Civic CXi
90 day: 40.13 mpg (US)
Thanks: 53
Thanked 53 Times in 32 Posts
Quote:
Originally Posted by Singletree5990 View Post
As a side note: I did encounter what I suspect was an issue
with Arduino-0011 properly handling statements to modify
bits within the ADCSRA register.
I was trying to write "00000101b" by using
different permutations of
"ADCSRA|=((1<<ADPS2|1<<ADPS0)&!(1<<ADPS1));"
but had to resort to
"ADCSRA=5;"
to achieve the desired value in the register.
Very old thread, I know, but just for the benefit of anyone coming across this bit: "!" is a "boolean not", and will return 0 (false) if the operand is non-zero (true), and 1 (true) if the operand is zero (false). You were probably thinking of the operator "~", which is binary inverse.

  Reply With Quote
The Following User Says Thank You to Madact For This Useful Post:
RustyLugNut (01-02-2015)
Reply  Post New Thread


Tags
singletree5990

Thread Tools


Similar Threads
Thread Thread Starter Forum Replies Last Post
DIY Frontal Area Measurement newtonsfirstlaw DIY / How-to 5 11-22-2015 12:46 PM
Measure the drag coefficient of your car fabrio. EcoModding Central 30 06-19-2012 12:57 PM
Using Google Earth to measure odometer accuracy MetroMPG DIY / How-to 10 07-12-2011 03:38 PM
Alternative Measure of Efficiency? superchow General Efficiency Discussion 1 06-18-2008 07:03 AM
Units of Measure Who The Lounge 3 03-05-2008 03:19 PM



Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, vBulletin Solutions Inc.
Content Relevant URLs by vBSEO 3.5.2
All content copyright EcoModder.com