Engine Torque Estimation
Applies to: IOcan · Standalone controller. What this means
Every transmission controller needs a live engine torque value: factory TCUs schedule shifts and set clutch/line pressure from it, and the standalone drivers use it to control clutch pressure. Aftermarket ECUs rarely broadcast torque in a usable form, so each driver includes the same torque-estimation block, selected with the Torque calculation method parameter.
This page describes the methods and what each one needs. The driver pages link here and list which methods that driver supports — not every driver implements all of them.
Choosing a method
| Method | Old name | Torque comes from | You must provide |
|---|---|---|---|
| ECU Reported Torque | External Inputs | The ECU's own torque broadcast | The gateways take a set — No intervention (required) plus optional Intervention, Max, Min and Loses (reference); the standalone drivers take a single Engine torque input |
| Fuel + Air (arbitrated) | Fuel Calculation v2 | Injected fuel mass cross-checked against an air model — see Fuel and air arbitration | Injector setup, Displacement, Cylinder count; VE tables refine it |
| Air Model | Air only calculation | Air-mass model from manifold pressure and intake air temperature | Displacement, VE tables, a configured fuel type |
| Fuel Model | Fuel Only Calculation | Injected fuel mass alone, primary injector only — no air cross-check | Injector setup, Cylinder count |
| Throttle + MAP Estimate | Internal Calculation | A quick estimate from throttle position and manifold pressure | Throttle, MAP; atmospheric pressure and intake air temperature improve it |
| Measured Torque Tables | Torque Tables | Measured engine-torque tables (TPS·RPM scaled by MAP·RPM) | Both torque tables |
⚠️ Fuel + Air (arbitrated) is not a newer Fuel Model. These are two different methods, not two versions of one. Fuel + Air builds a fuel estimate and an independent air estimate, then takes the lower of the two — so an over-reading injector signal is caught by the air model. Fuel Model uses the fuel path alone, with nothing to catch it. Under their old names — Fuel Calculation v2 and Fuel Only Calculation — the first read as a revision of the second. It never was. If you want the cross-check, pick Fuel + Air (arbitrated).
Practical guidance:
- If your ECU broadcasts engine torque on CAN, use ECU Reported Torque — it is the most accurate and needs no calibration.
- Without a torque broadcast, Fuel + Air (arbitrated) gives the best estimate; it needs the injector pulse-width signal from the ECU.
- If no injector signal is available, use Air Model.
Renamed in 2.1
The method names changed in release 2.1 to run on a single axis — what the torque is derived from. Existing configurations are unaffected: the stored value is numeric, so a configuration made before 2.1 loads and resolves to the same method as before, under its new name.
| Old name | New name |
|---|---|
| External Inputs | ECU Reported Torque |
| Fuel Calculation v2 | Fuel + Air (arbitrated) |
| Air only calculation | Air Model |
| Fuel Only Calculation | Fuel Model |
| Internal Calculation | Throttle + MAP Estimate |
| Torque Tables | Measured Torque Tables |
| Fuel Calculation (v1) | removed in 2.1 — see below |
Fuel Calculation (v1) has been removed. It was never implemented: the firmware carried no branch for it, so selecting it produced a constant −123 instead of a torque value. It is no longer offered in the configurator. If a configuration made before 2.1 selected it, the method field reads back blank — choose a real method from the table above before driving the car.
By engine type
The guidance above assumes a naturally aspirated, throttled piston engine. Where the engine breaks one of the assumptions the air model rests on, the choice changes.
Diesel. There is no throttle plate, so throttle position carries no load information, and manifold pressure sits near ambient across the load range — both of the air model's load signals are uninformative. Diesel torque is set by injected fuel quantity, so use ECU Reported Torque, or a fuel method with Fuel type = Diesel (built-in fuel data). With Fuel + Air (arbitrated) this works out correctly on its own: an unthrottled engine running lean has far more air than the fuel needs, so the air ceiling sits high and the fuel path governs. Leave the Throttle drag map empty and put the losses in the Engine speed drag map.
High-overlap cams. At low RPM, reversion breaks the relationship between manifold pressure and trapped air, so speed-density is unreliable there while throttle position still tracks load. Use the VE Blending map — it is indexed by MAP — to weight toward Alpha-N in the pressure regions where your engine's MAP-to-airflow relationship falls apart, and toward Speed-Density where it holds.
Rotary and two-stroke. The air path derives trapped air from half the configured displacement, which is a four-stroke reciprocating assumption. An engine that does not fill that way gets a geometrically wrong air ceiling no matter how the VE tables are filled. Prefer ECU Reported Torque, or Fuel Model Calculation — note that plain Fuel + Air (arbitrated) is a poor choice here, because its wrong air ceiling can still clamp an otherwise correct fuel-path estimate.
Forced induction. The air model works in absolute manifold pressure, so it scales into boost without special handling — but the estimate is directly proportional to that pressure, so the MAP input must be scaled to cover peak boost. A MAP input that saturates gives an air ceiling that saturates with it, and VE tables that stop short of the boosted region leave the ceiling extrapolated where it matters most. Measured Torque Tables are a good fit if you have dyno data across the boost range, since the MAP·RPM table scales the TPS·RPM one. The Maximum MAP value parameter is not the place to declare your boost ceiling — it is reserved and unused by the current firmware.
Verifying the estimate
Nothing in the driver checks whether the torque value is plausible. A badly calibrated estimate is accepted and used exactly like a good one, so verify it before you rely on the transmission.
Route the Engine torque output to a logger or a CAN object, then check it at each of these points:
| Operating point | Expect | If it differs |
|---|---|---|
| Any — first look | Any changing value | A constant −123 means the configuration still selects the removed Fuel Calculation (v1) — see Renamed in 2.1 |
| Warm idle, neutral | Roughly 50–100 Nm, steady | Outside that, or negative, or jumping — the drag maps or the torque source are wrong |
| Steady mid-RPM cruise | Follows your reference curve in shape and magnitude | A constant ratio error is a scaling input (injector size, displacement, cylinder count); a ratio that changes with load is a VE or drag-map problem |
| Near peak torque, full load | Close to the engine's known peak | See above — check the scaling inputs first |
| Overrun, closed throttle | Negative — the drag maps are subtracted from every calculated estimate | A value stuck at or above zero means the drag maps are empty |
Compare against the best reference you have, in this order: the ECU's own internal torque channel, a dyno curve for the same engine, or the manufacturer's published torque curve.
Failure signatures
| Signature | In the log | In the car |
|---|---|---|
| Reads high | Above the reference curve | Clutch pressure is commanded higher than the load needs: abrupt engagement, harsh shift feel, aggressive creep and takeup |
| Reads low | Below the reference curve | Clutch capacity is set below the torque actually present: the clutch slips under load, heats, and wears |
If the estimate is wrong
The torque value sets clutch pressure. On the standalone drivers that path is direct — the Clutch torque → pressure map converts the torque demand into a pressure — and the OEM gateways hand the value to a factory TCU that sets its own clutch and line pressure from it.
- Over-reporting commands more pressure than the load requires. The transmission still works; it engages and shifts harshly.
- Under-reporting sets the clutch capacity below the torque going through it. The clutch slips, and a slipping clutch generates heat and wears. This is the damaging direction — bias a rough estimate high rather than low until it is calibrated.
Two things worth knowing while you diagnose:
- No fault is raised for an implausible torque value. The estimation block reports no faults of its own, in any method. On the standalone drivers the only automatic detection downstream is the clutch-slip watchdog, which sees the consequence (slip), not the cause.
- Adaptation interacts with the error. The standalone drivers continuously adapt clutch pressure (microslip adaptation), so corrections learned against a wrong torque signal stay learned. After changing the torque method or its calibration, re-run the adaptation.
Fuel and air arbitration
Fuel + Air (arbitrated) does not use one model — it builds two estimates every cycle and takes the lower of them:
- The fuel path is the torque the injected fuel could release: pulse width minus dead time, across every configured injector, converted to fuel mass and then to torque through the fuel's energy content.
- The air path is the torque the trapped air could produce if all of it were burned at the fuel's stoichiometric ratio, scaled by VE. It is a ceiling set by airflow, not a measurement of what is being burned.
The two are compared before the lambda-efficiency map is applied and before the drag maps are subtracted; those corrections are then applied to whichever path won. The choice is re-made from scratch every cycle — there is no blending between the two and no hysteresis — and no configuration bypasses it while v2 is selected.
The observable property is that the estimate can never exceed what the trapped air could burn, nor what the injected fuel could release.
One practical consequence: the VE tables move the air ceiling. When they are not all present the air path runs at 100 % VE, which raises the ceiling and makes the fuel path win more often. Filling them changes which model governs in parts of the range — expect the estimate to shift, and re-verify it afterwards.
Worked example — Fuel + Air (arbitrated)
Engine: · Operating point:
What you enter:
| Setting | Where the value comes from | This engine |
|---|---|---|
| Cylinder count | Engine | |
| Displacement | Engine, in cm³ | |
| Rev limiter | Your ECU's limit | |
| Injector size | Injector data sheet, cm³/min | |
| Nominal injector pressure | The pressure that flow rating applies at, kPa | |
| Fuel type | Gasoline — density, stoichiometric AFR and energy content are built in, so there is nothing to enter | Gasoline |
| Deadtime mode | See dead time | |
| Injector pulse width | Live input from the ECU, µs | |
| VE tables | Measured, or left empty — see arbitration |
What the driver does with them, in order:
- Subtracts dead time from the pulse width, then converts the remaining injection time to a fuel mass using the injector size and the fuel's built-in density. Where a Fuel pressure input is assigned and a nominal pressure is set, the flow rating is corrected for actual rail pressure.
- Turns that fuel mass into the fuel-path torque using the fuel's built-in energy content and the cylinder count.
- Builds the air-path ceiling from displacement, MAP, intake air temperature, VE and the fuel's stoichiometric AFR.
- Takes the lower of the two, applies the lambda-efficiency map, and subtracts the drag maps.
Result at that point: Cross-check:
Correction maps
The calculation methods share a set of correction maps. They refine the estimate — an empty map simply applies no correction. Maps are entered as described in Scaling and Maps.
| Map | Axis | Corrects for |
|---|---|---|
| Engine speed drag map | RPM | Engine-braking / friction torque vs RPM |
| Throttle drag map | TPS | Pumping losses vs throttle opening |
| Manifold pressure drag map | MAP | Pumping losses vs manifold pressure |
| Lambda efficiency | λ | Torque loss from rich/lean mixture (needs the Lambda input) |
The VE tables (used by Fuel + Air (arbitrated) and Air Model) describe how well the engine fills its cylinders:
| Map | Axes | Meaning |
|---|---|---|
| VE Speed-Density | MAP × RPM | Volumetric efficiency vs load and RPM |
| VE Alpha-N | TPS × RPM | Volumetric efficiency vs throttle and RPM |
| VE Blending | MAP (1D) | Blend between the two — 100 % = Alpha-N, 0 % = Speed-Density |
⚠️ Warning — the VE tables are all-or-nothing. VE is applied only when all three tables are present. Fill Speed-Density and leave Blending empty, and no VE is applied at all — the air model runs at 100 % VE. There is no fault, no warning, and no fallback to the one table you did fill; the only symptom is a torque estimate that reads high.
A 100 % VE also raises the air ceiling, which changes which model governs in Fuel + Air (arbitrated) — see Fuel and air arbitration.
Behaviour at the rev limiter
Set the Rev limiter parameter to your engine's actual limit. While the engine is above it, the value is held at its pre-limiter level and is not allowed to fall below it — otherwise the transmission would see the limiter's ignition and fuel cuts as wild torque swings and react to them mid-shift.
The hold applies to ECU Reported Torque (on the torque value itself) and to the fuel methods (on the injector pulse width). Measured Torque Tables, Internal Calculation and Air Model have no such hold — they follow their inputs straight through the limiter.
If an input drops out
The estimation block does no freshness checking. It reads each input every cycle and uses whatever that input reports, so what happens when a signal dies mid-drive is decided entirely by that input's timeout settings, not by the torque method:
UsePreviousholds the last value indefinitely. On a torque-critical signal this is the dangerous choice — the transmission keeps setting clutch pressure for an engine state that no longer exists, and nothing indicates the signal is stale.UseDefaultandUseFaultsubstitute a value you choose, which is what makes the loss detectable and predictable.
Set a Timeout and a Timeout mode on every input feeding the estimate. What the estimate then does depends on the method:
| What is lost | Method | The estimate becomes |
|---|---|---|
| CAN torque broadcast | ECU Reported Torque | Whatever the input reports — held, default or fault value |
| Injector pulse width | Fuel methods | Fuel mass falls towards zero, so the estimate collapses to the negative drag torque. In v2 the arbitration takes the lower path, so the collapsed fuel path wins outright |
| MAP | Air Model | Air mass falls towards zero, and the estimate collapses to the negative drag torque |
Both collapses report less torque than the engine is producing, which is the direction that slips clutches — see If the estimate is wrong. Above the rev limiter a lost injector signal is masked instead, because the pulse width is held at its pre-limiter value.
Inputs that were never assigned are different: the driver substitutes a fixed internal value rather than failing.
| Unassigned input | Substituted with | Used by |
|---|---|---|
| Intake air temperature | 25 °C | Throttle + MAP Estimate, Fuel + Air (arbitrated), Air Model |
| Atmospheric pressure | 100 kPa | Throttle + MAP Estimate only — which also replaces any live reading outside 80–120 kPa with 100 kPa |
| Fuel temperature | 25 °C | Fuel methods |
| Flex fuel | 0 % ethanol | Fuel and air methods, for the fuel-property lookups |
| Fuel pressure | 350 kPa | The dead-time lookup, when Deadtime mode is User defined |
Related
- Fuel & injector model — injector settings and fuel data used by the fuel/air methods
- Scaling and Maps — how tables are entered and interpolated
- Controllers — driver catalogue