ECU6

Throttle Body EFI System

© 1994-1999 Al Lipper, Injection Logic

Welcome to ECU6, my latest throttle body injection (TBI) system for vehicles that were previously carbureted. Please note that while this system works somewhat, IT IS NOT A COMPLETE AND DEBUGGED FUEL INJECTION SYSTEM. For someone with a strong background in digital electronics, 8051 programming and BASIC, it is nearing completion, but still requires many hours work before it will be a reliable system that operates under any circumstances. As its name implies, it is revision 6 of the system. I have driven a ’78 Pontiac Trans Am with a 428 engine close to fifty miles under a variety of circumstances with this system, and it has also been fitted to a ’57 corvette. What I’m saying is don’t think you can solder together a PC board, plug in some sensors and start driving. However, if you have a strong background in this sort of thing, then you will find great potential in this system.

The Files:

The HARDWARE folder contains the schematic in 4 versions: OrCAD Draft v4.04, Protel for windows, PDF and EPS. The PCB folder contains a fairly up-to-date (but not entirely) PC board layout in OrCAD PCB v2.10B. Also, there are Gerber files for the two board layers, as well as a GAP file to go with them. The ECU6.PCB file is an ECAM CAM 350 v2.13 file if you have this software. I’ve included these files in several formats so they would be easier for people to use. You do not need to read all the formats, as they are duplicates of the same information. For reference, the original designs were created using OrCAD. Hopefully someone will adapt the PC board to something like Protel (such that it is linked to the schematic).

The software is a bit more complicated. There are three files uploaded to the ECU: The assembly language routines for dealing with time-critical hardware functions (EFI02), a calibration table for the particular vehicle being used (BASE8) and the main program that runs the whole thing (ECU6). These are each assembled (or in the case of ECU6, compiled) into Intel HEX files and then uploaded (once the FLOAD uploading program works) to the ECU or burned into its flash memory using a device programmer (I used the Needham’s Electronics EMP-10). With the ECU connected to a vehicle properly, simply turning the key on should start it going. Plugging a laptop into the serial port allows for system monitoring and on-the-fly calibration adjustment.

EFI02.ASM is assembled using Metalink’s ASM51 (included). BASE8.ASM is generated by the LOOKUP TABLES.XLS spreadsheet and is then assembled by ASM51 also. It is not really an assembly program, but really just a data map (see the comments in the file). The main program is ECU6.BAS and is written in Blue Earth Research’s BEC-51 BASIC compiler. They can be reached at (507) 387-4001. These three files each generate a .HEX file. These then need to be burned into the flash memory. This can be done by loading all three and programming the flash, or combining them into a single file and loading that one file. MH.BAT merges these three HEX files into a single file called E6. If you want to use it, you MUST delete the last like from EFI02.HEX and BASE8.HEX and save them as EFI02A.HEX and BASE8A.HEX. The last line is simply an end-of-file marker, if you leave it there, the hex loader will stop at that point.

Speaking of hex loaders, there is FLOAD. This program is intended to be burned into the 80C51GB’s PROM (OTP memory) and allows HEX files to be uploaded to the ECU by simply switching two DIP switches to PROGRAM, sending the HEX file over the serial port, and switching them back to RUN. The problem is, it doesn’t quite work – there are sometimes errors in the data it burns. I don’t know if it is a hardware or software problem, however I have decided that the current 12-volt flash memory should be replaced with a newer 5-volt chip which will require circuit modification and program revision anyway. Perhaps the Atmel 29C010A would be a good replacement.

Speaking of hardware upgrades, Intel has discontinued the 87C51GB, so I was thinking of replacing it with a Phillips 87C552 (or perhaps a newer chip?) The hardware and software changes would not be too great, yet it would provide some additional features.

These are descriptions of some of the files included:

ASM51.ZIP                 The metalink macro assembler we've been working in
EFI02.ASM                All ASM routines used by the main BASIC program
FLOAD.ASM             A flash memory loader that is to be resident in the CPU's PROM
ECU6.BAS                 The main BASIC program
BASE8.ASM              An ASM-format file containing lookup tables for various engine parameters
Lookup Tables.XLS    A spreadsheet used for table development & macros that create BASE8.ASM automatically
8051GB *.PDF           Misc info on 80C51GB
IACTEST.BAS           A test program for the Idle Air Control motor
ECU6 & 6A.PDF       Schematics
ECU6.TXT (or BOM) Parts List
 

