Go Down

Topic: Stepper Motor Basics (Read 191869 times) previous topic - next topic

Robin2

Dec 10, 2014, 09:46 pm Last Edit: Feb 17, 2015, 05:03 pm by Robin2
Introduction
===========
I find myself repeatedly typing similar replies to similar questions about the basics of stepper motors and I thought it would be useful to write this note as it will be a little more comprehensive than any individual reply.

The information is presented under several different headings and there is quite a bit of overlap and cross-referencing of ideas so I suggest that you should read all of the note at least once. I think it would be possible to miss some important info if you only read the bit that immediately interests you.

Throughout this note I have referenced Pololu products. I have no connection with the company apart from being a satisfied user of their A4988 stepper driver boards.

This note is intended to provide guidance for the Arduino user who is new to stepper motors. It is not intended to be an expert dissertation on the subject.

Please be aware that this text continues into the next Post

Types of stepper motor
======================
Broadly speaking there are two types of stepper motor - unipolar and bipolar.

Bipolar motors have 4 wires connecting to the two separate coils inside the motor - one pair for each coil.

There are also two types of unipolar motor - those with 5 wires and those with 6 wires.

The 6-wire motors can also be referred to as hybrid motors. They are similar to the 4-wire bipolar motors and just have an extra wire connected to the centre of each of the coils. If you want to use a 6-wire motor in bipolar mode just ignore the wires that connect to the centres of the coils.

The 5-wire motors cannot be driven by a driver designed for a bipolar motor. An example of a 5-wire motor is the small 28BYJ-48 motor which can be seen in many Arduino projects and usually uses a ULN2003 chip as its driver.

This note only relates to bipolar motors and does NOT apply to 5-wire motors or the ULN2003 driver.


Motor Specifications
====================
Datasheets normally quote the coil current, coil resistance, nominal voltage and holding torque and steps per revolution. For example, for this motor the values are 1 Amp, 2.7 Ohms, 2.7volts, 1.4Kg-cm and 200 steps/rev.

The nominal voltage is irrelevant for all practical purposes. The important figure is the rated current.

The rated current is normally the current per-coil and when currents are quoted for stepper motor driver boards that is normally also a per-coil figure.

The holding torque is the torque available to resist rotation while the motor is stationary. The available torque will decline as speed increases.

Some manufactures provide graphs showing how the torque varies with speed.


Operating Voltage
=================
Stepper motors are very different from regular DC motors.

With a DC motor you control the current in order to control the speed of the motor. The usual way to control the current is to vary the voltage - perhaps using the Arduino analogWrite() function to control a Pulse Width Modulated power supply to the motor.

Stepper motors pretty much draw their full current all the time, even when they are stationary - that is how they resist being moved from their present position. This means they are very inefficient.

For all practical purposes the nominal voltage of a stepper motor is irrelevant. It is the voltage which would drive the rated current through the coil when the motor is stationary based on Ohms law e.g. 2.7v = 1A * 2.7 Ohms. However, as soon as the motor starts moving the combination of the inductance of the coils and the back-emf generated by the movement will prevent the nominal voltage from producing the rated current.

For this reason stepper motors are normally driven with a much higher voltage. This, in turn, means that a specialized stepper motor driver board is needed which can limit the current to whatever the motor can take. If the current is not limited the high voltage would quickly destroy the motor.


Stepper Motor Driver Boards
===========================
These are specialized components designed to control stepper motors conveniently and efficiently. The Pololu A4988 is a typical example that is often used with Arduinos.

Generally speaking specialized stepper motor driver boards only require two connections (plus GND) to the Arduino for step and direction signals.

Normally specialized stepper motor driver boards have the ability to limit the current in the motor which allows them to drive the motor with a high voltage (up to 35v for the Pololu A4988) for better high speed performance.

And they all usually have the ability to do microstepping. The Pololu A4988 can do 1/2, 1/4, 1/8 and 1/16 microsteps. It defaults to full steps. I believe the BigEasydriver which uses the same A4988 chip defaults to 1/16 microstepping mode.


H-bridge driver - e.g. LN298
============================
These can be made to control a stepper motor but they are a very poor choice - mainly because they have no method for limiting the current and therefore cannot use high voltages. They are also more trouble to connect to an Arduino (they require more pins) and more trouble to control with an Arduino (more calculations for the Arduino to do).


