Sale ends todayGet 30% off any course (excluding packages)

Ends in --- --- ---

1983 Toyota Carina - EFI experiment test mule

Build Threads

Forum Posts



Tech Articles

Keep everyone up to date with how your project is coming along. 

= Resolved threads


Hey guys,

I've got an older Toyota that I've restored a bit, as well as converted to a more modern drivetrain etc.

The goal is that I can have fun at trackdays BUT also maintain all of the nice features of a road car.

For sake of interest here I'll keep the non EFI related stuff brief:

1983 Toyota Carina coupe

Beams 3SGE VVTI engine + 6 speed gearbox

Uprated brakes / suspension / etc

The car currently has a trap speed that will see it into high 13s if I can get a good launch, and gets 7 litres per 100km when driving it around on weekends etc which is great.

Will post some individual topics about some EFI related experiements below.

(And general EFI related rambling that none of my friends want to hear about)

For a long time, I was running the standard ECU. This came with the usual set of frustrations...

When the engine setup deviates slightly from how the factory intended, not only does it not run optimally. But it's also impossible to try and diagnose any issues. As well as that my standard redline was below where the engine was making peak power!

For a long time I was "flying blind", as the only diagnostics available was to short out some pins on the diagnostic terminal and then count the flashes to get an error code. Which doesnt necessarily help when you're trying to diagnose an issue with (for example) knocking at light load that gives no error codes.

In fairness, the engine did MOSTLY run okay... The main persisting issue was running poorly at light load, and stalling at idle which was very frustrating.

A year or two back, some Russian people figured out how to make this Japanese OBD (not complient with OBD2) engine run with a a cheap bluetooth OBD2 scanner.

This opened up a whole world of information!

I couldnt change any ECU settings of course, only observe them - But I could finally view the logic of the ECU, and also datalog things.

Looking back, the datalogging was hilariously bad... The best it could do was 6 variables at 1hz haha!

However being able to see the relationship between ignition timing and load, seeing how the fuel trims operate, and getting an insight into the functionalities that I could only previously guess at was all totally fascinating.

For a while, this was enough to keep me happy.

Even the pitifully useless datalogging was really great to have. For example - When I took my car to the drags with the factory ECU, and the MAF sensor with inbuilt temp sensor. The temp sensor was SO slow to react, that my car would heatsoak at the staging area. Then I'd do a full throttle run down the drag strip, and it would not register a temperature change until I was half way back down the return road!

But it was obvious that the real IAT had varied hugely in this time... This was one my first indicators that the factory ECU wasnt going to cut it for me anymore. There was no way I could swap out to a fast responding IAT and recalibrate for it.

During the time of OBD logging the factory ECU, it was interesting to build up some maps (with multiple runs to get enough resolution!) and see the reported volume of air consumed by the MAF sensor. (or temp sensor or whatever) Then making some physical changes, and then seeing if the values went up or down. Like this:

I would log some runs like this, then make some changes to something physical on the engine and then test again.

It was interesting seeing the shape of the curves change, to indicate whether something was an improvement or not.

As awful as it was, I'm so glad that I spent some time in this "observation only" mode with the factory ECU.

As it partitioned out the datalogging aspect of tuning, I had no option but to learn this first without being overwhelmed by everything else.

Which set me up well for when I had a fully programmable ECU.

You could not imagine the grin on my face when I first turned on my programmable ECU, that could datalog EVERYTHING at 40hz!

Or 25 items at 100hz. Being able to see things with such detail, was a beautiful sight to behold :D

For a long time, what had put me off the idea of using a programmable ECU is that I was not willing to settle for anything that did a poorer job than the standard ECU. The primary difficulty with this idea, was the need for VVTI control hogging the few spare inputs and outputs on most ECUs.

One of my problems with the factory ECU was cold starts and idling, so why would I want to use an ECU where I have to sacrifice an ISCV in order to control VVTI? Why would I want to have two injector drivers when the factory ECU has four? And so on.

