explainer
Actuator dynamics: from motor voltage to joint torque
Explore actuator dynamics with a DC motor’s current rise, back EMF, and geared load. Compare finite inductance with a reduced model, calculate reflected rotor inertia, and check torque, steady speed, and energy balance.
What you will learn
- Calculate current change from voltage, resistance, inductance, and motor speed.
- Reflect motor rotor inertia through an ideal gear ratio.
- Distinguish geared electromagnetic effort from output-shaft torque during acceleration.
- Predict steady current and joint speed for a known signed load.
- Check a motor simulation with an energy balance and a smaller time step.
Before you start
A voltage step does not create an instant step in a motor's winding current. Current first builds through the inductance, then the moving rotor generates back EMF that changes the current. A gearbox also changes how much inertia the motor must accelerate.
Actuator dynamics connects those electrical and mechanical states. This lesson follows one DC motor driving one joint, with calculations that separate current, electromagnetic torque, and the torque that reaches the load.
Build an actuator dynamics model for one joint
The forward dynamics lesson accepts joint torque as an input. Here voltage is the input, and winding current becomes another state. The experiment isolates a horizontal joint with constant load inertia, so gravity and multi-joint coupling do not enter this model.
Use a brushed DC motor with a constant magnetic field and an ideal rigid gear. Define the positive gear ratio N = motor speed / joint speed; the chosen angle coordinates give both speeds the same sign. Let i be winding current, ω joint speed, and q joint angle, with q̇ = ω.
These illustrative parameters make the response easy to inspect. They describe the teaching model, not a measured commercial motor.
| Quantity | Symbol | Value |
|---|---|---|
| Winding resistance | R | 2 Ω |
| Winding inductance | L | 0.05 H |
| Electromagnetic torque constant | kₜ | 0.1 N·m/A |
| Back-EMF constant | kₑ | 0.1 V/(rad/s) |
| Motor rotor inertia | Jₘ | 0.0002 kg·m² |
| Load inertia about the joint | Jₗ | 0.02 kg·m² |
| Joint-side viscous coefficient | B | 0.02 N·m·s/rad |
The voltage V stays constant after time zero. A constant signed load parameter τₗ applies external torque −τₗ to the joint. Positive τₗ opposes positive rotation and assists negative rotation; it keeps its sign through zero speed.
Let current build through the winding
The electrical balance separates voltage across resistance, inductance, and back EMF:
L di/dt = V − Ri − e
e = kₑ Nω
τ electromagnetic = kₜi
Bodson and Chiasson's DC motor chapter derives the winding equation and torque-current relation in section 1.4. It also connects the equal numerical values of kₜ and kₑ in consistent SI units to electrical-to-mechanical power conversion.
With L positive, a finite voltage gives a finite current slope. Current stays continuous through an ideal voltage step. At rest with i = 0, back EMF is zero, so di/dt = V/L.
As speed rises in the direction driven by a positive voltage, back EMF reduces the voltage left to drive current. During other motion, including load-driven reversal, its sign changes with motor speed. The equation handles both cases.
Reflect rotor inertia through the gear ratio
The rotor spins at Nω, so its kinetic energy is Jₘ(Nω)²/2. Expressing the whole system in the joint coordinate gives:
J reflected = N²Jₘ
J effective = Jₗ + N²Jₘ
J effective dω/dt = Nkₜi − Bω − τₗ
Lynch and Park's lesson on actuation and gearing explains the ideal gear's speed-torque conversion and the square-law reflected inertia. A lossless gear preserves transmitted mechanical power. Rotor inertia can still consume a substantial share of the motor's effort during acceleration.
At N = 10, the reflected rotor inertia is 100 × 0.0002 = 0.02 kg·m². It equals the load inertia, giving J effective = 0.04 kg·m². At N = 20, the reflected part rises to 0.08 and the total becomes 0.10 kg·m².
For the same 1 A current, zero speed, and zero load torque, the joint drive term rises from 1 N·m to 2 N·m as N doubles. Joint acceleration nevertheless falls from 1/0.04 = 25 to 2/0.10 = 20 rad/s². The larger ratio also adds more reflected inertia.
Separate electromagnetic effort from output torque
The term Nkₜi acts on the combined reflected inertia in the equation above. During acceleration, part of that effort accelerates the motor rotor. The gear's actual output-shaft torque on the load is:
τ output = Nkₜi − N²Jₘ dω/dt
τ output = Jₗ dω/dt + Bω + τₗ
The two expressions provide an independent check. The first subtracts the rotor's acceleration demand; the second sums the load-side demands. They give the same result for this rigid, lossless transmission.
At steady speed, rotor acceleration is zero, so output torque equals Nkₜi. At N = 10 with 1 A, zero speed, and no external load, the 25 rad/s² acceleration from the previous section leaves 1 − 0.02 × 25 = 0.5 N·m at the output shaft. The load uses that torque to accelerate its own 0.02 kg·m² inertia.
Calculate the first response to 12 volts
Start with i = ω = q = 0, N = 10, and τₗ = 0. Apply V = 12 V at time zero. The initial current slope is 12/0.05 = 240 A/s, while the initial electromagnetic torque and acceleration are both zero.
Integrating the coupled state (i, ω, q) with RK4, using a 0.001 s step, gives these values at 0.05 s:
| Quantity | Value |
|---|---|
| Current i | 4.239870 A |
| Joint speed ω | 3.856769 rad/s |
| Motor speed Nω | 38.567689 rad/s |
| Back EMF kₑNω | 3.856769 V |
| Joint acceleration | 104.068365 rad/s² |
| Joint drive term Nkₜi | 4.239870 N·m |
| Gear output torque | 2.158503 N·m |
Using the rounded values, the current slope is (12 − 2 × 4.239870 − 3.856769)/0.05, about −6.73018 A/s. Current has already passed its peak at this instant. Motor speed is still increasing.
The gear output check gives 4.239870 − 0.02 × 104.068365 = 2.158503 N·m. This difference matters when connecting the motor model to a link model that includes only the load's inertia.
Solve the steady current and speed
Set di/dt and dω/dt to zero. The two balances become V = Ri + kₑNω and Nkₜi = Bω + τₗ. Solving them gives:
ω steady = (NkₜV − Rτₗ)/(RB + N²kₜkₑ)
i steady = (V − kₑNω steady)/R
For the default 12 V and N = 10, steady joint speed is 12/1.04 = 11.538462 rad/s. Current settles near 0.230769 A. Even with zero external load torque, viscous damping still requires torque and electrical power.
Changing N to 20 lowers the no-external-load steady speed to 5.940594 rad/s. At a fixed current the larger ratio supplies more geared electromagnetic effort, while its higher motor speed at a given joint speed also produces more back EMF. These tradeoffs do not create extra power.
A hypothetical mechanically locked rotor has ω = 0. After the electrical transient, its current would be V/R = 6 A at 12 V. This stalled value is a model prediction; it is not a current limit or a continuous operating rating.
Replay current and speed under different loads
The solid curves use finite winding inductance. The dashed curves use the reduced L = 0 equations from the next section. Both begin with zero joint speed, while only the finite-inductance model retains zero initial winding current after the voltage step.
- Select Higher gear ratio and compare drive torque, output torque, and reflected inertia at 0.05 s.
- Select Positive load torque. The load briefly drives negative acceleration before current builds enough to overcome it.
- Select Reverse voltage. Current, speed, and torque reverse their signs.
- Select Load drives a shorted motor. The external torque drives negative speed, while positive motor torque resists that motion.
- Select No voltage or load. With zero initial state, every state stays zero.
The ideal voltage source holds the selected terminal voltage and can accept either current sign. Setting V = 0 shorts the terminals. An open circuit would need a different electrical model.
The signed load keeps its direction through a reversal. It does not model Coulomb friction or stiction; the friction lesson covers those effects. Presets keep the replay time and integration step, and the reset button restores every default.
Decide when neglecting inductance changes the answer
Setting L = 0 replaces a differential equation with the algebraic relation i = (V − kₑNω)/R. At the default voltage step and zero speed, that model immediately takes i = 6 A. It predicts a 6 N·m joint drive term and 150 rad/s² acceleration at time zero.
Those jumps cannot describe the exact switching instant of the finite 0.05 H winding. A reduced model can still be useful when its electrical transient is fast compared with the motion of interest. Here L/R = 0.025 s is the winding time constant at fixed rotor speed; the moving motor's coupled response also depends on back EMF and inertia.
For constant voltage and load, the reduced mechanical equation has a closed-form solution. Define B effective = B + N²kₜkₑ/R and a = B effective/J effective. From rest, ω(t) = ω steady[1 − exp(−at)], and its current follows the algebraic relation above.
The dashed curves use that exact reduced solution. They keep reflected inertia and back EMF, so they share the full model's steady state. At 0.05 s, the reduced model has already reached 5.514856 rad/s, with current 3.242572 A; the full model's current is higher at that instant because its speed history differs.
This experiment omits current-control electronics, current limits, gear losses, backlash, magnetic saturation, and temperature changes. A real drive needs those details where they affect the task. Parameter identification connects a chosen model to measurements; adding a learned correction also requires testing beyond the data used to fit it.
Integral windup adds an actuator limit to a simpler plant. Its experiment shows how a PI controller can keep accumulating error when the applied effort no longer follows the request, then compares two anti-windup methods.
Cascade control places position and velocity controllers above the actuator. Follow the units of each command and test how finite inner-loop response changes the motion an outer loop requests.
Joint flexibility relaxes the rigid transmission assumption. Its motor and load coordinates can differ as the transmission twists, stores elastic energy, and releases it. A single motor-angle reading therefore does not determine the load angle.
Check electrical and mechanical energy together
Stored energy includes both the magnetic field and the moving rotor and load:
E = ½Li² + ½J effective ω²
dE/dt = Vi − Ri² − Bω² − τₗω
The equality kₜ = kₑ in SI units makes back-EMF power equal electromagnetic mechanical power. Bodson and Chiasson explain this conversion in section 1.4. It leaves copper heating, viscous loss, stored energy, and external load work in the balance.
At the default 0.05 s state, source work is about 1.869587 J. Magnetic energy is 0.449412 J, kinetic energy is 0.297493 J, copper loss is 1.118910 J, and viscous loss is 0.003771 J. Their sum matches source work up to rounding and integration error.
Load work is signed: W load = τₗ[q(t) − q(0)]. Negative load work means the external load supplied energy. In the shorted-motor preset, the source supplies zero electrical work while load work feeds stored energy and losses.
The numerical replay uses RK4 for the three states and the same stages for work and loss integrals. Halving its step reduces the default energy residual from about 6.4 × 10⁻⁸ J to 4.0 × 10⁻⁹ J at one second. The linear system's matrix-exponential solution also provides an independent check of current and speed; energy balance alone would not establish the correct transient.
Reproduce the motor response in Python
This standard-library program implements the same illustrative motor and gear equations. It integrates current, joint speed, and angle together. The returned torque pair separates the joint drive term from output-shaft torque.
from math import exp
R, L, K = 2.0, 0.05, 0.1
JM, JL, B = 0.0002, 0.02, 0.02
def simulate(voltage=12, ratio=10, load=0, h=0.001, duration=0.05):
inertia = JL + JM * ratio**2
state = [0.0, 0.0, 0.0] # current, joint speed, joint angle
def slope(at):
current, speed, _ = at
return [(voltage - R * current - K * ratio * speed) / L,
(ratio * K * current - B * speed - load) / inertia,
speed]
def offset(at, k, scale):
return [x + scale * dx for x, dx in zip(at, k)]
steps = round(duration / h)
assert abs(steps * h - duration) < 1e-12
for _ in range(steps):
k1 = slope(state)
k2 = slope(offset(state, k1, h / 2))
k3 = slope(offset(state, k2, h / 2))
k4 = slope(offset(state, k3, h))
state = [state[j] + h * (k1[j] + 2 * k2[j] + 2 * k3[j] + k4[j]) / 6
for j in range(3)]
current, speed, _ = state
acceleration = slope(state)[1]
drive = ratio * K * current
shaft = drive - JM * ratio**2 * acceleration
return current, speed, drive, shaft
for name, voltage, ratio, load in [
("start", 12, 10, 0), ("loaded", 12, 10, 1),
("high gear", 12, 20, 0), ("reverse", -12, 10, 0),
("shorted", 0, 10, 1),
]:
current, speed, drive, shaft = simulate(voltage, ratio, load)
print(f"{name}: i={current:.6f}; speed={speed:.6f}; "
f"drive={drive:.6f}; shaft={shaft:.6f}")
steady_speed = (10 * K * 12) / (R * B + 10**2 * K**2)
steady_current = (12 - K * 10 * steady_speed) / R
reduced_speed = steady_speed * (1 - exp(-13 * 0.05))
print(f"steady: i={steady_current:.6f}; speed={steady_speed:.6f}")
print(f"L=0 at 0.05 s: i={(12 - reduced_speed) / R:.6f}; "
f"speed={reduced_speed:.6f}")
Expected output, with current in A, joint speed in rad/s, and torques in N·m:
start: i=4.239870; speed=3.856769; drive=4.239870; shaft=2.158503
loaded: i=4.561267; speed=2.780356; drive=4.561267; shaft=2.808437
high gear: i=3.718988; speed=2.939147; drive=7.437976; shaft=1.534622
reverse: i=-4.239870; speed=-3.856769; drive=-4.239870; shaft=-2.158503
shorted: i=0.321397; speed=-1.076413; drive=0.321397; shaft=0.649935
steady: i=0.230769; speed=11.538462
L=0 at 0.05 s: i=3.242572; speed=5.514856
Try it yourself
Exercise 1. At one instant, take i = 1 A and ω = 0, with zero load torque. Compare N = 10 and N = 20. Calculate reflected inertia, acceleration, and gear output torque for each ratio.
Check the two gear ratios
At N = 10, reflected inertia is 0.02 kg·m² and total inertia is 0.04 kg·m². The drive term is 1 N·m, giving 25 rad/s² acceleration. Output torque is 1 − 0.02 × 25 = 0.5 N·m.
At N = 20, reflected inertia is 0.08 kg·m² and total inertia is 0.10 kg·m². The drive term is 2 N·m, giving 20 rad/s² acceleration. Output torque is 2 − 0.08 × 20 = 0.4 N·m; each output torque also equals Jₗ times acceleration.
Exercise 2. Set V = 0, N = 10, and signed load torque τₗ = +1 N·m. Find steady joint speed and current. State whether the motor torque drives or resists the joint's motion.
Check the load-driven shorted motor
Steady speed is (0 − 2 × 1)/1.04 = −1.923077 rad/s. Back EMF is also −1.923077 V, so current is (0 − (−1.923077))/2 = 0.961538 A.
The positive motor torque resists the negative rotation. At steady speed, output torque equals the drive term, 0.961538 N·m. The load supplies mechanical power; the shorted winding and viscous damping dissipate it. Zero terminal voltage does not imply zero winding current when the shaft moves.
Sources and further study
- Marc Bodson and John Chiasson, The Physics of the DC Motor, section 1.4, in their draft Control of AC Motors, for the electrical and mechanical equations and power balance. The University of Puerto Rico at Mayagüez hosts this chapter.
- Kevin Lynch and Frank Park, Modern Robotics: Actuation, Gearing, and Friction, for ideal gearing and reflected rotor inertia.
- Tobin Driscoll and Richard Braun, Fundamentals of Numerical Computation: Runge–Kutta Methods, for the four-stage numerical method used in the replay.
Continue with forward dynamics to connect delivered actuator torque to the motion of a robot's links.