No announcement yet.

Tuning OBD1 Systems

  • Getting Started

  • Tuning OBD1 Systems

    The simplest thing to start tuning is fueling. Most OBD1 ECM/PCMs are Speed-Density (SD), so I'll focus on those. I may touch on MAF a bit, but nowhere near the amount of a SD PCM. I don't have nearly as much experience with them.

    Fuel: fairly easy to tune as long as all of your sensors are working correctly. A wideband is NOT necessary, though it will make WOT tuning easier. The way GM ECMs account for fuel changes are through BLM and INT. BLM (Block Learn Multiplier) is a long term trim, INT (Integrator) is a short term trim, and is very related to BLM.

    Something to keep in mind: BLM moves to keep INT happy. The INT is happy when (stock anyways, since it is an adjustable value) it is 4 of 128. Once the INT moves beyond that, the BLM moves in the direction of the INT and then the INT will move back toward 128. Luckily, below 128 means the motor WAS running rich, so above 128 means it WAS running lean. As long as the INT is at 128(and in closed loop), the car is at stoich, regardless of what the BLM is at. The BLM just shows how far off the VE tables are.

    I just mentioned that it was "lucky" that low BLMs/INTs means rich: assuming your current BLM/INT values are 128, if you divide the values by 128, you will get the number 1. 1 means perfect fueling, which is what you should aim for, though it may be impossible to reach it due to sensor error and table limits. Anything above 1 shows exactly how much more VE should be added to a certain cell to have it correct. Anything less shows exactly how much VE should be taken out to achieve a stoich AFR without O2 correction.

    In most speed-density tunes, there are at least two VE tables: Main and Base. The simplest way to explain it is that Base + Main = calculated VE. for example, let's say we are cruising at 55MPH, which is roughly ~1600RPM at 55kPa in 4th gear with a 1990GP 3.1 with 3.33 gears and slightly taller than stock tires. Now we'll play with GM stock BINs since it's much safer to learn where there have been a LOT of fudge factors included. In BFBD, the Main VE at 1600-55 is 29.02. The base is 32.94. Just simply add them, and that is what the ECU expects to be correct before O2 correction. It comes out to 61.96.

    In 6D, 88, A1, DF and more, there are actually three VE tables, Main, Base and Idle. Idle is fairly easy to deal with since it's basically the Main table, just at lower RPMs (up to 1600 in A1). It also uses the concept of adding the Base table to it for a total VE number. Now, since fueling differences at idle and non-idle at the same RPM and kPa SHOULDN'T exist (unless the amount of advance is vastly different), we will use the same values for both. Now the Idle table is more defined in the ranges that it applies to, but it's basically wasted since we are just going to interpolate the desired value anyway. I use a spreadsheet for this (and MUCH more) since a computer is much less likely to make a math error than a human.

    If there isn't enough adjustability in the main table, you WILL need to play with the base table, or as a last resort, change the base pulse constant. I say last resort since it changes EVERYTHING fuel related, and will require you to re-tune all fuel-related items.

    I will continue with all important things based on the A1 definition since it's pretty widely used and documented. DF is also very documented and widely used, but I didn't make the XDF for it, and A1 is a bit more common.

    Terms that confuse people:
    • Delta: it means difference, as in difference between the last time it was read. It can be 6.25ms, or it can be 1 second, depends on what you're dealing with.
    • Alpha-N: Basing fuel(and potentially spark) off of mainly TPS% and RPM.
    • Interpolate: this is to look at two values, or more in the case of 3D maps, and then have a weighted average of them based on how close the read value is to the cell values.

    • Checksum: usually a 2-byte value, it is what the ECM will look at after going through and adding almost every byte in the PROM (very few are left out, only in the beginning of the BIN).
    • Mask ID: if it doesn't match your XDF, you have a problem. If it is $AA, then that disables the checksum routine that the ECM/PCM goes through when it first gets power.
    • Number of cylinders: not sure of exact operation, but just set to the correct value and forget about it.
    • IP Pulse Divisor: you shouldn't need to play with this unless you swap gauge clusters or swap to a different mask. I've written a guide in the A1 XDF on how to use it. It basically is a software based pulse divider; most instrument clusters want to see 4000 pulses per mile, and most VSS reluctors produce a signal much higher, for example, a stock BFBD BIN shows 40,070 pulses per mile due to VSS reluctor and tire combination. Now it also has an IP divider of 160(which corresponds to "divide by 10") and that's how the I/C gets its 4K PPM.
    • VSS Constant: this is how you account for changes in tire size. It also takes into account how many notches are on the reluctor wheel in your transaxle for the VSS... It is measured in pulses per mile, so take your tire size, calc out how many revolutions it makes in a mile, multiply it by the number of notches on the reluctor wheel, and you have your number. There MAY be certain restrictions to this (depending on the exact VSS setup), but that will cover most people.
    • Recrank no-start timer: I assume this will prevent the injectors from firing for the period of time after a stall. I've never had to mess with it.
    • Max RPM for Barometric update: exactly as it sounds, the highest RPM where the ECM will update its barometric value. I would never want to put this value above the peak torque RPM.
    • Barometric update rate: just how it sounds, how long the ECM will wait between its updates to the barometric value that it uses for certain functions.
    • Time before vehicle not moving bit is set: I assume it's for idle control, but I've never had to adjust it. I'm thinking it starts a timer once the MPH value hits 0 and then waits for this period before setting it.
    • Maximum MAP offset for baro adjustment: how far the ECM can adjust the barometric value based on MAP when it's in the correct conditions to update baro.
    • VATS minimum/maximum frequencies: this is something the factory setup based on the passkey module installed in the vehicle. I believe most run at either a 30Hz or 50Hz frequency (can't remember ATM), and this is how to tell the ECM what kind of signal to expect and if it goes outside of the range, it considers it a VATS issue and will likely kill the injectors.
    • Reset DTCs after this many powerups: how many key-on key-off cycles it takes to clear codes. There may be an actual starting/driving requirement, but it doesn't really matter.
    • Manual Value: if you're running anything other than an auto, this needs to read 1. Dont ask, it just does.
    • Redline: not sure why, but there seem to be multiple rev limit constants and this is one of them.
    • Fuel delivery mode: determines if the ECM will fire in MPFI or TBI mode and how many cylinders the ECM is expecting.
    • PROM ID: useful for a few reasons. For a stock vehicle that's had its MEMCAL sticker rubbed off/removed, it can tell you what you're dealing with. If you're into tuning, you can use it to have a static value (such as putting injector size in the datastream) for using it to aid in tuning.
    • EPROM date code/production sequence numbers: pretty much useless. They have no value in anything.
    • Customer ID bytes: also useless, but for some reason, they exist.

    • SappySE107
      SappySE107 commented
      Editing a comment
      Needs updated! Links are broken for freescan and all moates products. Also, tunerpro can scan most of our OBD1 systems.
    Posting comments is disabled.

Article Tags


There are no tags yet.

Latest Articles


  • DHP Software
    DHP PowrTuner

    DHP PowrTuner is an OBD-II tuning device.

    DHP PowrTuner v1.2.4 [04/26/07]
    DHP Database Update [05/21/07]
    DHP PowrTuner Manual
    02-14-2011, 02:17 PM
  • How to: Megasquirt2 v3.0 and Megatune
    First step is to plan and buy your Megasquirt. I used a v3.0 board and a MS2 processor.
    Currently, the latest board release is v3.57 and processor is MS3. However, you do not need a v3.57 board to install a MS3 processor. It will work for either board version.

    I recommend a V3.0 board because it currently has the best documentation. However, the 3.57 board is pre-assembled if you are not handy with a soldering iron. If you choose a 3.57 board, you need to know this information to use this write-up.

    $430 Includes MS2 processor

    $253 not including processor.

    Processor choice is completely up to you.
    The MS2 processor has the best documentation and is easy to set up and use. However, it only has a limited number of inputs and outputs and cannot handle advanced engine operations like sequential fuel injection.


    The MS3 processor is very new and much more advanced. It is highly expandable and is for a true enthusiast.

    $199 This article however, only covers the MS2 processor.

    You can optionally buy the Megastim. The stimulator acts as a 'digital car' and is used for assembly/testing/flashing purposes. I highly recommend you buy/build one. It can be good practice if you haven't used a soldering iron in a while.



    A lot of the information in this write-up is word for word from Megamanuals V3 assembly guide. But I'll just use the information that's relevant to 60degreeV6s.

    You will be referencing this image a lot to identify locations of the components as you are installing them. I recommend you print it.

    Power circuit
    Install and solder the male DB-37 header (P2) {A23289-ND or A32103-ND} on the PCB. The connectors require a bit of force to 'snap' them into place. Solder all of the pins to give the headers the maximum physical strength. Then install and solder the female DB-9 header (P1) {A23305-ND or A32119-ND}.

    Next, install the 40-pin DIP socket {AE7240-ND or AE10018-ND} for the processor - notice that the notch installs near the bottom of the board, corresponding to the PCB silk screen. The socket must be installed from the top of the board, and soldered from the bottom side. To prevent the socket from falling out while you turn the board upside down and solder, you can use a bit of scotch tape across the socket to hold it in place (this works for many of the ICs and some other components). Carefully solder the socket, and inspect each solder joint for shorts (to adjacent pins) or cold joints (solder applied to a joint the isn't hot enough to flow properly, typically they won't have a nice 'cone' to the solder).

    Next, you are going to install the components that make up the power supply, and then verify operation. The first part to install is the 'Perry' Metal Oxide Varistor MOV1 {P7315-ND}. This is a large flat disc, about an inch (~25mm) in diameter. It is soldered near the DB37 connector, and does not have a polarity, it can go either way around. This part protects the MegaSquirt from surges on the 12 volt line.

    Install the capacitor C15 {399-4202-ND, 0.001 F, 102 marking}. This goes near the MOV1 you just installed, between it and "Grippo" in the copyright notice.

    Install and solder C16 {399-1420-ND or 399-3584-ND, a tantalum capacitor, 22 microFarads (F), 226 marking} - make sure polarity is observed. It has a small + near the positive lead. The longer lead is also always the positive lead. It is located next to the DB9 connector.

    Install and solder C17 {399-1420-ND or 399-3584-ND, tantalum, 22 F} - make sure polarity is observed. The longer lead is positive on all of the capacitors. It is located next to the C16 capacitor you just installed, near the DB9 connector.

    Install and solder C18 {399-4329-ND, 0.1 F, 104 marking}. This installs near the DB9 connector, just above (closer to the heat sink area) the C17 capacitor you installed in the last step.

    Install and solder C19 {399-4329-ND, 0.1 F capacitor, 104 marking}. This installs near the CPU #1 pin.

    Install and solder C23 {399-4329-ND, 0.1 F capacitor}. This installs near CPU pin #21.

    Install and solder C22 {399-3559-ND, 4.7 F electrolytic} - make sure polarity is observed. It is located very close to C23.

    Install and solder D9 {1N4001DICT-ND} - make sure banded end is installed correctly as per board. This installs near the DB9 connector, very near U5 on the heat sink. To do this, make sure the end of the diode with the band on it goes to the end of the silkscreen (at D9) that has the band nearest it.

    Install and solder D10 {1N4001DICT-ND} - make sure banded end is installed correctly as per board. This is installed near the MOV1 you installed earlier.

    Install and solder diode D11 {1N4001DICT-ND} - make sure banded end is installed correctly as per board. This is installed near the MOV1 you installed earlier.

    Install and solder D12 {1N4749ADICT-ND, 24 volt Zener} - make sure banded end is installed correctly as shown on the printed circuit board. This installs very near D10 and D11.

    Install and solder diode D13 {1N4742ADICT-ND, 12 volt Zener, 1N4742 marking} - make sure banded end is installed correctly as per the board. It is located above the column of capacitors above "Grippo" in the copyright notice.

    Install and solder diode D19 {1N4734ADICT-ND, 5.6 volt Zener, 1N4734 marking} - make sure banded end is installed correctly as per the board. It is located in the upper right section of the board (near the DB37 and heat sink), below the Q14 and Q10 transistor and R32, R30 & R31 resistors.

    Install and solder L1 {M8388-ND, inductor, 1H, small coil of wire with leads}. It is installed near the notched end of the CPU socket. Space the inductor about 1/8 (3mm) off the PCB to avoid shorts on the traces underneath.

    Install and solder L2 {M8388-ND, inductor, 1H}. It is installed between the CPU socket and the DB9 connector. Space the inductor about 1/8 (3mm) off the PCB to avoid shorts on the traces underneath.

    Install and solder F1 and F2 {RXEF050-ND}. These are Amp poly fuses (small yellow discs that look similar to some capacitors) that acts like a circuit breaker on the 5 Volt supply to the PCB from the regulator. F1 installs very near the DB9, in the middle of some of the capacitors you have already installed. F2 installs near the center of the DB37 connector, and very close to it.

    Install the voltage regulator U5 {LM2937ET-5.0-ND}. This part installs near the DB9 connector on the top of the board. Use heat-sink compound on the tab, and use the nylon screw and nut to fasten to the PCB. The leads go through the board and are soldered on the top side.

    Install a jumper from the hole marked S12C to the hole marked JS9 (+12C). These are on the bottom side of the board, on the DB9 side of the processor.

    Connect the following jumper wires to control your GM IAC valve:
    • Connect (1A)JS0 (under the processor socket) to IAC1A (near the DB37 connector) - this brings out IAC1A on DB37 pin #25
    • Connect (1B)JS1 (under the processor socket) to IAC1B (near the DB37 connector) - this brings out IAC1B on DB37 pin #27
    • Connect (2A)JS2 (under the processor socket) to IAC2A (near the DB37 connector) - this brings out IAC2A on DB37 pin #29
    • Connect (2B)JS3 (under the processor socket) to IAC2B (near the DB37 connector) - this brings out IAC2B on DB37 pin #31

    Since we will be using an ignition output signal to control an ignition module with MS-II, jumper JS10 to IGBTIN, then jumper IGBTOUT to IGN. JS10 is on the bottom side of the board under the processor slot.

    If you want to use CAN communications (if you plan on using an electronic trans and plan on building a GPIO board to control it), jumper JS6 to SPR1/CANH and JS8 to SPR2/CANL

    Testing the power circuit is important to make sure you built everything correctly. Directions for testing can be found on the megamanual V3.0 assembly instructions - Step 23.

    Serial Communications Circuit

    First step, install capacitors C26, C27, C28, and C29, {all 399-4329-ND, 0.1 F, 104 marking} by soldering them in the appropriate locations near the DB9 connector.

    Next, solder the serial communication MAX232, U6 {497-2055-5-ND} - note the proper orientation on the silk-screening.

    Testing the com circuit is important to make sure you built everything correctly. Directions for testing can be found on the megamanual V3.0 assembly instructions - Step 26.

    Clock Circuit Install C1 {399-4329-ND, 0.1 F, 104) and solder. This is located near pin #20 of the CPU socket. Install and solder C20 {399-4361-ND, 0.033 F, 333 marking}. It is located in a row of three capacitors above the L1 inductor you installed (above ".info" in the copyright notice) Install and solder C21 {399-2075-ND or 399-4326-ND, 0.01 F, 103 marking}.
    02-06-2011, 02:09 PM
  • Heated O2 Sensor Install
    This is a how-to on installing a heated oxygen sensor into your car. The benefit of a heated oxygen sensor is that your car will go into closed loop much quicker, which means the ECM is adjusting your fuel based off of the sensor and not maps. By doing this your car will run better quicker on cold start-ups. It will also improved fuel consumption during start up, as well as reduce emissions.
    First, you will need to get a 4-wire heated O2 sensor with the pig-tail.
    01-21-2011, 08:15 PM
  • Setting up HPTuners for a 60V6 Engine
    HPTuners is an OBDII scanning and programming suite that is currently being updated for better support to the 60V6 community. Before you begin tuning, it is important that your car is in the best physical condition possible.
    10-02-2010, 02:24 AM
  • Detailed Sensor Descriptions
    Contents1 Knock Sensor (KS)2 Exhaust Gas Recirculation Valve (EGR) 3 Coolant Temperature Sensor (CTS) 4 Throttle Position Sensor (TPS) 5 Intake Air Control Valve (IAC) 6 CPC 7 Oxygen Sensor (O2) 8 Ignition Control Module (ICM) 9 Park/Neutral Switch 10 Power Steering Switch 11 Intake Air Temperature (IAT) / Mass Air Temperature (MAT) Sensor 12 Crank Sensor (CS) 13 Manifold Absolute Pressure Sensor (MAP) 14 Fuel Level Sensor 15 Oil Pressure Sensor 16 Oil Level Sensor Circuit 17 Vehicle Speed Sensor (VSS) Knock Sensor (KS) This sensor is screwed into the block and detects detonation. If knocking or pinging is sensed the ECM will retard the ignition timing to prevent serious engine damage. Depending on the strength of the knock the ECM will pull a set amount of timing very fast and then slowly reduce the knock retard back to 0 or more knock is encountered, whichever happens first. The circuitry in the knock sensor pulls the +5V input voltage down to 2.5V, the knock sensor then produces an AC voltage that rides the 2.5V DC voltage. A knock will cause a voltage spike in AC voltage that oscillates about the 2.5V bias, if the spike is above 3V it is considered knock. Exhaust Gas Recirculation Valve (EGR) There are 3 types of EGR's: vacuum, digital, and PWM. Vacuum is vacuum so I'm not talking about that one. The purpose of the EGR is to reduce oxides of nitrogen (NOx) emissions. From AllData: "The atmosphere is made up of mostly Nitrogen, with a smaller percentage of oxygen, and a mixture of other gases. Oxygen and Nitrogen do not normally combine except at very high temperatures and pressures, conditions which are present in the combustion chamber especially during hard acceleration. When the engine is under load, the EGR valve admits a small amount of exhaust gas into the intake manifold to mix with the air/fuel charge. The exhaust gas is essentially inert (contains no fuel or oxidizer) and reduces peak combustion temperatures and pressures by absorbing some of the heat of combustion without participating in the actual burn. Greater amounts of exhaust gas are metered in as engine speed and load are increased." The digital EGR uses 3 different sized solonoids, think of it as a low/meduim/high setting and the combonation of the 3 solonoids activating can vary how much exhaust is let into the intake. The new design is the Pulse Width Modulation (PWM) solonoid which is basically infinate in its adustability while the digital is somewhat stair-stepped. Coolant Temperature Sensor (CTS) The CTS is usually located in the lower intake somewhat close to the thermostat. Since the coolant temp is usually the same or higher then then temp of the lower intake the sensor is fairly accurate. on most body platforms there is seperate CTS sensor that runs the dash coolant temp guage. The sensor is a thermosistor, as the coolant temp gets higher the resistance drops. The ECM supplies the sensor +5V and measures the voltage drop through the thermosistor to determine temperature. Some resistance vs temperature values follow: F Ohms 210 177 158 467 104 1459 68 3520 32 9420 -4 28680 -40 100,700 The sensor is used for open/closed loop operation and is used in the calculation for fuel and ignition. Throttle Position Sensor (TPS) This is actually just a potentiometer (variable resistor, sometimes called a rheostat), by turning the throttle body plate it rotates a shaft in the sensor causing different voltages to output. There are 3 wires: ground, +5V, and the sensor output. The different resistances caused by the rotating shaft vary the voltage output o*n the sensor output wire, the ECM then measures this voltage to determine how far the throttle is open. The sensor is located o*n the throttle body opposite the throttle lever. 0% throttle is usually about .5V and 100% throttle is around 4.5V Intake Air Control Valve (IAC) The IAC is located in the throttle body and controls idle speed and prevents stalling do to varying engine load. It controls the amount of air that is bypassed around the throttle plate, more air the idle increases, less air the idle decreases. The IAC has a conical shaped tip that it moves in and out to block/open the bypass air passage. The IAC is moved in small increments called "counts" and can be read by most scan tools A stuck IAC will cause a high idle, low idle, or perhaps correct idle but it won't change if you turn the A/C on (idle increases with A/C). CPC There is a vent on the gas tank that goes into a charcoal canister so that gasoline vapors do not vent to atmosphere, the CPC solonoid is hooked up between the charcoal canister and engine manifold. The solonoid is a Pulse Width Modulation (PWM, variable output) solonoid, turned on it blocks flow, turned OFF it allows. If the engine is warm, has been running for a set time, above a speed, and throttle is above a set point the ECM turns the solonoid OFF allowing the engine vacuum to suck the gasoline vapors out of the charcoal canister. Oxygen Sensor (O2) The oxygen sensor measures the amount of oxygen in the exhaust system to determine if the engine needs more or less fuel. A regular oxygen sensor is sometimes referred to a narrow band o2 sensor (NBO2) because it is only accurate at stoich (14.7 air fuel ratio (AFR)) which is where an engine will produce the least emissions. As you can see by the image below, a NBO2 is only good at telling you if your are rich or lean but never how rich or how lean you are. A narrow band O2 is a switching type, reading rich, lean, rich, etc. If you graph the voltage output it looks quite a bit like what siesmograph or lie detector needles sketch. When the ECM is using the O2 sensor to correct the fuel tables it measures how long it is lean and how long it is rich, if they are equal then the AFR is at 14.7 right where it should be. O2 "counts" is how many jumps back and forth it makes. Due to its nature a NBO2 is all but useless for PE (power enrichment, hard acceleration) where the most power is made with a richer then stoich. You can tell that you are rich but not how rich which leads to more difficult tuning. A wide band O2 sensor on the other hand is not a switching type, and will read accurately from a wider range (hence narrow and wide band). St...
    09-09-2010, 09:05 PM
  • EEPROM Code
    Code is a language that computers or simple electronics understand, it serves as an instruction set to check what sensors are doing, and tells other electronic devices of the motor what to do and how to do it. For example, fueling and spark. "Code" what we refer to when tuning our ECU's, can be compared to as an ISO that is burnt to a CD. Or if you are not computer savvy, can be thought of, written letters and sentences on a piece of paper. The paper being the EEPROM and your writing as the code. With the proper hardware and computer programs, we read the c...
    09-09-2010, 07:23 PM