Shift Fork Control
This guide covers setup and calibration of the hydraulically actuated Shift Forks used to control gear selection in Dual Clutch Transmissions (DCT).
Concepts
Axes
A DCT has two input shafts (“axes”), each carrying its own clutch. While one axis is transmitting drive, the other is free to pre-select the next gear so that the shift itself is just a clutch hand-off, with no torque interruption. Every gear (including Reverse) belongs to one of these two axes:
| Clutch | Axis | Typical Gears |
|---|---|---|
| A | A | Even gears |
| B | B | Odd gears |
The active axis is whichever axis currently has a gear engaged and is transmitting drive.
The inactive axis is free to move its fork(s) to pre-select the next gear.
Clutch Axes
The TCM will always assume that the clutch and axis are a matched pair:
- Clutch A is on Axis A
- Clutch B is on Axis B
Shift Forks
A shift fork is a physical selector that can sit in one of three positions (“slots”):
| Slot | Meaning |
|---|---|
| Low | Engages the fork’s “Low” gear |
| Centre | Neutral (no gear engaged on that fork) |
| High | Engages the fork’s “High” gear |
Each fork belongs to one axis (or, for a shared Reverse fork, both axes) and is responsible for up to two gears, one on its Low side and one on its High side.
Up to 8 forks and 8 shift solenoids are supported.
While driving:
- The active axis must already have its current gear’s fork engaged (all other forks on that axis in Neutral).
- The inactive axis may have, at most, the pre-selected next gear’s fork engaged (all others in Neutral).
Only one fork is ever moved at a time. A fork on the active axis is never moved unless it’s explicitly required (e.g. a shift out of Neutral/Park), and a fork that needs to return to Neutral is always preferred over one that’s about to engage a new gear, so the way is cleared before a new gear goes in.
Fork Position Sensing
Each fork has a position sensor that is scaled and calibrated to report the fork’s measured position in millimeters. Some forks also have a secondary tracking sensor used purely for cross-checking / diagnostics.
Fork Position 1-8 inputs are configured in Input Setup.
The fork’s calibrated Low / Centre / High positions and tolerance bands are what translate this raw position into a slot (Low / Centre / High / Moving).
Fork Management
At all times the shift fork system is actively performing the following tasks:
- Each fork’s target is set:
- Active-axis forks target the current gear.
- Inactive-axis forks target the pre-selected gear.
- Everything else targets Neutral.
- Each fork’s own position/slot state is updated.
- Axis “binding” is detected if more than one fork on an axis reports being in gear at once.
- An axis fault is raised if any fork on that axis is in a position error state.
Fork Movement
- If a fork is currently moving, its movement is monitored until complete.
- Otherwise, the next fork that needs to move is found (inactive axis first, unless an active-axis move is explicitly allowed) and its movement begins.
- The physical shift solenoids are driven to move the current fork, or to hold the idle/default solenoid pattern when nothing is moving.
- If Axis Pressure Control solenoids are in use, their pressure is modulated to control fork movement speed.
Shift Procedure
- The currently engaged gear and its axis are marked as active.
- The Preselection system predicts the next shift direction (up or down) and selects the next gear on the inactive axis.
- On a shift request, the next gear’s fork is determined and pre-selected (if it’s not already) on the inactive axis.
- Once the pre-selected gear’s axis is ready (fork in target slot, no axis error), the clutch hand-off for the shift can proceed.
- After the shift completes, the new gear’s axis is marked as active, the offgoing axis is marked inactive.
- The Preselection system resumes prediction of the next shift on the newly inactive axis.
Configuration & Calibration
Shift Fork Setup (Global)
These apply to whichever fork is currently moving, regardless of which fork it is.
| Setting | Description |
|---|---|
| Shift Fork Stable Velocity (+/-) | Fork velocity threshold (± mm/s). Once a fork is inside its target slot’s tolerance band and below this velocity, its “stable” timer starts. Set to 0 to disable the velocity check (stability then depends only on being in-slot) |
| Shift Fork Stable Time | Time (ms) the fork must remain in-slot and stable before the move is considered complete |
Shift Fork Setup (Per-Fork)
Each fork (numbered 1–8) is independent and must be configured individually. Below, “#” stands for the fork number, eg: “Shift Fork 3 Axis”.
| Setting | Description |
|---|---|
| Shift Fork # Axis | Parent axis: Disabled / Axis A / Axis B / Both (shared, e.g. Reverse) |
| Shift Fork # Label | Free-text label for the fork (shown in the tuning software UI) |
| Shift Fork # Position L Gear | Gear engaged when the fork is in its Low slot. OFF = slot unused. |
| Shift Fork # Position H Gear | Gear engaged when the fork is in its High slot. OFF = slot unused. |
| Shift Fork # Position L | Target fork position for the Low slot (mm) |
| Shift Fork # Centre | Target fork position for the Centre (Neutral) slot (mm) |
| Shift Fork # Position H | Target fork position for the High slot (mm) |
| Shift Fork # Position L Tolerance (+/-) | Position tolerance (± band) around the Low slot (mm) |
| Shift Fork # Centre Tolerance (+/-) | Position tolerance (± band) around the Centre slot (mm) |
| Shift Fork # Position H Tolerance (+/-) | Position tolerance (± band) around the High slot (mm) |
| Shift Fork # Error Detection | Enables position error detection; bit 1 auto-clears the error once the fork returns to its target slot |
| Shift Fork # Error Auto Clear | Auto-clears the error once the fork returns to its target slot |
| Shift Fork # Error Delay | Time the fork may be out of its target slot before a position fault is raised (0–25.0 s) |
| Shift Fork # Test | Bench/service test override: Off / Force Low, / Force Centre, / Force High. Only takes effect while the requested gear is Neutral or Park |
Notes:
- The Low and High slot positions do not need to be numerically low/high — the firmware automatically detects whether the fork’s travel is inverted (i.e. the Low position is a larger number than Centre) and corrects the shift-direction logic accordingly.
- Whichever gear ends up on the Low slot vs. High slot is purely a function of fork travel direction — set the Low/High gear assignments to match the physical gear each end of travel actually engages.
- A fork does not need both slots populated — a single-sided fork (e.g. Reverse-only) should leave the unused Low/High gear assignment at
0.
Shift Solenoid Selection
Which solenoids are energised to move a fork in a direction is controlled by the solenoid select tables.
| Table | Description |
|---|---|
| Shift Fork # Positive Solenoid Select | Selects which shift solenoid(s) (1–8) are energised to move the fork in the positive position direction (+ mm) |
| Shift Fork # Negative Solenoid Select | Selects which shift solenoid(s) (1–8) are energised to to move the fork in the negative position direction (- mm) |
| Shift Fork Idle Solenoid Select | Shift solenoid(s) held on when no fork is currently moving (idle hold pattern) |
| Default Shift Solenoid Select | Shift solenoid(s) always added to the active pattern in addition to the moving/idle pattern, when the default overlay is enabled |
| Default Shift Solenoid Enable | Enables/disables the default solenoid overlay above (non-zero = enabled) |
Important
The solenoid select table’s X-axes must be Shift Solenoid #. Multiple solenoids can be selected at once.
Per-Fork Position Sensor Calibration
Shift Fork n Position is reported in mm.
Each fork has a position sensor that can be calibrated in Input Config > Transmission Inputs > Shift Fork Positions.
It is critical that these position sensor inputs are assigned and calibrated correctly.
Fork Movement Pressure Control
While a fork is moving, its physical movement can optionally be driven by a
closed-loop position PID acting on hydraulic pressure (rather than a fixed pressure). The need for pressure control will depend on the transmission design.
When enabled, the Axis Pressure solenoids are controlled to achieve the desired pressure.
| Setting / Table | Description |
|---|---|
| Axis Pressure Override | Enables the axis pressure override: while set, the axis pressure of whichever axis is physically moving is driven by the fork-movement PID instead of the normal active/inactive axis pressure targets |
| Fork Movement Pressure Base | Base (feed-forward) pressure added ahead of the PID output (Bar) |
| Fork Movement Pressure Proportional Gain | PID proportional gain for fork movement pressure control |
| Fork Movement Pressure Integral Gain | PID integral gain for fork movement pressure control |
| Fork Movement Pressure Derivative Gain | PID derivative gain for fork movement pressure control |
| Axis Pressure Override Integral Min / Max | PID integral clamp (Bar) |
| Axis Pressure Override Min / Max | Output pressure clamp (final PID output is constrained to this range) (Bar) |
Torque Limiting During Fork Movement
Active Axis Fork Movement Torque Limit can be applied applied while a fork on the currently active axis is moving (e.g. Shifts out of Neutral/Park, where the axis being engaged is also the “active” axis).
Errors & Diagnostics
Per-Fork Position Error
If a fork’s error-detection is enabled, a fork that fails to reach its target slot within its Error Delay (or whose position sensor reports a fault) raises a Fork # Movement fault and enters an internal error state.
From the error state, the firmware automatically retries the move (up to 3 attempts, 1 second apart). If the Config auto-clear bit is enabled, the error clears automatically once the fork successfully reaches its target slot again (and the position sensor is healthy) — this is normally only allowed to happen when the fork’s target is Centre (Neutral), so a fork always has to prove it can get back to a safe state before being trusted again.
Using the tuning software’s “Clear All Codes” action also resets every fork’s retry count, in addition to clearing the fault codes themselves — so a fork that had exhausted its retries gets a fresh set of attempts on its next movement, rather than immediately re-latching into a fault.
Axis errors
Each axis is also monitored as a whole:
| Fault | Cause |
|---|---|
| Axis A Bound / Axis B Bound | More than one fork on that axis reports being in gear simultaneously — i.e. the axis is mechanically bound between two gears |
| Axis A Fault / Axis B Fault | At least one fork on that axis is in a position error state |
While an axis is in fault, no fork on that axis will be moved until the fault clears.
Related channels for diagnosis
See Runtime Channels for the full list. Each fork’s Status and Position Error, and the Moving Shift Fork channel, are usually the first things worth logging when diagnosing a shift fork issue.
Runtime Channels
Per-Fork Channels (# = fork number, 1–8):
| Channel | Description |
|---|---|
| Shift Fork # Position | Measured fork position, mm |
| Shift Fork # Position Target | Target fork position, mm |
| Shift Fork # Position Error | Position error (target − measured), mm |
| Shift Fork # Velocity | Measured fork velocity, mm/s |
| Shift Fork # Status | see Shift Fork Status enumeration |
| Shift Fork # Tracking | Secondary/tracking position sensor reading (diagnostic only) |
System-Wide Channels:
| Channel | Description |
|---|---|
| Selected Gear A | Gear currently engaged on Axis A |
| Selected Gear B | Gear currently engaged on Axis B |
| Active Gear Shift Fork | Fork responsible for the currently active (engaged) gear |
| Preselected Gear Shift Fork | Fork responsible for the pre-selected next gear |
| Moving Shift Fork | Fork currently moving |
| Active Shift Fork Position | Position of whichever fork is currently moving |
| Active Shift Fork Position Target | Target position of whichever fork is currently moving |
| Active Shift Fork Position Error | Position error of whichever fork is currently moving |
| Active Axis Pressure Target | Active axis clutch pressure target, Bar |
| Inactive Axis Pressure Target | Inactive axis clutch pressure target, Bar |
| Active Axis Fork Movement Torque Limit | Torque limit currently applied due to active-axis fork movement |
| Shift Fork Movement Pressure | Fork movement pressure demand output (PID + base), Bar |
| Shift Fork Movement Pressure Base | Fork movement pressure base/feed-forward term |
| Shift Fork Movement Pressure P Gain | Fork movement pressure PID proportional term |
| Shift Fork Movement Pressure I Gain | Fork movement pressure PID integral term |
| Shift Fork Movement Pressure D Gain | Fork movement pressure PID derivative term |
Calibration Procedure
Enable each fork — set the Axis setting for every physical fork fitted (Axis A, B, or Both for a shared Reverse fork). Leave unused fork slots OFF.
Wire up and calibrate position sensors first, via the standard analog input mapping/translation tools, so that each fork’s Position channel reads a correctly-scaled value (mm) across the whole range of travel.
Set tolerance bands (Low/Centre/High Tolerance) tight enough to confirm the dog teeth/synchro are actually engaged, but loose enough to tolerate normal sensor noise and mechanical play.
Assign gears to each slot via Position L Gear / Position H Gear. You may have to put some educated guesses into the positions initially.
Assign shift solenoids per fork (Up/Down Shift Solenoid Select) and confirm direction — command a move with Test mode and verify the fork moves the correct way and its Status reports moving in the expected direction, then settles into the correct slot.
Set idle/default solenoid patterns (Idle Solenoid Select, Default Select / Enable) as required by the actuator hardware.
Find and record the three slot positions for each fork with the vehicle safely supported and the driveline free to move by hand, or using the fork’s Test setting to command it to each slot in turn (only works while the requested gear is Neutral or Park):
- Force to Low, record the settled Position reading into Position L.
- Force to Centre, record Centre position.
- Force to High, record Position H.
- Set Test back to Off when done.
Tune move-complete detection — Stable Velocity and Stable Time — so a fork isn’t reported as “done” while still settling, but without adding unnecessary delay to every shift.
Tune fork movement pressure (if using closed-loop pressure control): set the Movement Pressure Base and PID gains, and the Pressure Override Min/Max and Integral Min/Max clamps, then enable Shift Actuation Config bit 0 if pressure-based fork actuation is desired instead of fixed axis pressure targets.
Set error detection last, once movement is proven reliable. Set each fork’s Error detect / Auto-Clear and Error Delay, generous enough to allow for normal shift timing but tight enough to catch a stuck fork.
Verify full shift sequences in all gears, both directions, watching the Active Gear Shift Fork, Preselected Gear Shift Fork and Moving Shift Fork channels. Watch each fork’s Status & Position, for consistent, movement and engagement. Confirm no Axis Bound/Axis Fault faults occur across the full gear range.

