Site Navigation

Your Account

Choose Language

Connecting a Z probe

This describes how to connect a variety of Z probes to the Duet hardware.

Overview ¶ 

The Duet 2s (Duet WiFi and Duet Ethernet) and Duet 0.8.5 provide a dedicated 4-pin connector for connecting a Z probe. The Duet 0.6 does not have the Z-probe connector, but you can use some pins on the expansion connector for the same purpose.

For a comparison of advantages and disadvantages for various Z probe options see Choosing a Z probe.

If you don't have a Z probe, you can still use delta auto calibration, mesh bed compensation and other features normally associated with a Z probe. See Mode 0 below.

Once you have the probe connected, see how to Test and calibrate a Z probe and Setting up automatic probing of the print bed.

Z Probe Header/ Expansion header pins ¶ 

These are the pins provided on the 4-pin connector, and the corresponding pins on the Duet 0.6 expansion connector:

Duet WiFi/Ethernet pin markingDuet 0.8.5 pin markingDuet 0.6 expansion connector pinPurpose
INAD1239 (AD12)Input from Z probe
GNDGND2 (or use the GND pin on E0 endstop connector)Ground
MODPC1041 (AD14)Control signal for some types of Z probe
3.3V3.3V3 (or use the 3V3 pin on E0 endstop connector)Power to Z probe

You can use a Z probe with either an analog or a digital output. The advantage of an analog output is that the firmware will slow down the probe speed when it is getting close to trigger height. Some types of Z probe with digital output should be connected to the E0 endstop connector instead of ot the Z probe connector.

To configure the firmware to recognise the output mode of the Z probe you are using and which pin it is connected to, use the P parameter of the the M558 command in config.g. For example, M558 P1 selects Z probe mode 1.

Z probe modes selectable in firmware ¶ 

Using the M558 Gcode the type of Z probe can be selected:

Mode 0 ¶ 

Select this mode if you have no Z probe. When the firmware tries to execute a command to probe the bed, it will instead show a dialogue in Duet Web Control, and also on Panel Due if you are running recent Panel Due firmware, asking you to jog the head down until the nozzle just touches the bed and then press the OK button.

Mode 1 ¶ 

This is a probe with an analog output connected to the Z probe connector. The probe output must rise as it gets closer to the bed, unless you use parameter I1 in the M558 command to indicate that the probe output falls as it gets closer to the bed (the I1 parameter is supported in firmware 1.16 and later). The control signal is driven HIGH.

Mode 2 ¶ 

This is a probe with an analog output that requires the Duet to provide modulation signal and demodulate the returned signal. The probe output rises as it gets closer to the bed. The Duet drives the control signal with a 500Hz square wave. The firmware extracts that part of the analog signal received on the IN pin that is in phase with the modulation.

Mode 3 ¶ 

As mode 1 except that the control signal is driven LOW.

Mode 4 ¶ 

The trigger signal is read from the E0 endstop circuit. You can choose whether the signal is high or low when triggered. In firmware 1.15 and earlier this is done by using M574 E0 S1 to select active high, or M574 E0 S0 to select active low. In firmware 1.16 and later, use I1 in the M558 command to select active low, otherwise it defaults to active high. The device connected to the E0 STP pin must be able to sink 1.5mA for the Duet 2 WiFi and Duet 2 Ethernet, 0.3mA for the Duet 2 Maestro, or 2.1mA for the Duet 0.6 or 0.8.5.

Mode 5 ¶ 

A switch or digital output device connected between the IN and GND terminals of the Z probe connector. Similar to mode 4 except that the Z probe connector is used. The input must be active high when triggered, or in firmware 1.16 and later you can use the I1 parameter in the M558 command to select active low. The only pullup resistor is the 100K nominal pullup in the microcontroller so the sink current requirement is tiny.

Mode 6 ¶ 

Similar to mode 4 except that the E1 endstop input is used.

Mode 7 ¶ 

Similar to mode 4 except that the Z endstop input is used.

Mode 8 ¶ 

Similar to mode 5 except that the input is not filtered, for slightly faster response. Supported in firmare 1.20 and later.

Mode 9 ¶ 

Special mode for BLTouch probe. Supported in firmware 1.21 and later.

Mode 10 ¶ 

Use the Z motor stall detection as the Z probe trigger. Supported in firmware 1.21 and later. There are limitations to stall detection and it is not always appropriate for accurate Z probing however there is a detailed discussion on the forum and some users have had success.

Connecting different types of Z probe ¶ 

Mini differential IR sensor by dc42 ¶ 

Connect the VCC, GND and OUT pins of the sensor to 3.3V, GND and IN respectively on the Z probe connector, and select mode 1 in the M558 command. See also DC42's web page on the IR sensor for more on setting up this probe.

RepRapPro 3-wire IR sensor (as shipped with Ormerod 1) ¶ 

Connect as shown in the RepRapPro Ormerod 1 wiring instructions, using the table above to translate between expansion connector pins and Z probe connector pins if necessary, and select mode 1.

