Mechanical Endstop

From RepRap
Revision as of 20:33, 31 March 2021 by Ctkjose (talk | contribs) (Common implementations)
Jump to: navigation, search
Mechanical Endstop

Vitamin

No image available.png
 
Wikipedia none

A mechanical endstop is the simplest type of endstop: a simple mechanical switch positioned to trigger when a RepRap's axis reaches the end of its motion.

Overview

Mechanical switches are less complicated to implement and cheaper than optical endstops because they do not require a circuit board and only use 2 wires for connecting the switch. Pull up and down resistors can be put close to the main board. You can use contact switches and contact-less (usually magnetically actuated) mechanical switches. Contact-less magnetic switches are called reed switches. They are proximity switches that close (or switch over) if a magnet comes close enough (usually 1mm or less) and open if the magnet moves away. Reed switches are used as sensors in home alarm systems to detect open windows and doors.

How to wire a mechanical switch to replace an optical endstop.

Reasons to use a mechanical switch

  • Switches are the cheapest endstops in most cases.
  • No need for opto pcb.
  • Simple switches can be used on x and y axis.
  • You could even make your own contact switch from a few pieces of metal.
  • You get to solder stuff.

Limitations of mechanical switches

  • Switches have a limited number of on/off cycles. However, most purpose built micro-switches are rated for well over 1,000,000 cycles and will last years.
  • Needs new way to mount switch, which will depend on the switch type.
  • The repeatability of the switch is very important for the z axis, and not all switches will work.

Original basic design of an endstop using a limit switch

(This section is originally from 2011, see the section Common Implementations for a more current discussion on endstops.)

The basic design of an endstop uses a lever switch to detect when an axis has reached a minimum or maximum bound. The basic operation of these endstops is to set the logical state of a pin in the Arduino (or other controller board) to indicate when the bound was reached.

The pin is kept LOW to indicate that everything is fine and raised to HIGH when the lever is pressed. The lever switch or "limit switch" has a common contact (frequently labeled as C on the switch) that is either in an open state or a close state.

Mechanical endstop wiring.png

Eagle 5.10.0 light schematic: File:Mechanical endstop wiring schematic.sch


Microswitch.png

The common pin on the switch is attached to an IO pin in the controller. That input to the microcontroller is called the "signal" pin and is commonly labeled as "S". The NC (Normally Closed) is a pin in the switch that is touching the common whenever the switch is open. The NC (Normally Closed) contact is tied to ""GND" and thus the Common pin is put in the default LOW state.


When the switch is triggered, the ground connection is cut and the signal is connected to 5v through the pull up resistor, thus indicating to the microcontroller that a bound was reached.

Make sure you keep the wires away from the motor leads and / or used screened cable as it is easy to pick up enough noise to get false triggering. [1]

Note: if you use Teacup or Sprinter firmware, then resistor R1 and the connection to 5V are obsolete. The Arduino ATmega has internal pullup resistors which can be turned on in the firmware using the USE_INTERNAL_PULLUPS flag in config.h for Teacup firmware or ENDSTOPPULLUPS in configuration.h for Sprinter and Marlin firmware. Using the internal pullup resistors eliminates the need for external resistors, which simplifies the wiring. If internal pullup resistors are used the switch can simply be connected to the signal and ground pins. Reportedly sometimes the internal pullup resistors have a large tolerance which can in rare cases cause issues. If you are having problems first double check that your wiring is correct and confirm that your firmware is configured correctly before deciding you may have bad internal pullup resistors.

Update a decade after...

New designs still use resistors but in a [RC] ("resistor capacitor circuit") to reduce electrical noise in the io pin of the microcontroller.

Firmwares like [Marlin] implement mitigation strategies in the software to reduce the effect of electrical noise. For many this is good enough and can live with basic endstop implementations. Is known that electrical noise can cause issues with homing and arbitrary print error.

Common implementations

(Updated 31/MARCH/2021)

Over the years with the availability of clone printers and many budget options the popularity of some type of printer in particular Ender/CR type of printers has push the availability and design of endstops towards the ones used by these popular printers.

Reprap sample endstops mech circa 2020.png