When you work from a list of what you want, and then seing which ECUs can acheive it rather than the opposite way around - your pool of options diminish and the cost definitely does not.

Some friends of mine were enjoying varying success with megasquirt ECUs, however often with very basic EFI adaptations to what were originally carb engines. After some encouragement that a megasquirt ECU could do everything I wanted, I investigated.

I found that yes, in theory - a fully featured megasquirt could control VVTI, idle speed, etc. However the problem is that when you add all of the extras, it's not actually cost effective to other options anymore. With all of the downsides of having zero support if you're having issues with something no one else has done yet.

So I thought, "Hey, a fully fledged megasquirt is about the same price as a G4+ Storm"

Then, I found out that Link had a basemap that would allow me to get the triggers, VVTI etc all running smooth as silk straight away rather than needing to develop PIDs etc which was over my head.

And thus began my slippery slope towards the Xtreme haha!

For the price difference, is it really worth the odds of runing out of inputs or outputs?

I figured... I could get an ECU that just runs the engine. Or I could get an ECU that runs the car. Once I thought about it this way, it was a no brainer.

The day it turned up, I was both hugely excited but also very bloody nervous as it needed wiring and configuring, and I'd never embarked on anything of the sort before. But on this day I knew that I was going to be in for something really exciting.


Girlfriends levels of excitement may vary.

Girlfriends knowledge of ECU cost may also need to vary from real figures.

Girlfriends odds of believing your salespitch about how you couldnt afford NOT to buy this, may also vary.

For my initial wire up of the engine, I will admit that I didnt really know a hell of a lot about what I was doing.

I essentially had an ECU pinout of the factory ECU, and a pinout of the Xtreme - And after lots of studying the PClink help file, made a crossover map for what goes where.

I then chopped wires at the loom plug one by one, essentially "holding the dumb end of the stick" through the entire process, with fingers crossed that I hadnt made any mistakes.

After a lot of hours doing this, and then checking the results. Time for the ultimate test, will it fire up?!

I'll tell you what, it put a huge grin on my face, when after a few cranks over, the engine fired up into life.

It wasnt all great news though... Oddly enough the engine could not hold revs below ~2400rpm.

If you hold the revs higher than this, all was fine... Get to 2400rpm exactly, and everything would cut out.

This was a problem where, with the factory ECU (or something like a megasquirt or powerfc) I would have chased my tail around FOREVER trying to figure out.

However because the G4+ has an onboard trigger scope, it was a piece of cake to diagnose the problem:

You can see that the result for the crank trigger is a bit wavy, at one point that does not relate to the missing teeth.

A long time ago I had damaged a tooth on the crank trigger wheel. Because it was impossible to find a replacement, I had a blob welded on and then filed to the correct shape. This was enough to get the factory ECU running fine (although actually, it might have been the cause of problems with factory ECU all along) but it was not within tolerances to which the link could operate. Obviously the metal from the filler rod was of slightly different composition to the rest of the wheel.

This was frustrating because I knew it would be difficult to find a replacement crank pulley, but also a relief knowing that it was so easy to find the solution.

On the positive side though, one of the main reasons for me choosing an older naturally aspirated front engined RWD car, is that its so bloody easy to work on.

Once I found a pulley, the cambelt job required to fix this issue took a few hours of EASY work with the engine in place, just radiator removed.

Even removing the whole engine and gearbox in this car is a piece of cake! I made this silly timelapse video a while ago when I was feeling smug about how easy my car is to work on:


Once the crank pulley was replaced, all was well again, as confirmed by both the trigger scope and ability to hold an 800rpm idle.

Thanks for sharing, that is a great project

Thanks Chris.

Once I got the basics of the ECU up and running, post crank trigger drama.

The ECU came with a basemap that suited an Altezza, which is close enough to use as a starting point for tuning.

The first thing to get tuned was the fuel, and this seemed the easiest - based on my previous experience with datalogging the factory ECU, it was a DREAM having such a wealth of information to look at, and then actually being able to adjust the tables, then see the results.

