<p>The rule of thumb when engineering things is add sensors for things that can change unexpectedly. If the changes can only occur through the user dismantling and rebuilding the device, sensors that detect that sort of changes are usually a waste of money.</p>
<p>Your print head position can change unexpectedly. Stepper skipping steps, something seizing up, someone moving the bed or print head while the printer is idle. Your bed and gantry dimensions won't change without you replacing the bed and the gantry, and possibly the frame. Never mind the printer won't know how far apart the two switches are, this still needs to be a config entry and changed with rebuilding the bed. There is virtually no precision benefit to having them on two ends. They are used in more heavyweight machinery like big CNC routers, to protect the machine from damaging itself by going past the unprotected end due to a software glitch. In 3D printers if that happens your print is already dead, and your printer will warble loudly but nothing will break (any worse than it already is).</p>
<p>On the other hand, dual switches on one end for dual drive devices are a pretty good idea. Say, the printer with two Z-axis motors and two Z screws - if the motors somehow get out of sync, the gantry will tilt, the nozzle will dig into the bed on one side, fly over the bed on the other, generally problems abound. Fixing this manually is quite a chore. Meanwhile an end switch for each side of the gantry, distance between their activation corresponding to how much out of level it is, can allow the printer to re-level its gantry all on its own. Similar problems occur for CoreXY bed motors, making the bed flat.</p>
<p>In short, start/stop switch won't improve distance precision, but a pair of start switches for one axis can improve the angle precision - how perpendicular the axis are.</p>

CC BY-SA 4.0
2023-12-20T18:34:00.597Z
Thank you. How about solely for the purposes of testing the reliability of steppers, detecting skipped steps? By measuring the (micro)steps a few times from start to end?
Bob Ortiz
CC BY-SA 4.0
2023-12-21T02:04:29.770Z
@BobOrtiz You'll be much better off with an optic encoder, providing the axis angle. Or a dedicated rig, not a part of the printer.
Some crazy good (and expensive) CNC machines use DC motors and encoders instead of steppers, but that's definitely overkill for 3D printers.
SF.
CC BY-SA 4.0
2023-12-20T14:04:34.627Z
2023-12-20T14:04:34.627Z
SF.
<p>First the questions in the body are addressed:</p>
<blockquote>
<p>I realised that there are three end-stop switches, one for each axis, X, Y, and Z. But this only helps to determine the start (0) position of each axis.</p>
</blockquote>
<p>No not necessarily, you could mount an endstop to the other end of the axis to determine the maximum value for that axis without the need for a start endstop, Marlin is already equipped with functionality for this:</p>
<pre><code>// Direction of endstops when homing; 1=MAX, -1=MIN
// :[-1,1]
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1
</code></pre>
<p>E.g. Ultimaker printers have their Z-endstop at the bottom, so the maximum value of the Z axis.</p>
<blockquote>
<p>Wouldn't doubling the end stops to six instead, two for each axis, one on each side, help to determine not only the start but also the end position?</p>
</blockquote>
<p>No, not necessarily, the end is fixed by the start position and the defined axis length (e.g. bed size of Z movement). It might be interesting to use a second endstop in case something goes wrong. E.g. layer shift as a result of the nozzle hitting something redefines the origin and could result in thinking the origin is somewhere on the build plate, adding the maximum bed sizes, the printhead could run into the end and destroy your printer, a second endstop, when triggered will stop the printer. I have used such an endstop on one of my printers, but I have never ran into problems with layer shifting and as such the endstop was never hit; I removed this endstop recently.</p>
<blockquote>
<p>Besides, to my understanding, the switches are called 'end stops' but are used as 'start stops' in this case</p>
</blockquote>
<p>The start is also an end of the axis, there are two ends on an axis.</p>
<blockquote>
<p>If each axis has an 'end stop' at the start and at the end, it can dynamically determine how many steps can be taken.</p>
</blockquote>
<p>No, steps are determined by your hardware (common hardware configuration for stepper motors is e.g. 200 steps per revolution or 400 or even more/less steps per revolution) together with the stepper driver which allows for substeps of the afore mentioned values.</p>
<blockquote>
<p>Moverover, wouldn't it prevent wrongly configured firmware (by means of a 'hard stop' where stepper motor are trying to move something moving beyond the physical possible axis potentially resulting in catastrophic damage?</p>
</blockquote>
<p>Yes it would, I already described that in case of layer shifting. But if you are bold enough to compile your own software you should known what you are doing and configure it correctly. Also test the printer before you use it and keep the powerswitch nearby.</p>
<p>Now to answer the main question,</p>
<blockquote>
<p>How could dual end-stop switches on each axis improve the functionality and precision of 3D printers like the Creality Ender 3 V2?</p>
</blockquote>
<p>The precision will not be improved by adding another endstop to the other side of the axis. However, the functionality can be improved by adding another endstop but this is mainly protecting the printer in case something went wrong, as in the printhead has changed its position relative to the origin, e.g. in case of layer shifting. Knowing that the Creality Ender 3 are printers on the cheap end with their shortcomings (see all the questions) this may prevent damaging the printer, but, generally the belt skips when the head is obstructed in X-Y range. For the Z direction this may be different as there are lead screws involved which can procude more force (but I have yet to see a layer shift in Z direction...).</p>

