<br> [MAS.865](../index.html) > [Motion](../) > Stepper Motors ## Stepper Motors #### Open Loop Positioning --- #### Steppers are a high-pole count 'hybrid variable reluctance' motor. ![stepper](stepper-drawing.jpg) ![stepper](stepper-motor.gif) Stepper motor rotors are made up of two or four layers of iron, each with some number of small teeth. Magnets in between the layers polarize these layers into North South pairs. The stator's coil are then polarized in an alternating sequence (similar to brushless motors) in order to 'step' the rotor's teeth about, as they align to form lower reluctance flux paths with the energized coil teeth. For more fun, [watch this](https://www.youtube.com/watch?v=bkqoKWP4Oy4). Or, [shorter and more consice, but less fun](https://www.youtube.com/watch?v=u12dt1RqLW0). This is a great [guide from sparkfun](https://learn.sparkfun.com/tutorials/motors-and-selecting-the-right-one/stepper-motors---simply-precise) #### They are OK in terms of Power and Torque ![torque curve](torque-curve.jpg) While steppers tend to have similar torque densities as brushless motors at 0 speed, that torque tends to drop away drastically with speed. This is affected by the quality of your stepper control. Under a holding condition, steppers bleed a great deal of heat (coils are left energized at their maximum current). So, heat dissipation is often power-limiting. #### They can be reliably used for positioning Because stepper motors switch between known stable states, we can simply count the steps we've taken from some known starting point to keep track of our current position. This relies on the assumption that we've not ever driven the motor too aggressively. Motion controllers perform acceleration-limiting planning to avoid this condition. To increase positioning accuracy, many drivers offer 'microstepping' - which slowly varies the current between coils, to drive the rotor into stable positions between teeth. ![microstepping](microstepping.png) #### Typically driven with 'chopper drives' Most stepper drives use a technique called 'chopper driving.' A target current is set, and voltage is sent to the coil. The driver samples a current sensing circuit (or uses a comparator) and when the measured current crosses the target value, the voltage is turned off. After some time (while current decays) the process is repeated. This is a simple and effective way to control current! ![chopper](chopper.jpg) Drive circuitry is easy to build, requiring two Full H-Bridges and two current sensing circuits, but many people choose to use ICs that incorporate all of these circuits, and provide microstepping logic etc. ![chopper](chopper-schematic.jpg) #### Modern off-the-shelf drives offer stall detection Modern stepper drivers, like the [TMC2660](https://www.trinamic.com/products/integrated-circuits/details/tmc2660-pa/) (my favourite) or the [TMC2130](https://www.trinamic.com/products/integrated-circuits/details/tmc2130/) also available on a [breakout board](https://www.filastruder.com/products/silentstepstick-tmc2130-stepper-motor-driver) have features that detect stalls by measuring motor back EMF, and can intelligently control torque (to some degree). #### Working on: closed loop stepper drive While stepper motors' top speed (the limit to power density) is limited by their high inductance (takes a long time to switch poles on / off) some effort is being made to improve their control. Some more advanced methods for stepper control are becoming available, like: - [This Paper](ieee-advanced-step-control-2017.pdf) - [FOC for Steppers](ieee-foc-steppers.pdf) - [The Mechaduino](http://tropical-labs.com/index.php/mechaduino) - [Sam's Step Board](https://gitlab.cba.mit.edu/calischs/step/tree/master/servo-stepper) is work towards performing FOC-like control on a stepper. #### Typically Available: - [pololu](https://www.pololu.com/category/87/stepper-motors) - [stepperonline](https://www.omc-stepperonline.com/) #### Shameless Plug I'm working on a stepper driver that uses the TCM2660 and an AS5147D Encoder. That project is [here](https://gitlab.cba.mit.edu/jakeread/mkstepper) ![mkstepper schematic](schematic.png) ![mkstepper board](routed.png) It's on the bench at the moment: ![mkstepper fab](fabbed-v011.jpg)