Designing more efficient stepper motor control subsystems -

Designing more efficient stepper motor control subsystems


Contemporary stepper motor drive systems typically use an integrated power IC that drives the motor and may integrate some simple controls like the current control. More advanced control ICs also integrate a state machine to control the stepping sequence for the motor. Generally, the step timing and the motion profile are controlled by an external microcontroller or dedicated logic in an ASIC.

For multiple motor controls, either the dedicated logic is replicated for each motor or the microcontroller has additional software loading for each motor being controlled.

A new IC, the L6470, simplifies the implementation of multiple motor controls by integrating a digital control core with the driver IC. Working in voltage mode, the IC is able to manage user-defined movement profiles at up to 1/128 microstepping with minimal loading on the main microcontroller.

In this implementation, a single micro can easily manage several motors since it only has to issue high level movement commands to the IC. The controller IC L6470 for stepper motors integrates the power stage along with a digital control core on a monolithic IC.

The device can receive motion profile commands across the SPI interface and autonomously execute the complete movement using the programmed acceleration and speed profile. It can also autonomously accelerate the motor up and keep it running at a programmed speed.

The block diagram of the device is shown in Figure 1 below . The Control Logic is a programmable state machine that can receive and store parameters for the acceleration rate, deceleration rate, start speed, run speed, phase current control (PWM) parameters and step mode.

Figure 1: Shown is the block diagram of a controller IC.

Eight step modes, from full step to 1/128 microstepping are supported by the controller. For any selected step mode, the internal absolute position counter counts the number of steps or microsteps to continually track the motor position with a resolution equal to the step mode.

Rotating a 1.8 degree per step motor one full rotation in 1/128 microstepping would increment (or decrement) the position counter by 25,600 counts (128 * 200 steps). All of the motion parameters and the movement commands are received over the SPI interface.

The commands, like move forward a number of steps, are interpreted by the control logic that controls the output step time and number of steps to accelerate the motor from the starting speed to the running speed and back down to stop while moving the total number of steps commanded.

Complex movements can be made by programming queuing up and sending a set of movement commands to be sent across the SPI to the device signifi- cantly reducing the overhead on the microcontroller.

Movement, position commands

The Digital Core can execute five movement commands and four stop commands including those listed in Table 1 below .

Table 1: The Digital Core can execute five movement commands and four stop commands .

Before any movement is made, the operating parameters, Minimum Speed, Maximum Speed, Acceleration Rate, Deceleration Rate and other operating values are set using the SetParam command across the SPI interface. To ensure motion integrity, many of the motion profile settings are locked during a movement and can only be updated when the motor is stopped.

A typical movement profile for the Move command is shown in Figure 2 below . When the device receives a Move command, it calculates the required profile and executes the profile to accelerate from the minimum speed to the maximum speed and back down to end at a position N steps from the starting position all under control of the digital core hardware.

Figure 2: Shown is the typical movement profile.

The GoTo command tells the driver to move the motor to a specific position based on the internal 22bit absolute position counter.There are two GoTo commands, one that will move in the specified direction and the other that will move in most direct path, determining the direction to move that moves the least number of steps to reach the desired position.

For a 1.8 degree per step motor operation at 1/128 microstepping, the resolution of the 22bit position counter is equivalent to about 164 revolutions of the motor. Even with a significant gear reduction, the usable resolution is still well within the range of the position counter.

The movement profile for the GoTo command looks the same as a Move command, but the number of steps is automatically calculated to reach the commanded absolute position. The Run and GoUntil commands are used to run the motor at a constant speed until a stop command (Run) is received or an external event (GoUntil) occurs.

When a stop command is received the device either hard stops or decelerates down to a stop, depending on the command. The device can also be commanded to stop, hard or soft, and then tri-state the outputs.

Figure 3: Multiple run commands can implement complex movements .

Complex movements can be performed using a series of run commands, as shown in Figure 3 above . Each time a new run command is received, the device will accelerate or decelerate the motor to the new commanded speed and continue to run at that speed until the next run command or a stop command is received. When a command is received to reverse the direction of movement, the motor is decelerated down to the minimum speed and then accelerated up to speed in the opposite direction.

Typically, stepper motor drives have been designed to operate in current mode with the current controller sensing and controlling the winding current. This allows designers to maintain the desired torque over a wide range of speed and power supply voltage fluctuations.

This works very well for full step and half step drives and is pretty simple to implement. Most designers have avoided doing microstepping drives with voltage mode since the peak current could vary widely due to variations the power supply voltage and the increasing back EMF from the motor as the speed increases. However, both of these factors can be compensated for with a digital control.