Some key abbreviations:

PW - Pulse width. How long the injectors stay on for (usually in mili- or micro- seconds)

MAP - Manifold Absolute Pressure in Kpa (0 to 100 scale, 0 is no engine load, 100 is wide open throttle & max. load)

EGO - Exhaust Gas Oxygen content as read by sensor.

TPS - Throttle Position Sensor. Returns value 0 to 255 (0 throttle closed, 255 wide open throttle or WOT)

CTEMP - Coolant Temperature

IAC - Idle Air Control motor. A stepper motor that controls engine's idle speed.

SP - Spark Pulse. A signal that pulses each time a spark plug fires.
 
 

Description of some of EFI02.ASM:

First, there is ISR_PCA0 which captures engine RPM and initiates the firing (turning on) of the fuel injectors. ISR_PCA1 turns off the injectors at the end of the specified PW. The PW is simply stored in two bytes by the BASIC routine. This ISR simply reads the two bytes and stes PW based on them. Ordinarily, the injectors fire each time SP occurs. Under special conditions (e.g. engine starting and rapid accelleration) more rapid, asynchronous injector firing is required. This is based on ISR_PCA3, which is a setable time base that, when the SP_SYNC bit is not set, generates the start pulse for the injectors to fire. PCA1 is not yet used, but may control a second batch of injectors at a later time.

EX_ASYNC causes the switchover between sync and async mode, depending on whether SP_SYNC is set or not.

The IAC routines are simply for turning the IAC motor to increase or decrease the idle speed.

READ_ADC reads the A/D converter and stores the values read in memory that BASIC can access at its convenience.

The WDT (Watch-Dog Timer) routines are there to deal with a rather irritating "feature" of the 80C51GB, namely that it resets itself every 16ms or so if a certain byte sequence is not written to a WDT register. TIMER0 is used to generate an interrupt every 15ms to take care of this. Additionally, the routine has a 16-bit counter implemented which provides a time base which increments every 15ms. This provides a total counter range of just over 16 minutes.

Finally, there is an INIT routine, which just sets up registers, and a WDT_INIT routine which sets up TIMER0 to generate an interrupt every 15ms.
 
 

The compiled BASIC program begins execution on reset and is responsible for calling all ASM routines (except, of course, interrupt routines).

The main BASIC program goes through the following steps under normal operation:

1. Read sensors (RPM, MAP, CTEMP, TPS, EGO, etc.)

2. Lookup RPM and MAP in table to determine initial PW

3. Modify PW based on factors such as CTEMP

4. Modify PW based on EGO feedback and prior self-learning (based on EGO)

5. Set injectors to calculated PW

6. Go back to step 1

Of course there are special routines for things like starting, IAC adjustment, etc. but this is the meat of it.
 
 

The throttle body best used for large engines is the Holley 650-700 CFM unit from their DFI system (they sell them separately). However, it also works well on smaller engines with GM two-barrel TBI units like they installed on Chevy trucks a few years back (I got mine for $90 from a junkyard). Most of the sensors are GM-type and are pretty standard. The Oxygen sensor should be a heated version that was intended to be located some distance from the engine (i.e. not in the exhaust manifold). These are more expensive, but they have more powerful heaters that will provide adequate operating temperature under all conditions. Using an unheated or weakly heated sensor simply will not work. And yes, I know they’re expensive. The fuel pump I used was purchased from NAPA. It produces 10 or 15 PSI and is one of the few 12-volt out of tank, medium pressure electric pumps I could find. Note that a 5 to 9 PSI unit will not work.

While BASIC probably not the ideal choice for a real-time system, it was selected for a variety of reasons including cost, ease of use and availability. It seems like it is more than adequate for the job at hand. If you are really interested in working with this system and getting a fully-functional version going, let me know and we may be able to work together. This is intended to be marketed someday, but there are no definite plans at the moment. In any case, feel free to do what you want with the software and hardware plans, but, YOU MAY NOT SELL ANY OF THIS OR ANY PRODUCT INCORPORATING OR BASED ON THIS INFORMATION, AND IT MAY IN NO WAY BE USED FOR PROFIT! I retain the rights to both the software and hardware, but have chosen to share the information, as I believe that greater development potential exists among people when information is shared rather than withheld. Good luck!

Al Lipper

efi@cardozo.org

(805) 544-4636