Choosing a motor and motor driver
=================================
First choose the motor

The important specification is the torque of the motor. Generally speaking the holding torque is quoted. For the motor I linked to above it is 1.4Kg-cm. The available useful torque will decline as the speed increases and at no-load maximum speed it will be zero. Some (probably the more expensive) motor manufactures provide graphs showing how the torque varies with speed.

To figure out what motor you need you will have to measure or estimate the torque required. It would be a good idea to choose a motor with a good margin of surplus torque.

It is not too difficult to make a rough measurement of the torque required but it is beyond the scope of this note.
Edit 17 Feb 2015    See Reply #29 for a suggestion

Then choose the stepper motor driver

When you have selected a motor and know what current it requires you can choose a stepper motor driver that can comfortably supply the required current.

You should be aware that the economical single-chip stepper drivers (such as the A4988 and the DRV8825) can only supply about 2 amps. If your motor requires more than that, you will need to get one of the more expensive commercial stepper drivers. However the working principle will be practically identical to the A4988.


NEMA 17 and 23
==============
These standards only define the size of the front face of the motor and the location and size of the mounting screw holes. They say nothing about the power of the motor. The 17 is an abbreviation of 1.7 inches.

...... continued in next Post

...R

Two or three hours spent thinking and reading documentation solves most programming problems.

Robin2

#1
Dec 10, 2014, 09:47 pm Last Edit: Jan 01, 2015, 10:11 pm by Robin2
continued from previous Post ....

Microsteps
==========
Most (but certainly not all) stepper motors do 200 full steps per revolution. By appropriately managing the current in the coils it is possible to make the motor move in smaller steps. The Pololu A4988 can make the motor move in 1/16th steps - or 3,200 steps per revolution.

The main advantage of microstepping is to reduce the roughness of the motion. The only fully accurate positions are the full-step positions. The motor will not be able to hold a stationary position at one of the intermediate positions with the same position accuracy or with the same holding torque as at the full step positions.

Generally speaking when high speeds are required full steps should be used.

It is possible with most drivers including the Pololu A4988 to use the Arduino program to change the microstep setting. This would require additional connections between the driver and the Arduino.


Stepper Motor Speed
===================
By comparison with regular DC motors stepper motors are very slow devices.

Typical speeds might be 1000 to 4000 steps per second and for a 200 step motor that would represent 5 to 20 rps (300 to 1200 rpm).

Generally speaking the motors with low coil resistance and high currents (and low nominal voltages) will be most suitable for higher speeds. A high voltage will also be needed for high speed.


Acceleration
============
If the stepper motor is required to move a heavy load it will normally be necessary to start the movement slowly (as with any motor) and accelerate to the desired speed and, equally, to decelerate when it is necessary to stop.

This is quite different from a DC motor which will accelerate and decelerate automatically.

If you try to start or stop a stepper motor too quickly it will simply skip steps with no damage to motor. However The Arduino has no means to know whether or how many steps have been missed and all of the position control will be lost.

For this reason, in particular, it is essential to choose a motor with sufficient torque for the job and to use acceleration and deceleration when necessary.


Position Feedback
=================
Stepper motors do not have the ability to tell the Arduino what position they are at, nor do they have the ability (like a servo) to go to a particular position. All they can do is move N steps from where they are now.

If it is essential to have position feedback a rotary encoder can be attached to the motor shaft - but that is beyond the scope of this essay.


Initial Position
================
When it starts up the Arduino has no means of knowing where the stepper motor is positioned - for example somebody might have moved it manually when the power was off.

The usual way to establish a datum for counting steps is with a limit switch. At startup the Arduino will move the motor until it triggers the switch. The Arduino will then regard that step position as step zero for the purpose of future position keeping.


Arduino Libraries
=================
When using an Arduino with a specialized stepper motor driver board such as the Pololu A4988 there is little to be gained from using an Arduino library unless you need the acceleration feature of the AccelStepper library.


Demonstration Arduino code
==========================
The code in my simple stepper demo is intended as a first step to getting your motor working. It also shows how easy it is to control a motor without a library when a specialized stepper motor driver such as the Pololu A4988 i8s used.


