In the early 2000's Team RoboForge wrote an ambitious number of technical articles on combat robot topics. Their website still exists but their site is hosted by a free web service called 'Tripod' that allows very limited formatting. As a result, their articles can be quite difficult to read -- example:

http://teamroboforge.tripod.com.
I've grabbed their article on the technical aspects of PMDC electric motors, edited a bit for clarity, and reformatted for readability. You may or may not like the writing style, but there is some good information here.

- Mark Joerger, Team Run Amok

The Voltage Constant: Kv
The higher the voltage you run a motor at, the faster the shaft spins. This change is at a constant rate. For a specific motor the RPM is always a multiple of the voltage applied. In algebra, this is called a "direct variation" and is shown as y = k · x. But people who deal with motors re-wrote the equation to reflect the situation:

RPM = Kv · V

...where V is the voltage you chose to apply, Kv is a constant that remains the same at all times for your specific motor, and RPM is the motor speed you will get at that particular voltage. Let's put this to use!
Suppose you have a motor which normally runs at 9V, and spins at 81 RPM:

Kv = RPM / V

Kv = (81 / 9)

Kv = 9

So this motor has a Kv constant of 9 revs/min/volt. Now, suppose you want 120 RPM. You know Kv, so plug in your numbers:
V = (RPM) / (Kv)

V = 120 / 9

V = 13.3 volts

RPM is the desired RPM in this case, and V is the voltage necessary to reach that. You might get an 11-cell NiCad pack (13.2 Volts) and settle for 9 · 13.2 = 118.8 RPM.
A thing to note: the RPM from this equation is the "no-load speed" where no torque is required, though even spinning the shaft on the bearings requires a little torque. When the motor must exert force the top speed lowers. I'll explain how to calculate that later. Anyway, that's not too hard, is it?

Stall Current
The stall amperage is the maximum current the motor can consume at a given voltage. Back in the days when electricity was first being explored, a physicist named Georg Simon Ohm discovered a relationship between voltage, current, and resistance that became known as Ohm's Law. This relationship can be expressed as:

V is voltage (volts), I is current (amps), and R is resistance (ohms). Ohm's law applies to motors ONLY when the load on the motor is greater than the torque the motor can produce and the motor cannot spin. When this happens the motor is "stalled" and it turns into a simple resistor.
When stalled, the current flow will equal the voltage applied divided by the resistance of the motor. V and I can change but R is constant, so when you find R you can solve for the stall current at any voltage. Setting that up:

resistance = voltage applied / stall amperage

Suppose you know that at 9 volts, the example motor from above had a stall current of 27 amps. To solve for the resistance:
R = V / I

= 9 / 27

= 1/3 ohm

Now, what is stall current at 12V? You know R and V, so solve for I:
I = V / R

= 12 / (1/3)

= 36 amps

Woo-hoo! Coolness.

The Torque Constant: Kt
Motor torque also has a constant abbreviated 'Kt' that has a relationship to the voltage constant Kv. With Kt expressed in units of oz-in/amp:

Kt · Kv = 1352

It's a fact of life. While Kv is related to voltage, Kt is related to the current, so the equation for current is:
We found the Kv of our example motor to be 9. Starting with the relationship equation between Kv and Kt, we can set up and solve the Kt equation:
Kt = 1352/Kv

= 1352/9

= 150.2

The motor has a Kt constant of 150.2 oz-in/amp. We found that the stall amperage is 27 amps so to solve for stall torque:
Stall Torque = Stall Amperage · Kt

= 27 · 150.2

= 4056 oz-in

Dang! What about at 12V? The stall amperage at 12 volts is 36 amps, so:
Stall torque = Stall Amps · Kt

= 36 · 150.2

= 5408 oz-in

Horsepower

Team RoboForge has been doing pretty well up to this point and my edits have been almost entirely for clarity. That changes in this section on motor power, where Team RoboForge makes a fundimental error.

Power calculations are based on the product of the torque a motor produces and the speed at which that torque is produced -- NOT on the product of stall torque and no-load RPM. As noted above, a motor produces zero torque at no-load RPM and has zero RPM at stall torque -- so in both of those cases the motor produces zero output power. In a permanent magnet direct current (PMDC) motor, peak power is produced with the motor producing half its stall torque, which happens with the motor loaded to half its no-load RPM. Using stall torque and no-load RPM overstates output power by a factor of four.

I've made the required corrections to the equations and descriptive language throughout this section.

Horsepower is a measure of the work a motor can do per unit time. It is calculated as the product of motor speed and the torque available *at that speed*. The standard horsepower equation uses torque in foot-pound units, but since we've been using ounce-inch units I've adjusted the equation to ounce-inch. For permanent magnet direct current (PMDC) electric motors ONLY:
PMDC Electric Motor Horsepower =

(No-load RPM / 2) · (Stall Torque / 2) / 1,008,384

For our example motor we found the 9 volt no-load RPM to be 81 and the stall torque to be 4056 oz-in. Plugging that into the Horsepower formula:
HP @ 9 volts = (81 / 2) · (4056 / 2) / 1,008,384

= 40.5 · 2028 / 1,008,384 = 0.081