To implement the voltage mode drive, the output pulse width is controlled by a PWM counter/timer circuit that digitally sets the output duty cycle. The L6470 controls the phase current by applying a voltage to motor windings.

The phase current amplitude is not directly controlled but depends on phase voltage amplitude, load torque, motor electrical characteristics and rotation speed. The effective output voltage is proportional to the motor supply voltage multiplied by a co-efficient (KVAL). KVAL ranges from 0 to 100 percent of the supply voltage.

In microstepping, this peak value is then multiplied by the modulation index to generate a sine wave with the selected number of steps. The peak voltage value is given by the equation:


The value for KVAL can be calculated

from the formula:

KVAL = (Ipk x R)/VS


Ipk = Desired peak current

VS = Typical power supply voltage

R = Motor winding resistance

The device includes registers that allow setting different KVAL settings for acceleration, deceleration, running at constant speed and holding position to easily allow different torque settings in each part of the motion profile.

BEMF compensation

If the same peak voltage is supplied to the motor over the entire speed range, the current would go down as the speed increases since the BEMF of the motor effectively reduces the voltage applied to the coil. The waveforms on the left of Figure 4 below show the operation of the motor without BEMF compensation.


Figure 4: Shown are the phase currents with and without BEMF compensation .

As the speed increases, the BEM increases linearly and since the voltage across the coil is effectively the applied phase voltage minus the BEMF voltage, the current decreases.

To compensate for the increase in BEMF, the device includes an additional factor to the KVAL that compensates for the BEMF. Essentially, this is a compensation that is added to the initial KVAL setting to offset the BEMF (Figure 5, below ).


Figure 5: Shown is the BEMF compensation curve.

Since the BEMF is directly proportional to the speed, this compensation factor is given as a slope so that the real time compensation can be calculated from the slope and the current speed. The device has different values for the compensation.

The first is the standard value that is applied to the motor starting at zero speed up until the speed reaches a threshold set by the intersect speed parameter, INT_SPEED. Above the intersect speed, the slope can be adjusted by two additional slope terms, one used during constant speed operation and acceleration, and one used during deceleration.

When the BEMF compensation is properly set, the peak current will be essentially constant over the entire operation speed range as shown in Figure 4. Figure 6 below shows the actual current waveform for a motor as it accelerates.


Figure 6: Shown is phase current with BEMF compensation.

Power supply, phase resistance

Two other major factors that affect the phase current are the motor supply voltage and phase resistance. Since the device operates in voltage mode, controlling the output duty cycle, variations in either will directly affect the phase current.

When operating on an unregulated power supply, there may be a significant amount of ripple on the supply voltage to the motor driver circuitry.

As the supply voltage varies, the motor current also varies. If the ripple on the supply voltage is significant, there is a risk of stalling the motor if the motor current falls too low. The device includes a compensation for the power supply variation ( Figure 7 below ).


Figure 7: The device includes a compensation for the power supply variation.

In this circuit, an internal ADC measures the power supply voltage, and then the compensation algorithm implemented in the digital core calculates an appropriate compensation factor that is applied to the PWM duty cycle to maintain a constant output voltage magnitude over the variations in supply voltage.

Variations in the phase resistance as the motor heats also directly affect the phase current. The KTHERM setting is used to compensate for the variation in phase resistance due to the internal heating of the motor.

Software in the driving microcontroller can monitor or estimate the motor temperature rise and set the KTHERM value to compensate for the increase in motor resistance due to the temperature increases. For example, a simple algorithm can be used to measure the motor resistance during the time that the motor is stopped between moves and then adjust the value of KTHERM based on the measured resistance.


The features implemented in the L6470 allow the designer to implement a voltage mode microstepping drive and compensate for the typical system variations that, in the past, have been overcome using current mode drives.

Overall the system can operate much smoother and without the typical limitations common with current mode drives. Using the digital based voltage mode PWM, microstepping drives up to 128 microsteps per step can easily be implanted.

The sinewave profile is more accurate and allows higher position resolution than with current mode implementations and the resonances in the system are greatly reduced by the voltage mode operation.

In addition, the digital motion engine implemented in the device greatly reduces the loading on the system microcontroller and eliminates the need for a dedicated microcontroller that was sometimes needed in multiple motor applications.

Tom Hopkins is director of engineering at the Schaumburg Competence Center, STMicroelectronics

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.