2 Oct 2014

Stepper Motor - 02 ( Controlling the Stepper Motor )

Submitted by Max

The following information has been derived from using the 3308 stepper motor connected to a 1063 - PhidgetStepper Bipolar 1-Motor controller.

Setting the Current Limit

Stepper Motor - 02
The current/speed characteristics for the 3308 at 12V.
Stepper Motor - 02
The current/speed characteristics for the 3308 at 24V.
Stepper Motor - 02
The current/speed characteristics for the 3308 at 30V.

The current limit is an important control property of stepper controllers. Since many stepper motors have a very low coil resistance, the current through the coils cannot “self-regulate” to a safe level on their own. They require the sophisticated control techniques of a Chopper Drive, which is used in the 1063 PhidgetStepper controller. As a result, the maximum current allowed should be explicitly set.

There are many factors that influence what the current limit should be set to. These include, but are not limited to,the acceleration and speed of the stepper, the supply voltage, applied torque, motor inductance, and coil resistance. The process of choosing the current limit can be simplified by following some general rules of thumb. The graphs in this section show a set of speed vs. current characteristics for the 3308 stepper with various power supplies.

In the these graphs, the “actual speed” of the motor is the maximum speed attainable in a real world test done with no load on the motor, but at very high acceleration. The “max speed” shows the limitation on speed imposed by the inductance of the motor coils at a given supply voltage. Given that the 1063 controller is only able to run at a maximum speed of 2048 full steps per second, our graphs don’t show data at higher speeds.

When the current limit is set low and the acceleration is high, the motor will not be able to provide enough power to accelerate itself and the load it’s driving. The motor also has to overcome friction losses within the system, and do work on the load - for example, lifting a weight. By increasing the current limit, more current and power is made available to accelerate and maintain maximum speeds. This can be seen on any of the graphs in the initial steep ramp of the actual speed. As the current limit increases, the motor is able to achieve higher speeds.

In the case of this particular motor, the large inductance of the coils - great for producing lots of torque, quickly overwhelms a 12V power supply. To get higher speeds and more performance out of this motor, higher supply voltages are necessary. Compare the actual speed curve on the 12V graph to the 30V graph. At 30V, the motor is able to achieve a much higher speed. It’s important to remember that the actual speed was measured at very high accelerations - by lowering acceleration, higher velocities can be achieved. Of course, if your motor is doing a lot of work, you’ll need to supply enough current to produce the necessary torque, therefore limiting the maximum speed.

Setting Current Limit for your application is a balancing act. By increasing the current limit, more torque is available, but far more power will be consumed when the motor is turning very slowly or stopped. When setting a high acceleration, more power (therefore current) is required to accelerate the motor and it’s load. Selecting the current limit is often done dynamically in the actual application - set the current limit very low, and run the system, increasing the Current Limit if it stalls. After a set up has been determined that is reliable, increase the current limit by another 25% to give some margin.

There is no point in setting the current limit to be greater than the motor’s rated current- the increased inductance will only further limit the motor speed. In this case, the 30V graph shows that it’s not feasible to operate this motor at maximum torque (1.7 Amps) at a speed greater than 1100 full steps per second. By reducing the current limit, greater speeds are possible, but less torque will be available. Most motors designed for Chopper Drive control can operate at much higher voltages, but Phidgets Inc. does not carry a controller that can provide these voltages at this time.

Note that just because you have set the current limit to some amount (for the sake of example let's say 2A) the motor will not draw 2A at all times. The motor will only draw as much current as it needs. This means that if there is only a small load on the motor and it is spinning at less than its top speed the motor might only draw a small fraction of the allotted 2A. Even as low as 300 or 400mA. As more load or higher speed is applied, the current usage will go up until the controller is giving the motor the full current limit. As a motor draws more current, it will also produce more heat. It is normal for a stepper motor to be hot to the touch after running for a while. If the motor is getting very hot, you may be trying to drive too large a load for that particular motor.

Choosing a Supply Voltage

When looking at a stepper motor's specifications, you may come across a "Rated Voltage" value. This value is usually equal to the rated current multiplied by the resistance of the coils of the motor, making it somewhat of a redundant specification. As mentioned earlier, you can increase your controller's supply voltage in order to allow the motor to reach higher speeds at a lower current (because high current causes high inductance which puts a hard limit on how much speed and torque a motor can produce). The motor will also produce more heat as you increase the supply voltage, so it's a good idea to choose a supply voltage based on the performance you need for the motor. Some motors will have a "Recommended Voltage" for a particular controller, which is the amount of voltage needed to reach the optimal speed and torque of the motor with minimal heating.

Setting the Velocity Limit

The velocity of a motor cannot be directly chosen with our stepper controllers. However, a velocity limit can be chosen to ensure that the motor does not go faster than a certain speed. This is useful because every stepper motor has a speed that causes itself to vibrate at the resonant frequency of its own moving parts. When the motor vibrates at this frequency, the motor will often overshoot its target position, causing it to lose most of its torque, sometimes even rotating in the wrong direction. This phenomenon is sometimes called "ringing". If you experience these problems while running your stepper motor at a constant velocity, try setting the velocity limit to lower or higher than it was previously, in an attempt to minimize the amount of time spent operating at this particular velocity.

Setting the Acceleration

The acceleration of a stepper motor is an important consideration when driving a load. Setting the acceleration too high can result in the motor stalling, especially with a heavy load. Try to use low acceleration in high-torque applications.

Continuous Rotation and Forward/Reverse

A stepper motor can be caused to rotate continuously by simply setting the controller's target position property to an extremely large number of steps.

Stepper motors can easily be run in forward or reverse by choosing a target position greater than or less than the current position, respectively. Reversing the polarity of either of the motor's wire pairs will invert this effect- causing a lesser target position to result in forward rotation, and a greater target position to result in reverse rotation. For this reason, you should pay attention to the way you wire a motor when developing and testing code, and ensure that you wire it with the same polarity in the future to avoid erroneous behaviour in applications where rotation direction matters.


The stepper controllers sold at Phidgets Inc. have a current rating that is limited by the heat dissipation capability of the board. You could add heatsinks, fans, or other cooling devices to increase the current limit, but do so with caution. Unless you have a way of monitoring the temperature of the driver chip during operation, you have no way of knowing how far beyond the rated specification you can go.

Wire Length

Since the stepper controller is sending a fairly simple signal to the motor, interference is not a big concern. You should be able to have quite long wires between your motor and controller. For more information, see the effects of long wires page.

Saving Power

When the stepper motor has rotated the requested number of steps, and is stopped, the coils will remain energized to hold it in position. This is necessary to allow the motor to support a load on its shaft without rotating to an unknown position.

Holding torque is the amount of torque required to rotate the motor ‘against it’s will’ when the full rated current is flowing through the coils. If power consumption or overheating is a problem, and full holding torque is not required, the Current Limit can be decreased in software when the motor is not moving. Holding torque will decrease linearly as you decrease the Current Limit, but will also allow you to save power and reduce the heat generated in your system.

There is also a small resistance to movement within the motor even when there is no current, called Detent Torque. This may be sufficient to prevent rotation in your application, especially if the stepper has a gearbox on it.

If the motor is not supporting a load or is not required to maintain a specific angle, it is recommended to set the Enable property to false. This will allow the motor shaft to rotate freely, but the present angle may be lost if forces on the motor-shaft are greater than can be resisted by the detent torque of the unpowered motor.