Wow, that's less than I expected. In 12-lb combat robots, typical drive motors are around 1 HP each. Let's see what happens when we plug in the 12 volt stats:
HP @ 12 volts = (108 / 2) · (5408 / 2) / 1,008,384

= 54 · 2704 / 1,008,384 = 0.145

That 3 volt increase nearly doubled horsepower! Power output increases with the square of voltage, so doubling the voltage produces four times the horsepower. That makes over-volting a simple way to get more horsepower out of a motor, but exercise caution:

- Over-volting increases the heat produced by the motor. The increased heat and mechanical stress can greatly reduce the life of the motor, up to and including instant failure.

- The increased speed and torque may also damage your gearbox. Striped gears are no fun.

- Current flow increases directly with voltage. This increases torque, but also causes greater drain on your batteries.

- Increased voltage may cause the sliding contacts in the motor to 'spark', which admittedly has a coolness factor but can create problems with the electronics in your bot.

Don't overdo it! Ask around for recommendations on the maximum sane voltage for your specific motor.
- Note: Gear reduction of the motor output does not change the horsepower output. Gearing can increase torque, but will decrease speed in the same proportion; the product of speed and torque remains unchanged.

Speed at a Given Torque Load
We know how fast our motor spins at no-load: 81 RPM. We also know how fast our motor spins at maxumum torque load (stall): 0 RPM. How might we calculate how fast our motor spins at some specific torque load? We can create an equation based on what we already know about electric motors:

- Kv · V = no load RPM
- V / R = stall amperage
- stall amperage · Kt = stall torque
- Kt · Kv = 1352
- At Torque = 0, RPM = maximum
- At Torque = maximum, RPM = 0
- Torque decreases at a linear rate relative to RPM.

At this point the text embarks on a complex, tortuous and needlessly convoluted algebraic derivation of an equation to describe the simple inverse relationship between motor speed and torque. The author then chides the reader if they couldn't follow along.

This is what that relationship looks like:

...and this is the equation that provides the motor speed at any required torque load between zero and stall:

RPM = no-load RPM · (1 - (torque load / stall torque))

That's all you need. Move along - nothing else to see here. Skip down to the 'All the Equations Again' section and save yourself the pain.

Knowing all of this, I can set up a graph: Torque (the independent variable, what you plug in) is x-axis, RPM (the dependent variable, the output) is y-axis. The graph will be a line connecting the point (0, no load) and the point (stall torque, 0), which will form a triangle with the right angle being at the origin.
From there, I need an equation for torque. Y=MX+B. M is the slope, the rate of change, and is equal to (y2-y1)/(x2-x1). So, M=(-no load RPM)/(stall torque). Or, better, M=((-Kv)(V))/((V)(Kt)/(R))). The Vs cancel, leaving M=(-Kv·R/Kt), making this graph applicable to the motor itself. B is the y-intercept, or what y equals when x=0. In this case, B is equal to the no load speed, or Kv·V. So, back to our equation: y=mx+b. RPM=((-Kv·V)/(Kt·V)/R)T + Kv·V, where T=torque required to move the bot (in oz-in). The V's cancel, leaving the equation as RPM=(Kv·V)-((Kv·R)/Kt)·T. Factor out the Kv's to get:

RPM = Kv · (V - ((R · T) / Kt))

Let's test it. With our example motor, we ran the motor at 9V. R=1/3, Kv=9, Kt=150.2. According to this equation, the RPM at no load (T=0): Kv·(V-0), RPM=Kv·V, which by definition is right.
At stall, plug in T=4056: RPM=Kv·(9-(1352/150.2), RPM=Kv·(9-9), RPM=0. That by definition is right, too!

But what if you want some real-life RPM? Suppose the bot needs to have 1000 oz-in of torque to turn its wheels. What would its RPM be? Plugging things in:

RPM = 9·(9-((1000/3)/150.2)) = 61.03

Haha! That took way too long. Don't follow what I did? No problem; just copy down that equation. Where it came from isn't as important as its use, although if you do follow my above math, it may help you understand the other equations better.. Or maybe it won't.

All the Equations Again

- Kv = (no load RPM) / V
- No load RPM = Kv · V
- V = (no load RPM) / Kv
- Kt = (torque (oz-in)) / (current)
- Torque (oz-in) = Kt · (current)
- Current = (torque (oz-in) / Kt
- V = (stall current) · (motor resistance)
- Stall current = V / (motor resistance)
- Motor resistance = V / (stall current)
- Kt · Kv = 1352
- Kt = 1352 / Kv
- Kv = 1352 / Kt
- PMDC Electric Motor Horsepower = (No-load RPM / 2) · (Stall Torque (in-oz) / 2) / 1,008,384
- RPM at torque load = no-load RPM · (1 - (torque load / stall torque))

Last Notes
The following symbols represent constants for a specific motor:

- Kv
- Kt
- R (with the motor stalled)

With Kv and Kt: K stands for 'konstant'.
The following elements vary with other factors:

- V
- I
- HP
- Stall current
- Stall torque
- RPM

Make sure your elements match up! For example: when calculating from voltage and stall current make sure the stall current you enter is correct for the entered voltage! It can be easy to plug in the stall current at 12 volts and incorrectly specify 9 volts elsewhere in the equation.