For the ignition timing, I had some reccomended figures for WOT from a friend, and also some information that I had very roughly datalogged from factory ECU. I knocked a good 5 degrees timing off this across the board though... Due to being scared of blowing up my engine by making it knock.

One variable which the OBD2 logging couldnt tell me anything about though, was the VVTI timing.

As the factory setup essentially has a goal angle, but then uses a PID to vary the actual cam angle to match this as best it can.

so when working at 1hz, you wouldnt have any chance of capturing useful info here.

I had wired in a map sensor, however for ease of initial installation I had retained the MAF sensor in order to use its temperature sensor.

I then had a thought... I could wire up the MAF sensor, and then datalog it just like I had been doing previously.

I could set the cam angle to 0 degrees, and do a full throttle pull. Then advance 10 degrees, 20 degrees, etc.

Doing this, gave me the following data for full throttle:

Basically where ever the MAF voltage was the highest, this is where the maximum amount of air was flowing into the motor at that particular RPM range. You can see above how much difference it makes moving the cam around. Without VVTI you'd either need to lose a big chunk of top end power, or have crappy mid range. I always cringe when I see people remove VVTI for "adjustable cam gears" on otherwise factory engines. D'oh!

some time after this, I found some Toyota literature on VVTI operation, and also spoke with someone who'd dyno tuned VVTI angles.

Both of these correlated with my own results, however the exact position of the peaks and troughs was an obvious indication of the tune that this particular engine/setup required. It was amazing feeling the difference that the VVTI made when properly configured, not just at full throttle but also low load as well. (For this I referred to Toyota literature for reccomended angles)

Now, about that part in the above post, where I mention trimming ~5 degrees off the ignition timing, to be on the safe side.

I got my car to the point where I felt everything was running strongly and awesomely, and I was ready to take it for it's first trackday with the new ECU setup, where I could do some hardcore nerding over some of the dataloging haha.

Well... One thing that I did not realise, is that retarded ignition timing dramatically raises EGTs.

On this engine I have used the alternator bracket from a Celica, which places the alternator high up on the exhaust side.

Unfortunately though, the EGT situation melted my alternator within the first few laps and I had to call it a day. A dissappointing first event!

And some useful hindsight about EGTs. None the less, great to get out on the track even if only briefly.

At some point along the way, I also changed from a cable driven speedo to an electronic one, with some updates to the dash cluster so the ECU could run the speedo. (more logged data! woohoo!)

The speedo sender swap project involved varying levels of mechanical competence and at least one lesson learned the hard way:

In completely unrelated news here's a random long-ish exposure photo I took while experimenting with somewhere to mount the trackday camera. Check out that disgusting steering wheel.

Over time I experimented with a few variations of tune, using either the MAF or MAP sensor as main load source.

The MAF sensor was problematic because it's very difficult to calibrate, and also any air leaks in the manifold and your tune goes out the window. However the benefits... Instead of needing lots of complicated compensation tables like a MAP sensor does, it's so much easier.

More air in = more voltage. Rather than making assumptions from pressure.

Either way, for a while my engine bay and air intake looked something like this:

One thing that I noticed from datalogging however, was the MAP sensor readings at full throttle were dropping below atmospheric pressure.

From 3000rpm onwards I was losing 1kpa pressure, raising to 3kpa drop by 6000rpm onwards.

Which doesnt sound like much, but that's potentially 3% of power out the window thanks to inability of air to reach the intake manifold.

Due to some extensive datalogging however, I had a very good idea about the mass flow rate into the throttle body.

At maximum RPM, the engine inhales ~170 grams/second of air.

So knowing this quantity, I drew a 3d model of my throttle body in solidworks, with 170 grams/sec of air being drawn through it.

The goal - come up wtih an intake design which can reduce the pressure drop as much as possible.

My first ideas were to increase the diameter of the piping... But then I'd still have the problem of needing to step down towards the throttle body. Then I had an idea... If not for housing the MAF sensor, why do I even need any pipe size ahead of the TB at all?

