Realtime stepper motor control
Abstract. Ideal stepper motor control requires generating step and direction signals for jerk-limited trajectories. For embedded realtime systems an efficient method is required to generate such signals.
Admissible trajectories
A motor trajectory is a position over time x(t). For simplicity assume time t is in seconds and position x is in steps. Of relevance are its first three derivatives, velocity v(t), acceleration a(t) and jerk j(t):
\begin{aligned} v(t) &= \frac{\d}{\d t} x(t) & a(t) &= \frac{\d}{\d t} v(t) & j(t) &= \frac{\d}{\d t} a(t) & \end{aligned}
The jerk function can have discontinuous jumps, so the position function is of differentiability class C^2.
These constraints have causes
- The real world system may have range constraints on the position. There may also be safety considerations around potential energy (i.e. gravitational).
- v_M is bound by the max RPM of the motor. Or more specifically the torque curve. It may also be limited by safety considerations, as it is directly related to the amount of kinetic energy in the system.
- a_M is bound by the torque the motor can employ and the force the system can endure.
- j_M is bound by the jerk the system can withstand.
Note. These being constants is just an approximation, in practice the maximum torque depends on the motor RPM. The required torque may be a function of the position, etc. Handling the cases with dynamic limits is left for future work.
For practical reasons, there are limits to the range of all trajectory functions.
\begin{aligned} \vert v(0) \vert &≤ v_M & \vert a(0) \vert &≤ a_M & \vert j(0) \vert &≤ j_M & \end{aligned}
Consequentially, x, v and a are Lipschitz continuous with constants K = v_M, a_M and j_M respectively.
-> Admissible positions
-> Example showing the importance of velocity (and more subtly also acceleration).
- Constant x.
- Constant v.
- Constant a.
- Constant j.
Maximum jerk trajectories
The fastest admissible trajectory from a state (x_0, v_0, a_0) to (x_1, v_1, a_1) is an s-curve and has maximum jerk:
\begin{aligned} j(t) & ∈ \{-1, 0, 1\} ⋅ M_{\text{jerk}} \end{aligned}
When the initial and final velocity and acceleration are zero, this results in the seven step S-curve. These steps are defined by an applicable constraint
- Maximal positive jerk
- Maximal positive acceleration
- Maximal negative jerk
- Maximal velocity
- Maximal negative jerk
- Maximal negative acceleration
- Maximal positive jerk
For different initial and final states some of these phases may disappear, for example phase 4 disappears if the target position is reached before the maximum velocity is reached.
Timings
The maximum jerk trajectories are fully specified by an initial jerk direction and durations of all seven phases. Durations can be zero if that particular phase is omitted.
Minimal jerk interpolation
Where the
Loosening state constraints
What if instead of a fully specified state we are only interested in getting to a particular position as fast as possible? We would obviously skip the deceleration step.
Step and direction signals
Stepper motors operate in discrete position steps, in our units normalized to 1. The control signal \hat x(t) will thus have discrete steps \hat x ∈ \Z. The ideal control signal minimizes the discrepancy \abs{\hat x(t) - x(t)}, and is accomplished simply by rounding the position to the nearest step:
\hat x(t) = \floor{ x(t) + \frac 12 }
This results in a step function that can be written as a sum of discrete step intervals
\hat x(t) = \sum_i x_i 1_{[t_i, t_{i+1})}(t)
where 1_A is the indicator function, x_i ∈ \Z is the position during step i and t_i is the starting time of step i. We can take the (distributional) derivative of \hat x(t) to get a \hat v(t), which consists of a sequence of positive or negative unit impulses, also known as Dirac delta functions:
\hat v(t) = \frac{\d}{\d t} \hat x(t) = \sum_i s_i ⋅δ(t - t_i)
where s_i ∈ \{-1, 1\} = x_{i+1} - x_i is the direction of the pulse.
The stepper motor controller takes a step
and direction
signal, which are the the absolute value \abs{\hat v(t)} and sign \sign \hat v(t), convolved with a small pulse 1_{[0, ε]} to make it physically realizable.
\mathrm{step} = \abs{\hat v} * 1_{[0, ε]}
Interestingly, the solution to this is
\mathrm{step}(t) = \abs{\hat x(t) - \hat x(t + ε)}
or
\mathrm{step}(t) = \abs{\hat x(t) - \hat x(t - ε)}
To practically generate this signal all we need are the t_i and s_i.
Step duration
References
https://en.wikipedia.org/wiki/File:Schematic_diagram_of_Jerk,_Acceleration,_and_Speed.svg
-
P.J. Siripala, Y. Ahmet Sekercioglu (2013). "A generalised solution for generating stepper motor speed profiles in real time." Mechatronics 23 541-547.
-
Josip Divić, Jurica Đurić & Koča Vrančić (2014). "Microcontroller implementation of dynamically adaptable control of stepper motor with continuous second derivative of speed curve." 37th International Convention on Information and Communication Technology, Electronics and Microelectronics (MIPRO). doi 10.1109/MIPRO.2014.6859550
-
Ke Yu, Zhisheng Zhang, Zhiting Zhou & Min Dai (2020). "A Modified Bresenham Algorithm for Control System of FDM Three-Dimensional Printer". doi 10.1007/978-3-030-43703-9_11
-
"Design of multi-step stepper motor coordinated control system based on Bresenham algorithm." Presented at 24th International Conference on Mechatronics and Machine Vision in Practice, Auckland, New Zealand.
-
Study of Real-time Interpolation Algorithm with Varying Interpolation Period Based on Trapezoidal Velocity Profile
-
https://electroinfo.net/wp-content/uploads/2019/09/doc8017.pdf
-
https://www.eevblog.com/forum/projects/real-time-stepper-motor-control-algorithm/
-
http://picprog.strongedge.net/step_prof/step-profile.html
-
Pramod Ranade (2009). "Linear motor control without the math" EE Times. https://www.eetimes.com/linear-motor-control-without-the-math/
https://download.e-bookshelf.de/download/0000/0131/85/L-G-0000013185-0002346713.pdf