# DC motor control - speed-torque curve

I am having some trouble understanding how to practically use the speed-torque curve of a DC motor.

I understand that the gradient of the speed-torque curve is defined by the design of the motor, the exact position of the curve depending on the voltage applied. So if the voltage is changed the speed-torque curve is also changed but remains parallel to the initial curve before the voltage was changed. See figure below. So my intuitive guess is that when using the motor at a given desired operation point (desired speed and desired torque), the corresponding speed-torque curve Cd has a gradient specified in the data sheet of the motor and passes through the operation point. This curve Cd is obtained at a corresponding voltage Vd. See diagram below. So my next guess is that in order to have the motor operate at this desired operation point, you have to set the voltage applied to the motor to Vd, and apply a current Id (computed using the torque and the torque constant).

Now from what I read this is not what is done in DC motor controllers. These seem to only drive the motor using current and some sort of PWM magic as is shown in the following diagram by maxon. Anyone knows why voltage is not used in DC motor control and only current is? I do not understand how you can set the speed if you do not modify the voltage? And what is PWM useful for?

I have looked for hours over the internet and could not find anything relevant.

Thanks,

Antoine.

The problem is that you cannot control both the voltage and the current. You apply a voltage, and the motor draws whatever current it wants (subject to your ability to supply that current). Alternatively, you make a current controller which automatically adjusts the voltage to maintain the desired current.

An analogy would be pushing an object through honey. Voltage is equivalent to the force you're applying, and current is equivalent to the speed of the object.

The object moves at a speed which depends on how hard you're pushing, and the dimensions of the object. You cannot choose to push gently and quickly, and you cannot choose to push really hard and slowly. If you want the object to move at a certain speed, you have no choice but to adjust the amount of force you apply until it moves at that speed. If it's moving too fast, you reduce the force. Too slow, and you increase the force.

This is how a motor is controlled. PWM 'magic' is just a way to control the voltage that doesn't cause the voltage controller to get really hot. (The alternative is a linear voltage source, which will get really hot).

Before we get into what's happening in the motor controller, it would be worth looking at a different graph: Here we can see that the torque produced by the motor is purely a function of the current flowing through the windings, and it's pretty linear. If you want to produce a certain torque at the motor, all you need to do is look up on the graph for the current required, then tell your current controller to deliver this current. It does this by constantly measuring the actual current, and adjusting the voltage at the motor (using PWM magic).

Now we have a very nice situation for our robot's controller. Assuming a world with no friction, motor torque is proportional to acceleration. If you can control the acceleration, then you can easily control the velocity and position of the motor.

The motor position controller knows the trajectory it needs from the motor, and can calculate how much torque it needs at every point during this trajectory (because it knows the acceleration at every point in the trajectory). It's also looking at the actual position of the motor, which won't quite be correct because of friction, and uses that position error to adjust the amount of torque it wants. It then converts the torque demand into a current demand, and gives that to the current controller.

And there you have a servo.

• Ok, so what I understand is that the end-variable actually adjusted and input in the motor is voltage U. This voltage U is adjusted so as to obtain desired current Id inside the motor. Now what's the relation between U and Id? I mean if observed I != Id how should U be adjusted? Is this relation simply U = R x Id? (with R being the terminal resistance of the motor given in the data sheet). I think I am beginning to get there! Sep 3, 2014 at 15:12
• Also another thing I understood is that the voltage applied to the motor is actually not U, but Upwm. Upwm being a PWM chopped signal which mean is U. And the reason for using Upwm rather than U lies in some kind of thermal reason. Is that right? Sep 3, 2014 at 15:16
• @arennuit - A motor acts nothing like a resistor, so the only way to control the current is with some active current controller. You can see on your diagram, the actual current is measured, and fed back to the current controller. But that's another question, and one which is probably better asked on Electronics Stack Exchange. Sep 3, 2014 at 15:26
• @arennuit - As for the reason for using PWM, that's another question too. But briefly, if you turn a switch (e.g. transistor) fully on or fully off, then there's very little heating. If you try to limit the current by turning it partially on, then it gets warm. Imagine the switch as your hands, and the current as a rope being pulled through them. If you hold the rope tight so it can't move, or if you let the rope pull through completely freely, then everything's fine. But if you try to slow the rope down by squeezing on it, then you can get serious burns. Sep 3, 2014 at 15:32
• Your parabols are very much self explaining indeed. Thanks a lot Rocketmagnet! Sep 4, 2014 at 8:42