I had the idea of building an enclosure for a large bellmouth, with a big panel filter on one side.

After building several iterations out of cardboard, then testing in cad, revising designs etc.

I got some plans lasercut and built the airbox.

The end result... MAP sensor pressure drop is now immeasurably small, below 1kpa all of the way past 8250rpm.

I need to finish building the other half of the airbox, so its drawing air from somewhere other than the engine bay as IATs are higher than they could be. But the initial results were great.

I thought this was an awesome example of datalogging showing a problem, then using some data to establish the scope of the issue, and then using datalogging again to verify an improvement. So I was very happy with the results.

It does look a bit silly though, but any poor sod that tells me I should fit a pod filter or whatever soon regrets it when they get to hear my speil about pressure drops, datalogging, advantages of a panel filter etc etc haha.

Another part of the project which I was working on concurrently with the airbox setup, which you can see in the above picture.

Was to setup staged injection - running some outer injectors which phase across at high load/high rpm for sake of slightly better atomisation etc.

A guy in Australia, with the same engine had shown good power gains doing this, from midrange onwards.

I figure it's maybe the same difference as a slight cam upgrade - but I get to keep excellent fuel economy of factory cams.

Part of the reason to buy a G4+ Xtreme was for the 8 injector drivers so I could experiment with this.

Inner injectors are standard 360cc Altezza injectors, outers are some cheap 1000cc single pintle units.

Although single pintle is generally a crappy design when the injector is at the port, I figured it's typically narrow spray pattern would be good for injectors mounted higher up.

I got all of this wired up, and then had some interesting results with getting the outer injectors working at various RPM ranges.

My fuel map from using innner injectors only, looks like this:

Notice the peaks and troughs required to keep a stable AFR. These are some quirks on account of natural resonances in the intake manifold. Trying to use the outer injectors during that "trough" results in fuel spat out the end of the runners rather than being inhaled into the engine. Adding heaps more fuel only affected AFR in a very small way, and presumably due to the pooling fuel made other load areas "falsely" report rich or lean. So my staged injection setup starts from the next peak onwards.

I've found there's some interesting inferences from the fuel map though.

Helmholtz resonance, pressure waves travelling up and down your intake manifold which help give a "boost" at particular rpms also do the opposite to cause the troughs for an NA car.

Because this wave is generally considered to travel at the speed of sound, it's said that the harmonic wave that "hits" to give a boost when the valves open again on the next induction cycle is the 3rd or 4th reflected wave which is generally a lot weaker than the 1st one.

However if you consider that the first wave takes 1 time unit to travel XYZ distance. Then 2nd takes 2 units of time, 3rd takes 3 units of time.

There is the same ratio of RPMs between each wave, each time, for any intake manifold on any engine.

So if you can see two peaks on your fuel map which you think relate to your intake manifold design. Divide the smaller rpm by the bigger one and it will always be pretty close to one of these ratios:

So you can tell if it's the 2nd or 3rd or 4th or whatever harmonic wave causing variations in your fuel table. The point of this is that you can extrapolate where the other waves are occuring outside of your powerband (which is useful for making a best guess on shortening or lengthening your runners) But it's also interesting because in my instance it implies that the harmonic waves are only travelling at approximately half the speed of sound. But also that the 2nd wave gives a maximum boost just before the factory rev limit, and the other "boosts" are in useful places for broadening the powerband. Maybe Mr Toyota actually new what he was doing here eh!

But rambling about resonance aside, after setting up the staged injection it certainly felt like the car pulled a bit stronger towards the top end.

I havent dynoed to see exactly what's making the difference - Perhaps its the airbox and the injection acheives nothing.

However for some variety of reasons, the difference from factory ECU to now is a trap speed that has improved by 10kph. (to 99mph)

Here's some footage of my miserable attempts at drag racing, some issues with rear suspension angles mean that trying to get off the line at all is dreadful currently. Hopefully one day I'll sneak into a 13 when I get my suspension sorted out.


