The CANformance CANTCU runs the transmission; your Haltech runs the engine. The two talk over CAN in both directions. The TCU listens to the Haltech's normal CAN stream (RPM, throttle, MAP and so on), and it sends gear, shift requests and other data back by imitating a Haltech I/O expander box. Upshift cuts and downshift blips are then carried out by the Haltech's own Flat Shift function, with the TCU deciding when and how hard.
How the pieces connect
| Direction | What travels | How |
|---|---|---|
| Haltech to CANTCU | Engine RPM, throttle position, MAP, wheel speeds, brake switch, coolant temp, engine oil temp | The Haltech's dash data stream (that's why the dash stream has to be on) |
| Haltech to CANTCU | An engine load number for the TCU's torque math | A generic output on I/O Box B, DPO 1 |
| CANTCU to Haltech | Gear, drive mode, trans oil temp, cut and blip requests, slip values | Pretends to be I/O Expander Box B |
| CANTCU to Haltech (optional) | Input and output shaft RPM, target RPM, torque change | Pretends to be I/O Expander Box A |
Step 1: Turn on the CAN features (NSP)
- Go to Haltech CAN System (see our Haltech CAN System article).
- Under Input/Output Expander Boxes, enable I/O Expander 12 (Box B).
- Under Displays, enable Haltech CAN Supported Dash. This is what streams engine data out to the TCU, even if you don't have a dash.
- Only if you want the extra values (Step 7): also enable I/O Expander 12 (Box A), and only if no real I/O box is already using Box A.
Step 2: Give the TCU an engine load signal
The CANTCU calculates engine torque from your Haltech's Base Fuel Tuning value (essentially your VE number). That value goes out on a Generic Output assigned to a virtual output on Box B:
| Setting | Value |
|---|---|
| Name | Anything you'll recognize, such as Engine VE |
| Signal Type | Duty Cycle |
| Mode | Table |
| Frequency | 100 Hz |
| Table axis | Base Fuel Tuning (%) |
| Table values | 0% at 0 and 100% at 200, so the output is half the fuel value |
| Wiring › Output 1 | IOB DPO 1 |
| Active State / Safe State | Low / Inactive |
The halving is there because fuel values can run past 100%, and a duty cycle can't. The table squeezes the whole range into 0-100%.
Step 3: Transmission basics
In Transmission, set:
- Transmission Type: Auto with separate controller
- Drive Type: to suit the car (CANformance's example is Rear Wheel Drive)
- Number of Forward Gears: 8 for an 8HP
- Gear Detection Type: Gear Position Sensor
- Enable the Gear Ratio, Paddle Shift Inputs and Flat Shift functions
Calibrate Gear Ratios on a drive once everything else works.
Step 4: Gear position
In Gear Detection Wiring, assign the gear input to IOB AVI 1. In Gear Detection Position, enter:
| Gear | R | N | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|---|
| Volts | 0 | 0.5 | 1.0 | 1.5 | 2.0 | 2.5 | 3.0 | 3.5 | 4.0 | 4.5 |
Each gear is half a volt above the last, which makes it easy to spot a mistake in a log. See Gear Detection for the setting details.
Step 5: The virtual paddles
The CANTCU asks for a cut or a blip by moving a virtual paddle voltage on IOB AVI 3. You don't wire anything for this; it arrives over CAN.
- Open Paddle Shift Inputs › Wiring. Set Paddle Shift Option to Analogue Up and Down and Neutral Shift Method to None. Paddles only select forward gears.
- Assign Both Paddles Input to IOB AVI 3, Pull Up disabled.
- In Paddle Shift Inputs, set Up-shift Request Voltage to 4.00 V, Down-shift Request Voltage to 1.00 V and Voltage Tolerance to 0.10 V.
Resting, the signal sits at 2.5 V. 4 V means "cut now" and 1 V means "blip now". More in Paddle Shift Inputs.
Step 6: Cuts and blips with Flat Shift
Set up Flat Shift like this. The settings marked "required" are what make the TCU the one in charge; the rest are CANformance's example values for you to adjust.
| Setting | Value | Notes |
|---|---|---|
| Mode | While Active | Required. The cut lasts as long as the TCU asks for it. |
| Flat Shift Input Enable / Input Select | On / Paddles with external controller | Required. Triggers from the virtual paddles. |
| Shift Direction (Torque Reduction) | Up Shifts | Required. The upshift paddle is the TCU's cut request. |
| Torque Reduction Method | Example: Fuel Cut, Ignition Cut & Ignition Retard | Your choice, to suit the engine and how it's driven |
| Recovery Method | Example: Ramp Out Cut and Retard Together | Your choice |
| Max Shift Time / Blockout | Example: 3000 ms / 0 ms | A safety ceiling on cut length |
| Min TPS / Min RPM | Example: 0% / 1000 rpm | Below these, no cut |
| Throttle Blip on Down Shift | Enabled, with Rev-match Limiter on | The limiter stops RPM overshooting until the blip ends |
| Blip Min Speed / Min RPM | Example: about 12 mph (20 km/h) / 1200 rpm | No blips when crawling |
How hard to cut
Give both the Cut Percentage and Ignition Retard tables an axis of IOB DPI 1, the TCU's cut-percent request (0-100%). Now the TCU sets the intensity shift by shift. You can add a second axis; CANformance uses IOB AVI 4, the TCU's drive mode, so each mode can shift differently. In their example a full request asks for between 12% and 20% cut and 10° to 15° of retard, depending on drive mode, and zero request asks for nothing.
How hard to blip
Give Throttle Blip Amount an axis of IOB DPI 2, the TCU's blip-percent request. CANformance's example climbs from 0% throttle at no request to 15% at a full request. Set Throttle Blip Duration with whatever axes suit you.
Test downshifts first with blips off, and confirm in a log or live view that the blip table is behaving. Start with small blip values and work up. Too much blip over-revs the engine or shoves the car forward mid-shift. Do this tuning on a dyno or a closed track.
Step 7 (optional): Extra values on Box A
If Box A is free, the CANTCU can send four more channels. Turn it on in the CANTCU software: CAN3 Configuration › Send Extra Values (IOBox A) = Enabled, then enable Box A in the Haltech (Step 1).
Channel cheat sheet
Everything arrives at 50 Hz. Set up each input in the Haltech with these scalings so the values read correctly.
| Haltech input | TCU value | Scaling |
|---|---|---|
| IOB AVI 1 | Gear | 0-4.5 V (see Step 4) |
| IOB AVI 2 | Trans oil temp | 0-5 V = -40 to 160 °C (-40 to 320 °F) |
| IOB AVI 3 | Cut/blip trigger | 1 V blip, 2.5 V idle, 4 V cut |
| IOB AVI 4 | Drive mode | 0-5 V, 1 V per mode |
| IOB DPI 1 | Cut request | 0-100% duty |
| IOB DPI 2 | Blip request | 0-100% duty |
| IOB DPI 3 | Clutch slip | -100 to +100% |
| IOB DPI 4 | Converter slip | -100 to +100% |
| IOA AVI 1 (optional) | Input shaft RPM | 0-10,000 rpm |
| IOA AVI 2 (optional) | Output shaft RPM | 0-10,000 rpm |
| IOA AVI 3 (optional) | Target RPM | 0-10,000 rpm |
| IOA AVI 4 (optional) | Torque change | -1000 to +1000 Nm |
Troubleshooting
| Symptom | Usually |
|---|---|
| TCU shows no RPM, throttle or MAP | Haltech CAN Supported Dash isn't enabled |
| No IOB channels in the Haltech | I/O Expander 12 (Box B) isn't enabled |
| Shifts feel wrong under load | The Engine VE generic output isn't set up, or isn't on IOB DPO 1 |
| No cut on upshifts | Flat Shift mode isn't While Active, input isn't "Paddles with external controller", or Shift Direction isn't Up Shifts |
| Cut on downshifts too | Shift Direction set to both directions; it must be Up Shifts |
| Box A values are nonsense | A real I/O box is also using Box A |
FAQ
Do I need to buy a Haltech I/O box?
No. The CANTCU imitates the boxes over CAN; you only enable them in the software.
Who decides the shift cut, the Haltech or the TCU?
The TCU decides when and how much. The Haltech decides how the torque comes out (fuel cut, spark cut, retard) using the tables you set.
Can you set this up for me?
Yes. Book a free consultation and we'll help plan your transmission swap. Using a TurboLamik instead? See our TurboLamik and Haltech setup guide.




