Installing a CR-Touch on a stock CR-10S

2026-05-29 Added four-year retrospective note.
Summary

How to wire a CR-Touch to the stock CR-10S mainboard using a DIY adapter cable, patch Marlin 2 firmware, and calibrate the probe offset.

The CR-Touch works on 8-bit boards just fine — the PWM servo signal and digital trigger output are well within ATmega2560 capabilities. The catch with the stock CR-10S is not the processor, it is the connector: Creality’s guides all assume a dedicated 5-pin BLTouch header that the stock V2 board does not have. This article documents the adapter cable that bridges two existing headers, the one-line Marlin patch, and the probe offset workflow.

This guide assumes you are already running custom Marlin 2 on your printer. If you are still on stock firmware, see Building and flashing Marlin 2 on a CR-10S V2 first.

The stock board problem

CR-Touch installation guides almost universally assume a dedicated 5-pin BLTouch header on the mainboard. Creality added that header on newer 32-bit boards (CR-10S Pro, CR-6 SE, etc.), and the official documentation only covers those. The stock CR-10S V2 board — an ATmega2560 — predates that header. The CR-Touch itself does not care about the processor architecture; it needs five signals, and those signals are available on two existing headers the V2 board already exposes: a free D11 servo header (3 pins) and the Z endstop header (2 pins). No adapter board, no cut wires.

Building the adapter cable

The adapter splits the CR-Touch’s 5-pin JST connector into two branches:

  • a 3-pin female Dupont plug for the D11 servo header
  • a 2-pin JST plug replacing the Z endstop connector

The main risk is reversing the connector: getting the pinout wrong can damage the CR-Touch. Use a multimeter in continuity mode to verify before powering on. The two ground pins (G) on the CR-Touch are shorted internally, which makes them easy to confirm by probing both simultaneously.

The correct wiring for the stock CR-10S is shown below. Note that the GND (white) and VIN (black) wires cross between the CR-Touch connector and the D11 header — pin 1 of the D11 header is VIN, but VIN is the second wire out of the CR-Touch.

CR-Touch pin Wire colour Destination Signal
G White D11 pin 2 GND
V Black D11 pin 1 VIN (+5V)
IN Yellow D11 pin 3 Signal
G Red Z endstop pin 2 GND
OUT Blue Z endstop pin 1 OUT

Adapter cable wiring diagram

The D11 header reads left to right: black (VIN) — white (GND) — yellow (SIG) when viewed from the plug side. The Z endstop header has blue (OUT) on pin 1 and red (GND) on pin 2.

Verification tip: probe both G pins (white and red) with continuity — they should beep. Also verify VIN against a known +5 V point on the board before powering on, to confirm polarity.

Patching Marlin 2

Marlin’s default RAMPS/Creality pin assignments do not define SERVO0_PIN, so the BLTouch servo signal floats. Edit Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h and add inside the existing #ifdef NUM_SERVOS block:

1
2
3
#ifdef NUM_SERVOS
  #define SERVO0_PIN 11
#endif

This maps servo 0 to pin 11, which corresponds to the D11 header used above.

Configuration.h settings

Enable the following defines in Configuration.h:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#define BLTOUCH                          // treats CR-Touch like BL-Touch
#define USE_PROBE_FOR_Z_HOMING           // home Z using the probe, not the endstop
#define Z_SAFE_HOMING                    // prevents crashing the probe off the bed edge

// Probe grid
#define GRID_MAX_POINTS_X 7              // 7×7 bed level mesh

// Calibration helpers (optional but recommended)
#define PROBE_OFFSET_WIZARD
#define PROBE_OFFSET_WIZARD_START_Z -4.0

// Babystepping (may already be enabled in recent Marlin versions)
#define BABYSTEPPING
#define BABYSTEP_DISPLAY_TOTAL
#define BABYSTEP_ZPROBE_OFFSET

Understanding the LED status

After flashing and powering up, the CR-Touch runs a self-test sequence. The LEDs report the result:

LED state Meaning
🔴 Red only, solid Power OK; PWM signal not yet received from the board
🔴🔵 Red + Blue (purple) Self-test passed — probe is ready
🔴 Red blinking Self-test failed — pin stuck or obstructed

If the self-test passes but only the red LED lights (no blue), the PWM signal cable is likely loose or miswired. Secure the Dupont connector with a piece of tape; double-check the signal wire on D11 pin 3.

Once the blue LED is on, test deploy and stow from the Marlin Motion › BLTouch menu before starting any print.

Setting the probe offset

NOZZLE_TO_PROBE_OFFSET { X, Y, Z } defines the probe tip position relative to the nozzle. X and Y depend on your bracket mounting; Z is the trigger height.

Do not try to get Z right at compile time. Leave it at 0 in the build and use the Probe Offset Wizard (Motion › Probe Offset in the Marlin menu) to dial it in live using the paper test. The wizard writes the result to EEPROM.

For X/Y, typical values with the standard Creality metal bracket are:

Axis Typical value Notes
X −44 to −46 Measure from your own bracket; −44 is a common starting point
Y −9 Generally consistent across mounting positions
Z 0 (compile) Set live via Probe Offset Wizard, saved to EEPROM
1
#define NOZZLE_TO_PROBE_OFFSET { -44, -9, 0 }

If first-layer results drift laterally, measure the actual nozzle-to-probe distance with calipers and adjust X/Y accordingly.

Babystepping and live Z adjustment

Babystepping lets you nudge the Z offset mid-print without stopping. With BABYSTEP_ZPROBE_OFFSET enabled, the adjustment is persistent: it updates the stored probe offset in EEPROM, not just a temporary shift. Recommended workflow:

  1. Start a print.
  2. Watch the first layer; use the babystepping menu to correct if needed.
  3. The corrected value is saved automatically.

For a visual walkthrough combining the Probe Offset Wizard and babystepping, see this Z-offset calibration guide.

Bed levelling visualisation

If you use OctoPrint, the Bed Level Visualizer plugin renders the mesh as a 3D heatmap. It is useful for spotting physical bed problems that no Z offset correction can fix, such as a warped or unlevel frame.

Four years later (2026)

Once calibrated, the CR-Touch is one of those upgrades that becomes invisible — the first layer just works. The adapter cable is the only non-standard step; once you’re past the connector problem, it’s standard Marlin configuration. Four years in, I have not had to recalibrate it once.