This is a very insightful thread and discussion. Thank you!
When do you choose to use a servo over a stepper (micro stepped and full step) for an application (please add comments and/or corrections)?
Steppers: 50-100 pole design
- Low cost
- High torque at low speeds and holding torque
- More torque density, smaller motor footprint for same power (Watt) size
- Can handle higher inertia mis-match ratios up to 30x + (inertia load/inertia of motor - assume directly coupled, not taking gearing or belt reduction into consideration). Servos start to get unstable at 10 - 20x range
- Requires more current to operate so run hotter in constant current mode (open loop)
- Slower acceleration due to pole design
- Noisier than servos
- More "cogging" than servos due to design
- Resolution: as good as 8000 cnts/rev encoder even with micro stepping
- Speeds limited, typically up to 2000 RPMs before torque is useless
Servos, 4-12 pole design
- High speed, high torque (up to 10,000 RPMs)
- Applications requiring high dynamic response
- Can synchronize multiple motors and do coordinated motion up to 4 axes typically
- Offers encoder resolutions up to 18 bit (262,144 counts/rev) and sometimes 20 bit.
- Typically more accuracy since encoders are within +/- 1 count with properly tuned systems
- Provides enough current to move or hold a load
- Other current algorithms are possible including learning machine vibrations and self compensating
- Overkill for simple motion and applications that require lower speed (1000 RPMs)
OK, there are a bunch of misconceptions on this topic and they start with how microstepping versus torque is defined.
A step motor only generates restoring torque when the motor shaft is displaced from its rest position. You leave the motor alone, it sits perfectly at its rest position but generates no torque. Why? Because it's sitting where it should be.
You apply some torque to the stopped motor. It moves from its rest position a little and it develops some torque to move it back to that position once you leave it alone. You apply even greater torque and it moves the motor further from its rest position. It generates even greater torque to get back to where it was before no one bothered it.
The motor acts like a torsional spring. Give it a little twist and the spring moves a little; give it a big twist and it moves more. Let go and it returns to where it was.
Unlike a spring, a step motor has a limit how hard you can twist it. The limit is the motor's holding torque. Holding torque is reached when you twist the motor 1.8 degrees off of its rest position.
This is where the misconceptions come into play. Twist the motor at 10% of its holding torque and you will move the motor 1/10 of a full step. Twist the motor at 1% of its holding torque and you will move the motor 1/100 of a full step.
Does that mean the motor has only 10% or or 1% of its original holding torque? No; it's still the same as before. All it means is the motor's displacement angle is a function of the percentage of holding torque applied to the motor.
Your table of torque versus microstep resolution is somewhat misinterpreted. Holding torque is defined as the torque a motor exerts when its shaft is displaced +/- 1.8 degrees from its rest position.
The relationship between a stopped motor's torque versus its shaft angle is sinusoidal over the span of 1 full step and your table reflects this relationship.
Let's say you have a stopped 300 in-oz (about 2.1 Nm) motor. You apply a torque load that displaces the shaft 1/10 of a step (0.18 degrees) from its unloaded rest position. The applied torque equals 300 in-oz times sine (90 / 10) or 47 in-oz (1/3 Nm).
This is different than holding torque. Remove the 47 in-oz load and the motor returns to its original rest position. Exceed the 300 oz-in holding torque of the motor and it will jump to an adjacent pole location 7.2 degrees (4 full steps) away. It will not return to the original location when the load is removed.
What this means practically is the motor will always be 0.18 degrees behind where you think it is with a continuous 47 in-oz load and it will be 1.8 degrees behind if you apply a continuous 300 in-oz load. Exactly the same numbers apply for a full-step drive as well. Remove the load and the motor will spring to the zero error location whether it's being microstepped or full-stepped.
Things get more interesting at higher speeds. The motor's inductance introduces a 90 degree phase lag in winding current versus driving voltage. This results in an unloaded motor being 1.8 degrees behind where you think it is at higher speeds and 3.6 degrees behind when it's loaded to just short of stalling. This behavior is drive-independent and the error is "reeled-in" when the motor slows down again.
The situation that you described for current vs voltage waveform, is not valid if the motor drive controls directly the current in the windings, by applying any voltage on the windings needed to maintain the wanted current (at any time). Most drivers will try to control current instead of voltage.
Step motor drives control current (are current sources) rather than the voltage going to the motor. The control feedback path compares the motor current against a reference value and adjusts the PWM power amplifier's duty cycle to make the motor current equal to the reference.
The feedback loop is closed so long as the PWM duty cycle necessary is less than 100%. The motor's inductive reactance increases with speed, requiring an increasing PWM duty cycle to keep motor current regulated to the reference value. Above some speed this requirement can no longer be met so motor current (and torque) decreases with further speed increase.
A current source in this predicament is said to have 'run out of headroom'. This means the voltage necessary to maintain current regulation exceeds the available power supply voltage. The amplifier then cannot be described as current source anymore; it exhibits all the characteristics of a voltage source.
There is a symmetry between current sources and voltage sources: Let's say you have a 1A current source limited to 1V and a 1V voltage source limited to 1A. How are they different and how do they behave?
An ideal current source will develop infinite voltage when working into an infinite Ohm load. An ideal voltage source will deliver infinite current to a 0 Ohm load.
A) 1V @ 1A voltage source:
1) Output impedance is zero Ohms.
2) Operates as a voltage source for all loads from 1 Ohm to infinite Ohms.
3) Output current is 1A for all loads less than 1 Ohm.
B) 1A @ 1V current source:
1) Output impedance is infinite.
2) Operates as a current source for all loads from 0 Ohms to 1 Ohm.
3) Output voltage is 1V for all loads greater than 1 Ohm.
It should be clear at this point there is no difference between a current source and a voltage source when there are limits on both current and voltage. The only characteristic that changes is the source impedance (from 0 Ohms to infinite Ohms and vice versa). It is this change of impedance that:
1) Inserts an additional -90 degrees in system phase lag.
2) Introduces an additional full-step lag in position.
3) Causes mid-band resonance for uncompensated drives.
4) Causes torque to decrease as the inverse of motor speed.
P.S. A few years ago I did an experiment to null-out the effects of inductive reactance by inserting a capacitance in series with each winding. The idea was a series LC circuit has zero reactance at its resonant frequency. The effect was a reasonably dramatic increase in motor torque at the LC resonant speed. The experiment was interesting but had no practical value; to be useful, it required the LC circuit to be resonant at every speed. This required (a), a variable capacitance ranging from infinite Farads at zero speed to less than 1uF at 3,000 RPM and (b) a means of servoing this variable capacitance to resonate the LC at the driven step frequency. No such variable capacitor exists in real life so solving for (b) was pointless.
For a motor inductance of 3mH, the capacitor size is:
3,000 RPM = 1.35 uF
300 RPM = 13 5uF
30 RPM = 13,500 uF
3 RPM = 1,350,000 uF
Very interesting, to use a series capacitor to maintain a significant current at higher speeds. This pushes one to think of other ways to maintain the "wanted" currents in the motor windings that is needed for microstepping. (Needless to say that using only full step or half steps to drive stepper motors will not lead to a satisfying CNC system).
As soon as the currents in the windings need to be very quickly changed, as is the situation when we want the stepper motor to run reliably at higher speeds, one is confronted with the limits that Mariss depicted so clearly yesterday. So, how to push these limits further away? The direct solution is to increase the headroom, the voltage on the power supply for the stepper motor drives. The other solution is to reduce the induction of motor windings. Use steppers with the lowest inductance; they have automatically also the highest current ratings but don't be afraid of this. Try to use parallel connections with a 8 lead motor. I once opened a stepper motor to parellellize all individual windings to two, to try to run it at several thousands of rpm. Not practical, because the currents need to increase to unacceptable levels to drive.
Usually, most driver electronics limit around 80Volts. Modern powerMosfets however, easily go far beyond this for very acceptable prices. A 120V 10Ampere bipolar drive is now an economic option.
But, there is another limit that prevents stepper motors from running reliably at higher speed. This is a phenomenon that is harder to explain in a simple way, but I will do my best.
During microstepping, one tries to generate sinusoidal current waveforms in the two motor windings (one sinus, one cosine). This is done by controlling the duty cycle of the switching of one of the legs of the so-called H-bridge. When positive currents need to be controlled, one switches one leg of the H-bridge, with negative currents, the other one. (see Wikipedia: H-bridge, but take attention, I speak of 3 basic states of an H-bridge instead of 2)
To increase a current (either pos or neg) the switching powerMosfets of one leg of the H-bridge are connecting a winding very shortly (microseconds) to the powersupply, let say 80DC. This technique is called Pulse Width Modulation, PWM for short (see Wikipedia: Pulse-width_modulation). A series resistor is connected between ground and the H-bridge; in this series resistor runs the same current as through a motor winding, generating a voltage (a few tenth's of a Volt) that is used to represent the winding current to the closed-loop current-control electronics.
During the period that the powerMosfet(s) does not connect to the 80VDC, the lower 2 powerMosfets are both switched on (the 3rd state) to allow the recirculating current of a winding to be maintained until the next cycle. No current is then flowing in the series resistor. Please understand that we talk here about extremely fast switching speeds of about 100 nanosec., usually with repetitions of about 20 KHz until 70KHz or higher. (Do not confuse these speeds with the much lower speeds that control the sinusoidal microstepping waveforms; these are around 1..2 KHz when the stepper motor runs really high speed).
So far, we have some notion what happens when a current is too low in the opinion of the current feedback-loop circuit and the feedback-loop will then increase the PWM time (duty cycle). But what happens when we arrive at the decreasing part of a sinus? Nothing!
As long as the recirculating current does not fade away by ohmic losses, almost nothing happens. You might think of increasing the ohmic resistance of motor windings, but this creates only more problems. Only after the demanded current from the microstepping sinus reverses polarity, something happens; then the other pole of the H-bridge is being switched. Only then is a reverse voltage applied to the winding, that will rapidly decay the recirculating current and then increase in the wanted pos or neg direction. The beautiful sinus/cosine that you wanted ideally as the current waveform, is extremely distorted. I have never understood why everybody accepts this very poorly designed circuits, but they are the majority of all lower-priced stepper motor drives.
Of course, the best way is to reverse the active leg of the H-bridge as soon as the current need to decrease. This will cause a reverse voltage on a winding to decrease the current. We now speak of so-called four quadrant drive technology. The principle is very old, but only applied in high end motor drives because of its difficulty to design.
When trying to build a reasonably fast and precise CNC with stepper motors, focus on low inductance motors, high voltage power supplies and four-quadrant drive technology. The results of these three measures are spectacular, as I know from experience.
I'd like to clear up a few points in your otherwise excellent post:
1) The issue of microstepping versus full-stepping is moot when it comes to our drives. The reference waveform morphs from sinusoidal to quadrature square-wave once the speed is above where microstepping is of no further benefit (2-3 revs / sec). The motor is then being driven by a full-step drive waveform.
2) Non-recirculating switching is always used while the motor is moving. Recirculating mode switching is only used while the motor is stopped. The slow current decay time of this mode makes it impractical for use while the motor is motion.
3) The fundamental law of nature is "There Is No Free Lunch"; everything extracts a price. Increasing current source headroom or decreasing the winding inductance will increase mechanical power output. The relationship is V / SQRT L.
Power output increases proportionately with power supply voltage, unfortunately eddy current losses (motor heating) increase with the square of the supply voltage. Because heating losses out-race power increase, it places a practical limit on supply voltage for a given winding inductance. We derived an empirical equation (Vmax = 32 * SQRT L) to quantify this limit.
One of my favourite steppers is a Pacific Scientific Nema23 double stack motor, wire-inductance 0.7 mHenry, current 6.5Amp. Applying your formula, you should maximally put a voltage of sqrt0.0007*32 = 0.84Volt, or is the formula in milliH? then it is 27Volts. With only 27Volts, your description of current waveforms is completely correct. But I use 120VDC, that is Danaher-PacSci's spec for maximal winding voltage, based on wire insulation.
Yes, the motor runs hot because of eddy-currents (why dont they use thinner plate material?), but only at speeds over 1500rpm. A small fan comes to the rescue. Of all steppers that I installed this way (over 300 pieces) none ever burned over 12 years. These motors have eternal life, only roller bearings need to be replaced sometimes.
There are a lot of tricks one can use if one has a lot of logic gates to play with. That's why I've gone with FPGAs for new drives instead of CPLDs.
A trick I've developed is to combine recirculating and non-recirculating modes within a single switching cycle and have the time spent in either mode a function of motor speed. At low speeds the switching cycle spends most of its time in the recirculating mode while at high speeds the majority of time is spent in the non-recirculating mode.
You could say I'm into designing drives. The drive project I'm working on will use an FPGA and optionally an MCU. The FPGA only version will have:
1) Direct digital step pulse frequency multiplication for full-stepping and half-stepping emulation with a 10 microstep drive. No more phase-locked loop circuits that have an intrinsic ambiguity on direction change.
2) Sub-microstepping. This is where a 10 microstep drive has its microsteps divided further into "sub-microsteps". The divisor is the inverse of step pulse frequency; the slower you go, the more sub-microsteps there are. In effect, 10 microsteps are linearly interpolated and the motor motion is monotonic (non-incremental) no matter how slowly you go.
3) 3rd-harmonic compensation. Step motors have a non-linear electrical angle to mechanical angle transfer function. This non-linearity can be nulled by adding variable 3rd-harmonic content to the sine and cosine reference. There will be a family of sin/cos curves that have increasing 3rd-harmonic content. The look-up table address for these curves will be derived from an ADC reading a trimpot. This makes selecting the proper compensation curve intuitive to the user; just turn the trimpot to null any residual motor vibration. Even crappy motors can be made smooth.
4) Error blink codes. The drive has one green LED and one red LED. These will be flashed in a '1-2-3-pause' sequence to indicate errors. For instance, GRN, GRN, RED might indicate motor Phase A isn't connected. GRN, RED, GRN might indicate motor Phase B isn't connected while GRN, RED, RED might indicate no motor is connected at all. You get the picture.
4) Mid-band resonance compensation. Mid-band resonance compensation requires 2nd-order damping (rate damping). We have a very effective electronic rate damping using rate of motor load change sensing which feeds a step pulse phase modulator to close the loop.
5) Reference morphing. Microstepping requires sin/cos current-loop reference inputs. Microstepping ceases to be important above 2 to 3 revolutions per second (the motor's low-pass mechanical frequency response). The area under the curve for sine is 63% of a square-wave and that's the torque you'll get compared to a full-step drive if you persist with microstepping above the useful speed. I morph the reference waveform from a sinusoid to a square-wave for speeds above 3 revs/sec. The reference gradually changes from fully sine at 3 rps to fully square-wave by 6 rps. This is to avoid unpleasant torque discontinuities if it was switched abruptly.
6) Short-circuit and over-temperature protection, fused input. The short-circuit protection is fast-acting (<2uS), meaning it safely protects against insults while the drive is active, not just during power-up. Temperature protection warns at 95% limit, shuts down at 100% of limit. The drive is fused using an ultra-fast PicoFuse; it's fast enough to prevent drive damage in the event of gross miss-application such as reversed
power supply polarity.
Ten codes are possible; 8 blink sequence codes plus continuous GRN for everything is OK while continuous RED indicates a fault condition.
That's all in the FPGA and it constitutes the base drive. The drive is designed to also have an optional 16-bit MCU, and as a further option, a 4Mb Flash ROM and an RS-485 interface.
The 16-bit MCU only option allows:
1) VCO mode operation. On-board trimpots set CW and CCW speeds while a third trimpot sets the rate of acceleration. The STP and DIR opto-isolated inputs become the CW and CCW limit switch inputs, the ENABLE input becomes the RUN/STOP input and the FAULT output becomes the "motor is running or stopped" output. The trimpots go into ADC converters because the values are digitally handled.
About CW, CCW and ACEL values. The drive's FPGA digitally generates 32,768 CW and CCW speeds. The speeds are all evenly spaced; if 1Hz is the minimum speed, 32,767 Hz is the next to the highest speed. All speeds have a 1Hz resolution. This is not a counter/timer circuit.
2) The drive operates autonomously; no PC or motion controller is needed. It accelerates at a set rate to a set CW speed, hits a CW limit switch, decelerates, changes direction and accelerates to a set CCW speed until it hits the CCW limit switch to repeat the process. It can cycle back and forth or single cycle depending on how the input switches are used. This takes care of many industrial processes.
3) The MCU only VCO option drive retrogrades to a non-MCU step motor drive via a DIP-switch setting for backwards compatibility. A manual on-board 10-position DIP switch sets motor current, drive step resolution, etc.
Things get much more interesting in the all-options (MCU, Flash ROM and RS-485) mode:
1) The drive can execute vector based motion. Vector based motion means moving along a 2D or 3D vector where the vector motion is defined as an acceleration, velocity and distance along a vector. Other than single axis vectors, multiple drives are involved that synchronize their activities between each other.
2) The vector motion control uses an "on the fly" algorithm. This means the three physics variables, acceleration, velocity and distance can be changed even while motion is in progress. Change the rate off accel/decel and you'll get to where you were going. Change velocity while en route and you'll get to where you were going. Change the destination and you'll still get to the new one. Even if the new destination is behind where the axis are when you issue it. They will simply decelerate, reverse direction, accelerate, run, decelerate and stop at the new location.
2) Flash ROM. The Flash 4Mb ROM can store 1,000,000 coordinate locations to a 32-bit precision. Multiple drives can execute 1 million coordinate 2D, 3D or more dimension vector moves.
3) The RS-485 interface uses simple ASCII commands via a UART communications port. If you have NotePad and HyperTerminal, you can write a program to the drives. We have hired a hired-gun GUI professional to write us a really cool Windows application which will look very good and ease the task.
4) The drives will coordinate between each other to form a distributed virtual multi-axis motion controller. RS-485 is a half-duplex scheme which means there has to be a master and multiple slaves. The master drive (ID = 0x00) will synchronize, (phase lock loop) the slave Xtal oscillators and apportion the slave vector component tasks.
5) The drive and/or its slaves will be able to operate autonomously (no PC involved) running up to 1 million coordinate location programs. Once programmed via RS-485, no further PC involvement will be necessary.
6) RS-485 stretches to Hades and back. You could build a machine that has the X-axis drive here, the Y-axis drive there and a Z-axis drive somewhere else. Hundreds of feet could separate them if you have a really big machine. Yet they would find each other and coordinate between themselves as if they were run by a single motion controller.
7) Needless to say, the full-on drives can retrograde to the VCO mode and further retrograde to just a step motor drive (albeit the best and smoothest step motor drive you have ever seen).