RepRapPro 4-wire IR sensor (as shipped with Ormerod 2, Huxley Duo and Mendel) ¶ 

Connect as shown in the RepRapPro Ormerod 2/Huxley Duo/Mendel wiring instructions, using the table above to translate between expansion connector pins and Z probe connector pins if necessary, and select mode 2.

Force sensitive resistor(s) ¶ 

If not using JohnSL's trinket board: Connect the FSR(s) in parallel, between +3.3V and the IN pin of the Z-probe connector, and connect a potentiometer or fixed resistor between the IN pin and the GND pin. Select mode 1. Choose the value of the fixed resistor to give reliable triggering. With firmware 1.16 and later it is possible to connect the FSRs between IN and ground instead, and the fixed resistor between IN and +3.3V, if you use the I1 parameter in the M558 command.

If using JohnSL's trinket board: Connect its Vcc, Output and Ground pins to 3.3V, IN and GND on the Z-probe connector respectively and select mode 5.

Microswitch ¶ 

Connect it between the STP and GND pins of the E0 connector and select mode 4. If it is a normally-closed microswitch, then with version 1.15 or earlier firmware use M574 E0 S1 to select active high trigger level. For normally-open contacts (not recommended), send M574 E0 S0 instead. With 1.16 or later firmware, include parameter I1 in the M558 command if you are using a normally-open switch.

NPN output normally-open inductive or capacitive sensor ¶ 

Duet 2 Maestro, or revision 1.04 or later of Duet WiFi or Duet Ethernet: you can connect the output of the sensor directly to the Z-probe IN pin.

Other Duets: Connect the output wire of the sensor to the cathode of a diode, and the anode of the diode to the Z probe IN pin. The diode should preferably be a small-signal Schottky diode such as BAT43 or BAT85, but a small signal silicon diode such as 1N4148 works for some people.

All Duets: Connect the sensor ground wire to a ground pin on the Duet, and the sensor's + power wire to a suitable voltage (typically to VIN because these sensors usually need between 6 and 30V power).

Select mode 5 (P5) in the M558 command, also include parameter I1 in the M558 command.

PNP output normally-open inductive or capacitive sensor ¶ 

Duet 2 Maestro, or revision 1.04 or later of Duet WiFi or Duet Ethernet: you can connect the output of the sensor directly to the IN pin of the Z probe connector. You must also connect a pulldown resistor between IN and GND of the Z probe connector. 10Kohms is a suitable value.

Other Duets: Connect the sensor output wire to one end of a resistor (call this R1), and connect one end of another resistor (call this R2) to GND on the Z-probe connector. Connect the free ends of R1 and R2 together and to the IN pin of the Z-probe connector. The values of R1 and R2 should be chosen so that about +3V appears at their junction when triggered. If R2 is 10K, then suitable values of R1 are 30K if the sensor is powered from +12V, and 68K if it is powered from +24V.

All Duets: Connect the sensor ground wire to Duet ground, and the sensor's + power wire to a suitable voltage (typically to VIN because these sensors usually need between 6 and 30V).

Select mode 5 in the M558 command.

BLTouch ¶ 

These instructions are provisional. For more information, see this thread https://www.duet3d.com/forum/thread.php?....

BeTrue3d.dk Has a very detailed tutorial on using a BL touch, including how to setup bed leveling an bed compensation here:

https://betrue3d.dk/bltouch-on-duet-wifi...

If you don't have a DueX2 or DueX5 expansion board ¶ 

Connect the BLTouch as follows:

Duet ZProbe connector pinDuet expansion connector pinBLTouch pinColour
GNDGNDBlack
INOutWhite
+5V (pin 1)+5VRed
Heater3 (pin 8)ControlOrange
GND (pin 2)GNDBrown
Block Image

For all Duets except the Duet 2 Maestro:

If you have the older BLTouch, also connect the 240 ohm resistor between Probe GND and Probe IN. On the newer BLTouch, cut the PCB trace on the BLTouch to reduce the output to 3.3V as described in the BLTouch instructions.

The Z probe input on the Duet 2 Maestro is 30V tolerant, so it doesn't matter whether you reduce the output of the BLTouch to 3.3V or leave it at 5V.

Software setup ¶ 

1. In your software config.g file input the following G-Code commands to allow the setup to work:

M307 H3 A-1 C-1 D-1

M558 P9 H5 F100 T2000

G31 X0 Y0 Z0 P25

  • Important: mode 9 is supported in firmware 1.21 and later only. If you are using earlier firmware, replace P9 in the M558 command by P5.
  • In the G31 command the X and Y are the offset of the sensor in relation to the nozzle (so input your own) the number for Z is the trigger height (read on for this). This is the height that is obtained from reading the height the nozzle is from the bed when the sensor pin contacts the bed and retracts, P is the signal threshold.
  • Ensure in your config-override.g file (in the /sys folder of the SD card) does not contain an M307 H3 command that overrides the above configuration.
  • In the M280 commands (see below), you must invert the servo signal using “I1” in the M280 commands if you connect the BLTouch servo input to the expansion header pins, but not if you connect the BLTouch servo input to a Duex.