CC BY-SA 4.0
2024-01-03T13:12:02.593Z
2024-01-03T19:26:17.000Z
2024-01-03T19:26:17.000Z
0scar
<p>Looking at a bare Creality Ender 3 V2, I realised that there are three end-stop switches, one for each axis, X, Y, and Z. But this only helps to determine the start (0) position of each axis. Wouldn't doubling the end stops to six instead, two for each axis, one on each side, help to determine not only the start but also the end position? (Besides, to my understanding, the switches are called 'end stops' but are used as 'start stops' in this case.)</p>
<p>If each axis has an 'end stop' at the start <strong>and</strong> at the end, it can dynamically determine how many steps can be taken. Isn't this more elegant and adaptable than using fixed sizes? Also, since end-stop switches are simple and cheap, why don't all printers use them? I think it could also help in <strong>precision calibration</strong> and still stay operational when hardware tweaks are made without firmware changes.</p>
<p>Moverover, wouldn't it prevent wrongly configured firmware (by means of a 'hard stop' where stepper motor are trying to move something moving beyond the physical possible axis potentially resulting in catastrophic damage?</p>

<firmware><calibration><endstop><hardware><sensors>
How could dual end-stop switches on each axis improve the functionality and precision of 3D printers like the Creality Ender 3 V2?
Bob Ortiz
# How could dual end-stop switches on each axis improve the functionality and precision of 3D printers like the Creality Ender 3 V2?

(Asked by: username_0 on 2023-12-18)

Looking at a bare Creality Ender 3 V2, I realised that there are three end-stop switches, one for each axis, X, Y, and Z. But this only helps to determine the start (0) position of each axis. Wouldn't doubling the end stops to six instead, two for each axis, one on each side, help to determine not only the start but also the end position? (Besides, to my understanding, the switches are called 'end stops' but are used as 'start stops' in this case.)

If each axis has an 'end stop' at the start **and** at the end, it can dynamically determine how many steps can be taken. Isn't this more elegant and adaptable than using fixed sizes? Also, since end-stop switches are simple and cheap, why don't all printers use them? I think it could also help in **precision calibration** and still stay operational when hardware tweaks are made without firmware changes.

Moverover, wouldn't it prevent wrongly configured firmware (by means of a 'hard stop' where stepper motor are trying to move something moving beyond the physical possible axis potentially resulting in catastrophic damage?

**Tags:** firmware, calibration, endstop, hardware, sensors


---

## 2 answers

### Answer by username_2 on 2024-01-03. Score: 2 | Accepted answer

First the questions in the body are addressed:

> I realised that there are three end-stop switches, one for each axis, X, Y, and Z. But this only helps to determine the start (0) position of each axis.

No not necessarily, you could mount an endstop to the other end of the axis to determine the maximum value for that axis without the need for a start endstop, Marlin is already equipped with functionality for this:

```
// Direction of endstops when homing; 1=MAX, -1=MIN
// :[-1,1]
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1

```