Wiring connections for a stepper motor
======================================
The code in my simple stepper demo assumes that the motor is connected as shown in the wiring diagrams on the Pololu A4988 web page.


Arduino Pulse Width Modulation (PWM)
====================================
Arduino PWM using analogWrite() has nothing to do with controlling stepper motors. To control a stepper motor though a specialized stepper motor driver the Arduino just needs to provide step and direction signals using digitalWrite().

PWM may be used within the stepper motor driver to limit the current in the motor coils but this process is invisible to the Arduino user.

....END

...R

Edit 01 Jan 2014 to change "proper" to "specialized"
Two or three hours spent thinking and reading documentation solves most programming problems.

daniellyall

#2
Dec 11, 2014, 11:37 am Last Edit: Dec 11, 2014, 11:38 am by daniellyall
bang on

good start for nobs

Cactusface

Hi Robin,
               Thanks that was very useful! I have had a little play with some old salveged steppers (EX printer, etc) and hope one day to build a bot using them for accurate movement and perhaps drawing, etc or as I suggested to someone the other day a Pantagraph? or drawing machine!!  I have used the good old ULN28003, but the new A4988 type of modules make it a lot easier with only two signals STEP & DIR. Fixing wheels on a 5mm shaft can be tricky....

Regards

Mel.
Open your mind! But not too far, your brains might fall out.
Also like Photography, model building and my 300+ Cacti and Succs.

dave-in-nj

"The nominal voltage is irrelevant for all practical purposes. The important figure is the rated current. "


I disagree with this statement.  the manufacture offers data for the end user to use for calculations.  this statement is akin to saying that resistor wattage is irrelevant for all practical purposes in data circuits.


the stepper motor is a coil, the coil has inductance.  what you can do with a coil is very much based on manufacture. ergo the manufacture offers test data.  the motor power supply calculation requires you know the motor voltage, then allows for the inductive reactance.  


a motor has two major causes of heating, copper losses and iron losses.  copper losses are from power flowing through the motor.  iron losses are from the eddy currents and hysteresis heating.  


every motor has a maximum voltage rating.  it is a disservice to dismiss a part of the calculations without describing why.


I offer white papers from a stepper motor designer.  probably one of the foremost authorities on stepper motors.  


You would do well to read and understand how a stepper motor uses voltage and power and why they are so important to understand, especially if you want to post as a source of teaching for others.


http://www.geckodrive.com/app-notes.html



he has a simple writing style and except for a few spelling errors (ration instead of ratio) he is very readable.



JimFlounders


Robin2

every motor has a maximum voltage rating.  it is a disservice to dismiss a part of the calculations without describing why.
I make no apology for keeping my material simple. And I did say "for all practical purposes" - meaning for all practical purposes for the people for whom the note is written.

The important point is that when the datasheet says 2.7v it does not mean that is the maximum you can use, nor even that it is close to ideal.

If you can give me one or two sentences that will enhance the text without confusing newcomers I will certainly consider including them. That is the purpose of asking for comments.

...R
Two or three hours spent thinking and reading documentation solves most programming problems.

nilton61

What is of interest in motor voltage is that it leads to a maximum value of the power supply
Quote
32 * VL = VMAX
The reason for this is iron losses (eddy currents) heating up the motor. But, this is almost academical since most stepper motors i encountered have motor voltages over 1,5V and supplies over 45V are seldom used. Also most drivers set the upper voltage limit at 35V which is safe for almost all motors.

Ecellent text, and really needed. What could be added is that power supplies should be unregulated with a filter/reservoir capacitor with a value of:
Quote
(80,000 * I) / V = C(uF)

Robin2

Ecellent text, and really needed. What could be added is that power supplies should be unregulated with a filter/reservoir capacitor with a value of:
Thank you (and everyone else) for the kind words.

I have noted your very useful views about power supplies elsewhere but I don't feel competent to write a text about it myself. Perhaps you could find the time to write a few sentences which can either stand here as a separate post or I might incorporate it into my text.

My own experience is that a computer power supply (18v or so) and a large 12v lead-acid battery work fine. I haven't tried an unregulated supply myself to see if it would be better.