2. Create a deployprobe.g file (in the /sys folder of the SD card) it should contain the following single command:

M280 P3 S10 I1

3. Create a retractprobe.g file (in the /sys folder of the SD card) it should contain the following single command:

M280 P3 S90 I1

Commissioning & Testing ¶ 

To test the setup with the nozzle maybe a 100mm up from the bed you can check if the trigger signal is reaching the Duet by attempting to extend the pin by using the following command:

M280 P3 S10 I1

Then put the Sensor in to test mode by inputting the following command:

M280 P3 S120 I1

If all is well the web interface should report a value of ” 0” in the Z probe column when the pin is extended. You can then lightly touch the extended probe pin to check that the pin retracts, the value in the Z probe Column should change to “1000”

The BL Touch will continue to cycle deploy in the test mode, to end the test mode enter:

M280 P3 S160 I1

If all is good It is at this point that you can deploy the probe using the M280 P3 S10 I1 command and slowly lower the nozzle to the bed and find out your own Z trigger height, when the probe touches the bed and the pin retracts you can take a reading of the Z height and use that to input into the G31 command in the config.g file

If you do have a DueX2 or DueX5 expansion board ¶ 

First you need to allocate an unused heater expansion channel to reconfigure as the servo control for the BLTouch. For example, if the E3Heat output is unused, you can use heater 4 which corresponds to the PWM2 connector.

Connect the BLTouch as follows:

Duet ZProbe connector pinDueXn PWM connector pinBLTouch pinColour
GNDGNDBlack
INOutWhite
+5V+5VRed
PWMControlOrange
GNDGNDBrown

Put this command in your config.g file to disable the heater, where # is the heater number (this makes it available for use to control the BLTouch):

M307 H# A-1 C-1 D-1

Your deployprobe.g file (in the /sys folder of the SD card) should contain just this command:

M280 P# S10

Your retractprobe.g file (in the /sys folder of the SD card) should contain just this command:

M280 P# S90

In both cases ¶ 

Select probe type 9 (the P parameter in your M558 command) if you are using firmware 1.21 or later, and type 5 otherwise. Set the G31 P parameter to a low value, because the BLTouch produces only a short output pulse, which may be filtered out if you use a higher threshold.

12 Comments

Must invert the signal “i1” when using the pins and not the Duex to connect the BLTouch.

The test signal is S120 and not S60

Morten Nielsen - Reply

I was wondering why the test code wasn’t working for me

Vance Howard -

Thanks, I have updated the page

Tony -

Can we add in the new Mode 9 support for BLTouch?

Sean Moe - Reply

Just done that! - DC

David Crocker -

This comment is reall reall really misleading …. please update your text

It is required to invert the signal “I1” when using the expansion header pins and not the Duex to connect the BLTouch.

put WHICH command you need to apply the I1 to !!! I’m assuming that it is the M280.

But it causes confusion and wastes time forcing people to look up the GCODE commands to see which commands support that function, if you new to reprap this is confusing.

simon foley - Reply

You are right. I have clarified the text.

David Crocker -

Ouch! Wasted days on this …….. can you also update the documentation with this ?

Note there are two Z End stop Pins;

1. Z Stop (Normal)Probe

2. Molex Socket End Stop Pins on the dedicated Z Probe socket

you need to configure the end stops

M574 X1 Y1 Z0 S1 ; Set active high endstops and disable the normal Z Stop

M574 Z1 S2 ; Activate the Z probe endstop and set to normally high

If you leave the normal Z Stop to still active (and set to normally High) and dont specifically activate the Z Probe like ;

M574 X1 Y1 Z1 S1

your Z Axis will not budge because its open as there in no sensor in the normal Z Probe socket.

Its also easy to get the Z and S GCODE mixed up think that this will trigger the enabling of the Z End stop;

M574 X1 Y1 Z2 S1 ; its not Z2 you need a S2 on a separate line

simon foley - Reply

for some reason somebody decided that when I posted that there is some missing information in this post that it was removed as spam with no explanation. If people go out the way to help others avoid problems and fix mistakes people have made i think that is poor.

What I found missing here is the need to configure the end stops specifically for the probe to get it working;

e.g. for a CR10s with Normally High End stops at the low Position

M574 X1 Y1 Z0 S1 ; Set active high endstops (Z0 can be omitted)

M574 Z1 S2 ; Set z probe endstop

simon foley - Reply

You don’t need to do that if you use a G30 command to do the Z homing in your homez.g and homeall.g files, which is the recommended way. See Configuring RepRapFirmware for a Cartesian printer.

David Crocker -

I was wondering how I may deploy that microswitch with the Duet Wifi board. Is there a way to toggle a servo everytime auto bed levelling is called?

Tobias - Reply

Yes, put the appropriate commands in the deployprobe.g and retractprobe.g files.

David Crocker -

View Statistics:

Past 24 Hours: 54

Past 7 Days: 388

Past 30 Days: 1,889

All Time: 11,096