CanTCU Integration

From MS4X Wiki
Revision as of 22:21, 25 October 2023 by Sda2 (talk | contribs) (→‎Integration)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

The Canformance CanTCU is a control unit you can add to basically any car to integrate BMW-based ZF 8HP transmissions or the Getrag 7 speed DCTs.

CanTCU installed in an E46


  • 100% OEM torque-based control resulting in real OEM drivability
  • No additional gearbox tuning needed
  • Gear indicator in instrument cluster (including E/D/S/M-modes) (currently only in non-M3 clusters)
  • Fully working cruise control (Standard/Braking/ACC)


E46 Plug&Play Wiring for 8HP

The integration is very easy because you basically just need +12V supply voltage, ground and a CAN bus connection to the chassis CAN.

Depending on your car already having an automatic transmission before the swap you need a relay for the rear lights or just connect the existing rear light relay input to a digital output.

The CAN bus connection can be found directly inside the ECU water box, ideally you just add the CAN wires to ECU connector X60002 (Pin 3 Low & 4 High) or use existing wires. This is where you connect CanTCU CAN3.


Car needs to be fully coded as an automatic (S205A in VO/FA) and the DME/DDE programmed using automatic transmission software to support torque interventions.

Usually the later happens automatically when a gearbox controller is seen on the CAN bus network. If you can't code the whole car, make sure you set following coding options manually:

  • (A)KMB - GETRIEBEART = automatik
  • MK20 - GETRIEBE = automatik
  • MK60 - GETRIEBE = automatik
  • (A)EWS - PARK/NEUTRAL_EINGANG = nicht_aktiv

The immobilizer (EWS) module is used to activate the starter in E38 to E53 models but it is not connected to the vehicle CAN bus therefor not knowing if the gearbox is in park position.

So if you don't connect a digital output of CanTCU to the EWS transmitting this signal, or you have a manual car, you need to set PARK/NEUTRAL_EINGANG to "nicht_aktiv". Otherwise the starter wouldn't activate.


  • Early E39 (E38 based) instrument clusters are not able to show higher gears than 5th.
  • The gear display of M3 cluster swapped cars is not working, because M3 clusters require a checksum in the same bit as the transmissions torque intervention.
  • There is currently no support for the automatic gear selector, however the SMG shifters will work (or any supported 8HP / DCT shifter)
  • Currently there is no way of blipping the throttle for downshifts initiated by the gearbox, we work on a solution for MS42 & MS43

Torque Correction

MS42 and MS43 based cars unfortunately lack a real torque based engine control, but have certain tables used to transmit current engine torque.

While the 8HP transmissions are a bit more forgiving, DCTs need these tables to be very exact. On stock engines the value is very accurate.

Unfortunately these tables are often forgotten by many tuners, or decalibrated because they are confused with a torque limiter.

If your ECU is locked or your tuner refuses to give you precise values, there is a last resort: The torque correction factor in CanTCU configuration utility. This is just a band-aid and can temporary help you get the car moving, however the right way is to have the engine report correct torque even when tuned.

Diesel ECUs (DDEs) usually always report the correct the torque since they already operate torque based.

MS42 & MS43 Torque Model

MS42 and MS43 use a very rudimental torque model compared to modern ECUs. There are a few things to take care of for making it work best with CanTCU.

Torque Values

All CAN11h based chassis modules transmit torque values and intervention request in a percentage value of the standard torque (c_tq_stnd or MDNORM), not as an absolute value like BN2000 and following chassis.

This value is broadcasted as a multiplexed value by the ECU every few seconds so that all modules agree to the same base. At the same time, this value is the maximum torque value that is transmitable. Long story short, you have to set the value of c_tq_stnd slightly above your maximum torque and ideally as a factor of 16 since the resolution is decreased to make this value fit in a byte when transmitted on CAN. To check this, the multiplexed value is currently tied to CanTCU debug value RT_DEBUG_3.

For additional information on CAN11h click here.

During normal operation of the engine, the transmitted torque is looked up in the table ip_tqi_pvs__n__pvs and corrected by several factors (PVS, N, AMP, TIA ,TCO, IGA, PUC). Ideally you tune this table on a dyno and make it as smooth as possible. Dont forget to expand the axis values to cover your whole operating range.

  • c_tq_stnd - Standard engine torque used as a base to calculate torque percentage for CAN bus.
  • ip_tqi_pvs__n__pvs - Indexed engine torque used for torque transmission on CAN bus
  • ip_pvs_tqi__n__tqi - Maximum allowed throttle opening during a torque intervention request

Ignition Values

During upshifts, the ECU uses a combination of torque reduction strategies. First ignition retard, then throttle body closing, then fuel cut. Ideally we enable the ignition retard strategy to take care of upshift all the time since its the fastest of those three. That also makes the shift sound more like a modern car.

Ideally you adjust the axis of ip_iga_tqr__n__maf to fit your maximum engine speed and maximum engine load so that a clean interpolation can be made here. Logs showed us that the exhaust manifold pressure spikes up by ~70-80kPa when reducing timing a lot during upshifts. So depending on your setup and especially boost pressure you might need throttle as a second stage to not blow up your turbo manifold. Setpoints of -10°CRK to -13°CRK are a good starting point at full load.

Additionally the "optimal ignition advance" tables need to be adjusted since they are used to determine torque during reduction requests. Usually these are set a lot higher than your operating ignition angle, since it is the best possible combustion angle. Practice shows that you can extrapolate the stock tables to the same axis values like the main ignition tables.

  • ip_iga_tqr__n__maf - Maximum allowed spark retard for torque reduction
  • ip_iga_optm_tco_1__n__maf - Optimal ignition advance during cold engine. Used as references for torque reduction and exhaust gas temperature calculations
  • ip_iga_optm_tco_2__n__maf - Optimal ignition advance during warm engine. Used as references for torque reduction and exhaust gas temperature calculations