Very nice work man, cheers for keeping us updated and I love the interest and in depth analysis when investigating these things - looks like it's going to pay off nicely :)

Very nice, are you planning on changing any internals to the engine or are you just going to get it dialled in to a t?

Hi - Maybe in your spare time you could build a tuned set of intake trumpets that vary in length at different engine speeds - I believe some race motors already run this system . Would be a cool project though - Go on you know you want to ! ;)

No plans on changing engine internals. I bought this as a blown engine and rebuilt it with new factory pistons etc.

But the idea is that if my motor blows up, I can just bolt my stuff onto another block and get going again.

Obviously a bit more of a powerbump with more aggressive cams and compression, but you pretty quickly fall off the slope of diminishing gains for much worse fuel consumption etc. Drivability is an important factor for me for this car.

Yes an adjustable length manifold would be awesome! However the problem is, it would need to get longer not shorter. And there isnt really any room in my engine bay for it.

For a while I had an ITB setup on this engine, but I couldnt get long enough runners without them hitting the bonnet.

Speaking of which though, one thing that I've had with this car. Initially, I had it setup with just a cable pull throttle body (An e-throttle unit, converted to cable pull)

However the drivability suffered, having a big diameter throttle body wasnt fun when you're just trying to hold a speed at 100kph or whatever. Very jerky on that first light dab of the throttle.

However with the latest Link firmware that unlocks all of the extras for free, I setup the e-throttle. Used Andre's suggestion of 70% accellerator pedal = 50% throttle opening.

Totally transformed the car! This made a HUGE difference to its drivability. E-throttle is super greedy on inputs and outputs, but well worth it. Since I had this setup I could also use some of my spare DIs to setup cruise control.

Which after some minor tweaking of the gain values, works brilliantly. The car just hums along at 105kph or whatever, in an eerily smooth fashion.

It's also really cool for tuning, because you can set your e-throttle speed so that you're at the dead centre of a column of cells. Then as the car goes up and down dips (or pull handbrake half way up) you can really quickly road tune the fuel by just concentrating on one column at a time.

I've had an annoyance for a while where my tacho and speedo are in accurate. As in, if they're accurate at 100kph they arent accurate at 60.

I couldnt replace the tacho and speedo functions with a general purpose PWM because it only adjusts PWM (at a static frequency) rather than variable frequency which is how they both work.

So asked Link to put that on the to-do list, and they've just sorted it with recent firmware.

I've now calibrated them both super accurate at 500rpm intervals and 10 or 20kph intervals.

Previously the problem was that once you get to 6000rpm or ~140kph, after that they would both zing right off the clock.

Now they sweep through beautifully. Awesome! Will be a lot more useful at trackdays and a lot more interesting to watch for in car video.

I've now been thinking that it would be cool to do similar for the factory oil pressure sensor / gauge.

Instead of just having a dumb reading from the sensor straight to gauge.

I could now have the sensor going into the ECU (more datalogging, yusss) and then output a 3D table to the gauge, so that it shows that "good" oil pressure is the same point on the gauge through the rpm range and also through engine temp. (oil temp would be better, but cbf plumbing in my temp sensor yet)

Then from here I can have one my conditions on a warning light to be whenever the gauge goes into the "bad" area of the 3D table.

Which is seems especially useful in my case because I'm always banging my sump into the ground.

<3 EFI stuff!

I've only just seen this build thread. You have done a great job and your writing style is not only informative but also interesting. I will watch this thread with interest.

Finally got a camera setup in the car again, this time had Yokohama AD08Rs fitted.

Do they live up to the hype? Hell yes! Had more and more grip with every lap.

Fastest lap of the day was 2.3 seconds better than previous PB, went 193kph which is a new fastest speed the car has been.

Yet felt super stable on those tires when it was previously a fairly nervous experience braking into turn 1 haha.

The motor has been running great and loves the higher rev limit.


Looks like it was going well and sounds awesome

I finally got my new wideband installed over the weekend...

After going through three sensors with the LC2 time to try something different.