And I don't want to discourage or prevent newcomers from using a satisfactory power supply that they happen to have, even if it is sub-optimal.

...R
Two or three hours spent thinking and reading documentation solves most programming problems.

nilton61

#9
Dec 11, 2014, 07:36 pm Last Edit: Dec 11, 2014, 07:37 pm by nilton61
The reason for advocating unregulated supplies is that regulated ones more often than not have quite small reservoir/filter caps. This has two negative effects
  • The small caps cannot absorb the returning energy when deaccelarating
  • The very transient currents can interfere with the voltage regulator

So the main issue is having large enough caps which should be stated.

Robin2

So the main issue is having large enough caps which should be stated.
I've been thinking some more about the possibility of a text about power supplies and the problem is that I keep running into more questions which leads me to think that it needs an entire Thread of its own.

For example does the piece I have quoted mean that it is a good idea to attach a very large capacitor to a regulated power supply as well as to an unregulated supply?

And, to confirm my understanding, I have 3 motors that each have a coil current of 0.33 A. That would mean 0.99A for all  3 - say 1.5A to give a margin. And, supposing they are powered at 20v your formula would be
     80,000 * 1.5  / 20 which gives a capacitor value of 6,000 microFarads.

And without intending the least disrespect to your knowledge I have not yet got any sense of how much difference it would make to have an unregulated rather than a regulated power supply with the same voltage assuming both can deliver enough amps.

...R
Two or three hours spent thinking and reading documentation solves most programming problems.

daniellyall

#11
Dec 12, 2014, 12:45 am Last Edit: Dec 12, 2014, 04:39 am by daniellyall
just a note on my router I have 1400w 16 amp 80vdc power supply's the motors don't get hot at all I can push them to 150vdc then they will get hot.

having a decent stepper driver takes care of its motors.

robin it would be a good idea to add in the steeps need to work out what size stepper a person would need to get

Robin2

robin it would be a good idea to add in the steeps need to work out what size stepper a person would need to get
I thought about that. But it can get very complex - especially if you try to keep it simple. So much depends on the reader's level of knowledge. That's why I just left it at "To figure out what motor you need you will have to measure or estimate the torque required ..... It is not too difficult to make a rough measurement of the torque required but it is beyond the scope of this note.".

If you have time to submit a suggested text I would really appreciate it.


...R
Two or three hours spent thinking and reading documentation solves most programming problems.

dave-in-nj

just a note on my router I have 1400w 16 amp 80vdc power supply's the motors don't get hot at all I can push them to 150vdc then they will get hot.

having a decent stepper driver takes care of its motors.

robin it would be a good idea to add in the steeps need to work out what size stepper a person would need to get
I believe that the purpose of this thread is to hand-hold a newbie and get them past the common problems.  As Robin2 stated, this thread addresses the repeated problems newbies encounter.
It is a superficial introduction, touching only on the needed parts, but considering the limited space and the capacity of the newbie to grasp the concepts, it is at exactly the right level.  a good idea and pretty well executed.


dave-in-nj

And without intending the least disrespect to your knowledge I have not yet got any sense of how much difference it would make to have an unregulated rather than a regulated power supply with the same voltage assuming both can deliver enough amps.

...R

I believe the whole concept of this thread is to get the NEWBIE to connect a stepper and make it move.
that said, almost any power supply will work for this purpose.  and old brick that has the current, an old PC power supply. whatever.   I am content on building my own, but IMHO building a power supply is about 5 steps down the road, and does not belong at this level.
suffice it to say that to get started, a power supply that has enough current should be good enough to use to get the motors moving and it is is an old PC power supply with 12 volts or one from an old laptop, it does not matter in order to get that motor spinning.  once you have gotten the motor to spin and step forward and back and things look good, it would be desirable to try to improve the performance by either building or buying a power supply that is selected for the application.
as a note, the back EMF being delivered to the power supply from coil-A will be immediately send to coil-B and not stored.  for that reason, the regulated power supply will often work fine.  in addition, many regulated power supplies are designed to handle the higher voltage.  lastly, I sincerely believe that AT THIS LEVEL, no newbie will be running high power, high current motors under a load with sufficient deceleration as to create enough back EMF to be of any concern.

Go Up