Controllers » History » Version 1
Adam Klama, 06/21/2026 06:15 PM
| 1 | 1 | Adam Klama | # Controllers |
|---|---|---|---|
| 2 | |||
| 3 | A **controller** is the transmission control strategy that runs on the device (in |
||
| 4 | the schema it is called a **driver**). It turns engine and chassis |
||
| 5 | [inputs](Configuring_Inputs) into the signals a transmission needs, and exposes |
||
| 6 | transmission state back through [outputs](Configuring_Outputs) and |
||
| 7 | [CAN presets](Working_with_the_CAN_Bus#can-presets). Read |
||
| 8 | [Configuration Concepts](Configuration_Concepts) first — it explains where a |
||
| 9 | controller sits in the signal flow. |
||
| 10 | |||
| 11 | Each controller is selected for the device and then **calibrated** through its own |
||
| 12 | set of parameters and [maps/tables](Scaling_and_Maps). The pages below document |
||
| 13 | one controller per page. |
||
| 14 | |||
| 15 | ## Driver catalogue |
||
| 16 | |||
| 17 | The configuration app offers these controllers. Which ones are available depends |
||
| 18 | on the **device type** (serial-number prefix): a **CANbus Gateway** (`CGW…`) and an |
||
| 19 | **IOcan** (`IOC…`) run the gateway and emulation drivers; a **GCU** (`GCU…`) runs |
||
| 20 | the standalone transmission drivers. |
||
| 21 | |||
| 22 | | Controller (driver) | Runs on | Role | Page | |
||
| 23 | |---|---|---|---| |
||
| 24 | | **8HP OEM Gateway** (Gateway BMW OEM) | CANbus Gateway, IOcan | Engine emulation to a factory BMW / ZF **8HPxx** TCU | [8HP OEM Gateway](8HP_OEM_Gateway) | |
||
| 25 | | **OEM PDK Gateway** (Gateway PDK OEM) | CANbus Gateway, IOcan | Engine emulation to a factory Porsche **PDK / 7DT45** TCU | [OEM PDK Gateway](OEM_PDK_Gateway) | |
||
| 26 | | Shifter emulator | CANbus Gateway, IOcan | Emulates an OEM gear selector (GWS) | _planned_ | |
||
| 27 | | Passthrough | CANbus Gateway, IOcan, GCU | Forwards frames between CAN buses | _planned_ | |
||
| 28 | | GCU DCT / DL800 / PDK / DQ250 / DQ500 / TR9080 / Getrag 6DCT470 / ZF 8HPxx | GCU | Standalone transmission control (drives the gearbox directly) | _planned_ | |
||
| 29 | |||
| 30 | > The **GCU PDK** driver controls the 7DT45 gearbox hardware directly (clutch and |
||
| 31 | > line-pressure solenoids, gear actuators) and is **not** the same thing as the |
||
| 32 | > *OEM PDK Gateway*, which talks to the car's factory PDK controller. See |
||
| 33 | > [OEM PDK Gateway](OEM_PDK_Gateway#related). |
||
| 34 | |||
| 35 | ## OEM gateway drivers |
||
| 36 | |||
| 37 | The **8HP OEM Gateway** and **OEM PDK Gateway** are the same kind of driver: an |
||
| 38 | **OEM gateway**. They let you keep the **factory transmission controller (TCU)** |
||
| 39 | and run it behind a standalone/aftermarket ECU. The TCU still does the gear |
||
| 40 | shifting; the gateway gives it the engine picture it expects. |
||
| 41 | |||
| 42 | ``` |
||
| 43 | Aftermarket ECU ─inputs→ OEM Gateway driver ─CAN preset→ Factory TCU |
||
| 44 | (RPM, TPS, (emulates the engine, (8HP / PDK |
||
| 45 | torque, …) reports gear state) mechatronics) |
||
| 46 | Outputs / dash ←───────── gear, mode, speed ←─────────── TCU state |
||
| 47 | ``` |
||
| 48 | |||
| 49 | What the gateway driver does: |
||
| 50 | |||
| 51 | - **Emulates the engine** towards the TCU — most importantly **engine torque**, plus |
||
| 52 | RPM, throttle/pedal, MAP, temperatures and chassis signals. Factory TCUs schedule |
||
| 53 | shifts and set clutch/line pressure from the torque signal, which aftermarket ECUs |
||
| 54 | rarely broadcast in the OEM format. |
||
| 55 | - **Reports transmission state** back to the rest of the car — current/next gear, |
||
| 56 | gearbox mode, ratios, shaft speeds, temperature, vehicle speed, reverse light. |
||
| 57 | - **Handles clutchless shifts** with the [DBW Modifier](#dbw-modifier) (torque cut on |
||
| 58 | upshift, blip on downshift). |
||
| 59 | |||
| 60 | The on-wire conversation with the TCU is implemented by a **transmission-emulation |
||
| 61 | [CAN preset](Working_with_the_CAN_Bus#can-presets)** (one per platform/generation), |
||
| 62 | which you pair with the driver — they are listed on each driver page. |
||
| 63 | |||
| 64 | ### Engine torque estimation |
||
| 65 | |||
| 66 | Because the torque signal matters so much, the driver can obtain it several ways. |
||
| 67 | The **Torque calculation method** parameter selects one; the tables it needs are |
||
| 68 | filled on the driver page. |
||
| 69 | |||
| 70 | | Method | How torque is produced | Tables it uses | |
||
| 71 | |---|---|---| |
||
| 72 | | **Torque Tables** | Looked up directly from measured engine data | Engine-torque tables (TPS·RPM, MAP·RPM) | |
||
| 73 | | **External Inputs** | Taken straight from ECU torque inputs | none (uses the torque inputs) | |
||
| 74 | | **Internal Calculation** | Air-model from displacement, MAP, VE | VE tables + engine parameters | |
||
| 75 | | **Fuel Calculation / v2** | From injector flow and fuel energy | Injector + fuel tables | |
||
| 76 | | **Fuel Only / Air Only** | Single-path variants of the above | the matching subset | |
||
| 77 | |||
| 78 | Drag maps (engine-speed / throttle / MAP) and the lambda-efficiency map correct the |
||
| 79 | estimate for engine braking and mixture. Not every method needs every table — fill |
||
| 80 | the ones for the method you choose. |
||
| 81 | |||
| 82 | ### DBW Modifier |
||
| 83 | |||
| 84 | The **DBW (drive-by-wire) Modifier** produces clean, fast shifts without lifting by |
||
| 85 | momentarily overriding the electronic throttle / pedal request: |
||
| 86 | |||
| 87 | - **Cut** (upshift) — pulls the request **down** to unload the driveline, then ramps |
||
| 88 | it back. Calibrated by *limit position* and *ramp-in / ramp-out* time tables. |
||
| 89 | - **Blip** (downshift) — pushes the request **up** to match revs, then ramps back. |
||
| 90 | Calibrated by *target position*, *time*, and *ramp-in / ramp-out* time tables. |
||
| 91 | |||
| 92 | The cut/blip tables are indexed by gear and by load (torque) or rev-match need |
||
| 93 | (ΔRPM), so the override is sized to the shift. See each driver page for the exact |
||
| 94 | axes. |
||
| 95 | |||
| 96 | ### Fuel / injector model |
||
| 97 | |||
| 98 | When torque is derived from fuelling, the driver models each injector set |
||
| 99 | (**primary** and optional **secondary**) with injector size, nominal pressure and a |
||
| 100 | **dead-time** table, plus **fuel density**, **stoichiometric AFR** and **fuel |
||
| 101 | energy** tables so flex-fuel and temperature are accounted for. |
||
| 102 | |||
| 103 | ## How the reference tables are written |
||
| 104 | |||
| 105 | Each driver page lists its **inputs**, **outputs**, **parameters** and |
||
| 106 | **calibration tables (maps)**. Names, units, ranges and defaults are taken from the |
||
| 107 | driver's UI definition in `config-studio-data/controllers/*.json`; the on-wire |
||
| 108 | fields and tags come from the matching `*.proto` message. Map axes, scaling and |
||
| 109 | interpolation follow [Scaling and Maps](Scaling_and_Maps). |
||
| 110 | |||
| 111 | ## Related |
||
| 112 | |||
| 113 | - [Configuration Concepts](Configuration_Concepts) — controllers in the signal flow |
||
| 114 | - [Working with the CAN Bus](Working_with_the_CAN_Bus) — CAN presets and networks |
||
| 115 | - [Scaling and Maps](Scaling_and_Maps) — how maps/tables are entered and interpolated |
||
| 116 | - [Supported transmissions](Supported_transmissions) |