Bought an AIM LCU one which looks like a nice quality bit of kit. Cant comment yet on whether or not it will still burn through sensors though haha. I hope not because it was bloody expensive!

Soooo I thought it might be interesting to switch over to modelled fuel equation in the Link.

(This models the engine cc rating, injector size, air mass entering engine, etc rather than just looking at arbitrary numbers on a table)

First thing I notice compared to traditional fuel equation is how stupidly fast I went from nothing to having a mostly sorted fuel map!

I believe the numbers in the fuel table represent the engines volumetric efficiency at each rpm/load combination(?)

Which makes it easy to make a base map because for an NA engine you set the WOT row to 100% efficiency and then just drop the numbers down the rest of the map and then interpolate it. Doing this, I had a drivable car that didnt buck or run crazy rich/lean even before I'd driven it. Previously it would take a fair bit of rough running in order to get the fuel more or less correct.

One thing that's cool that I noticed, is that a table with your goal AFR is part of the initial fuel equation.

So once you're setup, changing the AFR goal changes the actual AFR to match. Awesome.

Running only open loop and tuning just with the Mixture Map I very quickly managed to get a most of the low load cells to a stable 14.7 in a very short period of time.

The fuel economy information is less than I was expecting though, it just gives cc per minute rather than l/100 or k/litre or MPG or whatever.

I'm not sure if it means it could give me a l/100 info using OBD2 on a phone etc though.

But it's still better than before.

I remember the first time I tried running on modelled fuel setup, it was a total disaster because I had so many of the background settings wrong. (like deadtimes, injector size, staged injection injector ratio, etc etc!)

But I've learned a lot along the way since then.

I think its one of those things, when you've put in the groundwork ahead of time the rest just falls into place.

Looking forward to some more tinkering this week!

Will be interesting to see how the car responds to changes in AFR at cruising sort of area, and also with some cam timing changes.

When I finally get this car on the dyno, it's going to be so much easier to test different AFRs or staged injection ratios now that everything's setup nicely.

Nice :) How did you do the fuel table before? I've been using "Open Loop AFR" for years with G4/G4+ ECUs and it made it really (probably similarly) easy to build a nice fuel table quickly, too. The WOT/boost part of fuel tables often become VERY flat and makes it easy to spot if either where you need to tidy up the tune (if you've done everything tidily), or where there may be a restriction or whatever coming into play.

Previously I'd just juggled master fuel number, and then numbers on the main fuel table, juggled them up or down until the car idled at a reasonable AFR with a reasonable number on the table.

And then from there just worked outwards towards rest of the map.

Once it's running reasonably I'd use mostly mixture map to get low load sort of areas sorted and then just some manually adjusted runs for the high rpm/load.

I've not heard of open loop AFR, so perhaps I've got some reading to do haha!

Mixturemap, with some good filters on it works really well now.

As a side note, in the Link documentation it says not to mount the IAT in the manifold, as you get heat soak.

But then in the modelled fuel documentation, it says that the IAT might not account for heatsoak if you place it somewhere else.


I have noticed that the most important part of getting a fast response on readings is to have a mass of air come past it.

It's slow to react if ambient temperature changes but its in dead air.

Currently my IAT is mounted in the plenum just a little way downstream of the TB.

I've currently just got a pod filter on front of the TB because my airbox breaks its top mount and I CBF fixing it at the moment.

So I'm not sure how much of a difference some colder air would make, if I had some coming from somewhere other than the engine bay where it's a constant 30-40 degrees on IAT even at night time.

I think I'll wire up a provision for a second IAT pre-throttle body, and then see what the difference is.

I'd imagine that at low load and low rpm you would need more compensation for heat soak.

But then high load/rpm where there's a large mass of air coming through there's the same BTU of manifold heat coming into a much larger mass of air heatsoak less relevant, would bias more towards the "outside" IAT.

We usually reply within 12hrs (often sooner)

Need Help?

Need help choosing a course?

Experiencing website difficulties?

Or need to contact us for any other reason?