Todays designs are characterized by the addition of leds to visualize the state of the endstop and the use of an RC (resistor-capacitator) circuit to reduce/limit signal noise (Electromagnetic Interference [EMI])) generated by the switches.

The Makerbot design with a led and the RC circuit is today the defacto implementation for mechanical endstops using limit switches.

Reprap endstops designs mech.png

The RC circuit forms a simple [low-pass filter] that blocks high frequencies.

The affordability of new endstops with boards and RC circuits makes it quite easy to take advantage of these little design improvements.

A basic 2-wire design (with/without pull-up resistors) are still common in particular since new microcontrollers and boards provide a fair level of protection in their I/O pins (eg pull-up resistors, etc), we also see it in popular designs from Prusa and others.


MechSwitches 2Wire.JPG

How to wire a mechanical switch to replace an optical endstop?

NOTE: Old content for the replacement of optical endstop switches used in the Generation_3_Electronics/Tech_Zone_Remix designs.

Opto Endstop v1.0, v2.1 and Tech Zone Remix

How to replace Opto Endstop v1.0, Opto Endstop v2.1 and Tech Zone Remix Endstop which share the same basic design.

Note the Tech Zone Remix Endstops are working the opposite way (normally closed) as the insctructions below, so you need to change either your firmware or the wiring of the switch to compensate.

Interface

Copied from Opto Endstop v1.0#Interface

Pin Function
+5 This is the pin to supply +5 volts on.
S This is the signal pin. It will output high (+5) if it is triggered, or low (0v) if it is clear
G This is the ground pin.

Switch requirements

You want a normally closed (NC) switch. Meaning you need a switch which connects two poles when not triggered. (A single pole double throw (SPDT) switch will work, if you wire up to the NC side of the switch -- ignore the NO pin). Read more at wikipedia.

"what happens if it's unplugged or my pet rabbit chews through the cable?" Design it such that when it's unplugged, it registers as "at the end" rather than "keep going". [2]

For the z axis, high resolution (aka short trigger distance) and high repeatability is needed.

The x and y axis resolution is not that important, unless you home the machine during a print. But you are of course encouraged to use a high quality switch if you can, as it certainly won't hurt.

Switch wiring

Mechanical endstop wiring.png

Eagle 5.10.0 light schematic: File:Mechanical endstop wiring schematic.sch

When the switch is off (like in the schematic above), it connects signal to ground. When the switch is triggered, the ground connection is cut and the signal is connected to 5v through the pull up resistor.

Make sure you keep the wires away from the motor leads and / or used screened cable as it is easy to pick up enough noise to get false triggering. [3]

Note: if you use Teacup or Sprinter firmware, then resistor R1 and the connection to 5V are obsolete. The Arduino ATmega has internal pullup resistors which can be turned on in the firmware using the USE_INTERNAL_PULLUPS flag in config.h for Teacup firmware or ENDSTOPPULLUPS in configuration.h for Sprinter and Marlin firmware. Using the internal pullup resistors eliminates the need for external resistors, which simplifies the wiring. If internal pullup resistors are used the switch can simply be connected to the signal and ground pins. Reportedly sometimes the internal pullup resistors have a large tolerance which can in rare cases cause issues. If you are having problems first double check that your wiring is correct and confirm that your firmware is configured correctly before deciding you may have bad internal pullup resistors.

Optional LED

If you want an indicator, you can hook up a LED (and a matching resistor).

Generation 6 endstops

...


Switch mounting

You need a way to mount the switch on the printer. Feel free to share your solutions and designs here. Modular design encouraged to fit different switches.

Mendel

X axis

The endstop holder from Prusa Mendel works fine. Take care to solder the wires pointing up, to place the holder as far out as possible, and this maximize the build space.

The way the wires are soldered here takes up a bit of space

Y axis

...

Z axis

Needs to sit very securely, but still be easy adjustable in small increments. The endstop holder from Prusa Mendel works fine. To simplify design, I suggest a very solid mount even if it is very hard to adjust. It is often easier to set the location of the endstop in firmware than it is to try and move the actual switch around .01 mm at a time!

Would probably be a good idea to attach the switch in two places

External links