E.g. Ultimaker printers have their Z-endstop at the bottom, so the maximum value of the Z axis.

> Wouldn't doubling the end stops to six instead, two for each axis, one on each side, help to determine not only the start but also the end position?

No, not necessarily, the end is fixed by the start position and the defined axis length (e.g. bed size of Z movement). It might be interesting to use a second endstop in case something goes wrong. E.g. layer shift as a result of the nozzle hitting something redefines the origin and could result in thinking the origin is somewhere on the build plate, adding the maximum bed sizes, the printhead could run into the end and destroy your printer, a second endstop, when triggered will stop the printer. I have used such an endstop on one of my printers, but I have never ran into problems with layer shifting and as such the endstop was never hit; I removed this endstop recently.

> Besides, to my understanding, the switches are called 'end stops' but are used as 'start stops' in this case

The start is also an end of the axis, there are two ends on an axis.

> If each axis has an 'end stop' at the start and at the end, it can dynamically determine how many steps can be taken.

No, steps are determined by your hardware (common hardware configuration for stepper motors is e.g. 200 steps per revolution or 400 or even more/less steps per revolution) together with the stepper driver which allows for substeps of the afore mentioned values.

> Moverover, wouldn't it prevent wrongly configured firmware (by means of a 'hard stop' where stepper motor are trying to move something moving beyond the physical possible axis potentially resulting in catastrophic damage?

Yes it would, I already described that in case of layer shifting. But if you are bold enough to compile your own software you should known what you are doing and configure it correctly. Also test the printer before you use it and keep the powerswitch nearby.

Now to answer the main question,

> How could dual end-stop switches on each axis improve the functionality and precision of 3D printers like the Creality Ender 3 V2?

The precision will not be improved by adding another endstop to the other side of the axis. However, the functionality can be improved by adding another endstop but this is mainly protecting the printer in case something went wrong, as in the printhead has changed its position relative to the origin, e.g. in case of layer shifting. Knowing that the Creality Ender 3 are printers on the cheap end with their shortcomings (see all the questions) this may prevent damaging the printer, but, generally the belt skips when the head is obstructed in X-Y range. For the Z direction this may be different as there are lead screws involved which can procude more force (but I have yet to see a layer shift in Z direction...).


---

### Answer by username_1 on 2023-12-20. Score: 1

The rule of thumb when engineering things is add sensors for things that can change unexpectedly. If the changes can only occur through the user dismantling and rebuilding the device, sensors that detect that sort of changes are usually a waste of money.

Your print head position can change unexpectedly. Stepper skipping steps, something seizing up, someone moving the bed or print head while the printer is idle. Your bed and gantry dimensions won't change without you replacing the bed and the gantry, and possibly the frame. Never mind the printer won't know how far apart the two switches are, this still needs to be a config entry and changed with rebuilding the bed. There is virtually no precision benefit to having them on two ends. They are used in more heavyweight machinery like big CNC routers, to protect the machine from damaging itself by going past the unprotected end due to a software glitch. In 3D printers if that happens your print is already dead, and your printer will warble loudly but nothing will break (any worse than it already is).

On the other hand, dual switches on one end for dual drive devices are a pretty good idea. Say, the printer with two Z-axis motors and two Z screws - if the motors somehow get out of sync, the gantry will tilt, the nozzle will dig into the bed on one side, fly over the bed on the other, generally problems abound. Fixing this manually is quite a chore. Meanwhile an end switch for each side of the gantry, distance between their activation corresponding to how much out of level it is, can allow the printer to re-level its gantry all on its own. Similar problems occur for CoreXY bed motors, making the bed flat.

In short, start/stop switch won't improve distance precision, but a pair of start switches for one axis can improve the angle precision - how perpendicular the axis are.

> **Comments:**
> **username_0**: Thank you. How about solely for the purposes of testing the reliability of steppers, detecting skipped steps? By measuring the (micro)steps a few times from start to end?  
> **username_1**: @username_0 You'll be much better off with an optic encoder, providing the axis angle. Or a dedicated rig, not a part of the printer. Some crazy good (and expensive) CNC machines use DC motors and encoders instead of steppers, but that's definitely overkill for 3D printers.  

---

