Motor torque-speed curves

Most recent data is in the REV2 thread

I’ve never seen anyone post the torque-speed curves the VEX motors so I thought I would take a shot at this even though it’s a bit out of my area of expertise. The data is taken from the VEX wiki and the technique from this web page.. These graphs assume that the speed torque curve is linear and current is also proportional to torque. It also assumes the 393 is in torque mode so max rpm for both motors is the same. Hopefully one of the Mech-Eng students can check this for me and save any possible embarrassment from posting inaccurate data.

Power is shown normalized, efficiency is in % and happens to use the same scale as rpm.



As expected the maximum power for both motors is at half speed.

The efficiency seems to be better for the 393 motor but is still only just over 40%.

If we were to need a certain torque, say 4 in-lbs, current in the 269 would be about 1.3 A whereas the 393 would only need 1.15 A. The 269 would be running at about 52 rpm where the 393 would be running at 70 rpm.

The way I read these graphs is that under the same conditions (the same torque) the 393 is a superior motor to use.

This is where the college students tell me I have it all wrong…



This is interesting - and the efficiency value might be more relevant now that 10 (or 12) 393s are allowed. Maximising power output might become less important now that the cortex’s current constraints are a bigger factor, meaning the optimum torque might be further from the peak power and nearer to the peak efficiency.

I’d be interested in seeing someone who has the equipment do an experiment to determine whether or not the torque-speed curves really are linear.

1 Like


This matches our test data pretty closely. And yes, the 393 motor was designed to be a superior motor. The original motor was good for the beginning of VEX, but as the VEX Robotics Competition has evolved and teams were making more advanced designs we needed to make a more advanced motor that pushed the electrical power limits of the Cortex.

During the development of the new motors (393 and 269) there was a lot of debate within IFI about whether we needed to have both the 393 and the 269 or just move to the 393. The discussion was entirely focused on how our customers would react. As I had just started at IFI, it was my first real look into just how much this company cares about the customers. The final argument that kept the 269 was that we needed a motor that could fit in where the 3 wire motor fit and had the exact same motor performance as the 3-Wire. As you know, the 269 is slightly smaller than the 3-wire motor and the 393 is significantly larger.

Now that we have significant technical and competition data, it is clear the teams prefer the 393 motor (duh). The 393 motor is a more robust motor and can withstand more abuse than the 269 since it has a significantly higher stall torque.

Now on to the numbers (269 and 393). How did we come up with those? Those are actually the power numbers in Watts (well the power is actually 2.69 and 3.93) from our initial testing. Now if you do the actual math on the published numbers you will get 3.99 Watts for the 393 and 2.54 Watts for the 269, but the names were determined during our initial prototype testing. Anyway, just a bit of a history lesson.


1 Like

Thanks Paul, that’s very interesting background information.

The power is easier to see in the raw data from which the graphs were created, here it is for reference.

Data for 393 motor

Data for 269 motor

1 Like

Not likely. A 50% drop in power gets you a 25% eff increase (from 30% to 40%).

The simplest equipment I can think of:

  • wind up a (massless) string on winch drum
    (non-vex, pick a reasonable size to be able wind up enough chain to max torque the motors)
  • Tie the string to a log-chain, or similar equal-mass-per-length
  • Quad optical encoder on the drum axle.
  • Add a current sensor to the motor controller wire.
    (Is a series pass resistor with each end monitored by a cortex analog ports enough?)

Add a little programming,
(rotation encoder implies chain-mass lifted, implies torque load, etc)
and your cortex should be able to spit a data table:
Cut/paste into excel, and you should be able to print a forward/backward torque curve in a minute or less.
Sounds like a great service to provide at competitions,
and judges might find it impressive.

1 Like

We have this equipment and it is made (mostly) from VEX parts. We made a dyno using a Cortex, Power Supply, VEX Encoders, a scale, a gutted VEX High Strength Motor, a bunch of VEX parts and a really large rheostat. I will have someone post pictures. The curves are definitely linear and JPearman’s results matched our testing results.

1 Like

jpearman, did you just adapt the graphs from that document using the values from the motor product page? I can’t tell if you did testing or made a guess assuming that the VEX motors are similar to the ones being tested in the document.

I was going to do this testing last year for the motors, but our physics lab didn’t have a rotation sensor that we could hook up to the lab program. I would do it on the Cortex but I haven’t the foggiest idea how to store voltage, current, and torque readings on the Cortex from sensors that I haven’t the foggiest idea on how to connect to the Cortex.

I’ll see if I can get back to our physics lab to do some testing.

And in case anyone is wondering where the power and efficiency are coming from on those graphs (and doesn’t want to read through the document jpearman linked to), here you go:
Power (dashed line) = Speed * Torque
Efficiency (solid burgundy line) = PowerOut / PowerIn = (Speed * Torque) / (Voltage * Current)

So does this mean that the 269 motors can now be called 254 motors? :slight_smile:

The curves are theoretical and not based on measurements. The assumption is that the speed-torque curve is linear, which in everything I’ve read is a reasonable assumption. Paul has confirmed that for all practical purposes this is correct.

I did have a group of freshmen do some testing at the beginning of last season, they also confirmed the linearity but due to the nature of the experiment the results were not very accurate in absolute terms. That data is buried in an engineering notebook somewhere at school.


Power = speed * torque * K
where K is a constant to get power into the correct units, in the case of speed in rpm and torque in in-lbs the constant is 0.0118

efficiency(in %) = output power/input power * 100

I just picked colors for these graphs to match the example in the documentation I referenced.

This data was designed to stimulate some thoughts about motor selection. The decision of which motor to use is not as easy as deciding if a more powerful motor (or more of the 393s) will trip the PTC. A 393 used to provide the same power as a 269 looks like it can do that with less current being pulled. Now that the IMEs are available its quite feasible to have software determine current by monitoring the state of a motor based on requested power and actual motor speed. The software should be able to predict the chance of over current and modify the control accordingly. The next tests I would like to do involve seeing how maximum power, speed and stall current are effected by the control value.

1 Like

I’m not sure why, but this seems like something a non-Mech-Eng person would do… I would leave it without the constant and let whoever’s calculating it figure it out (is that mean?).

By the control value you mean the voltage supplied by the Cortex? If I have extra time I’ll do some testing along those lines.

From the graphs, it looks like between 65% and 70% of the max speed are the best speeds at which to run the motors.

Probably, I’m an EE. However, units are important, we need power in watts so all the constant is doing is a combination of converting torque into N-m and speed into rad/sec. It’s not mean, I’m just deflecting the questions about why my numbers are not the same as speed*torque before they happen.

Yes, it certainly feels non-linear.

1 Like

I was saying that my leaving it up to someone else to do the conversions was mean.
Anyone who is doing that calculation can (hopefully) be able to do the conversions into whatever units they need. Adding the conversion factor in that case isn’t necessary, but is helpful to show where the values are coming from and what exact calculations are being done.

The output voltage from the Cortex is proportional to the output values set in the code, correct? Or is that what you think isn’t non-linear?

I understood, just didn’t answer very well.

Well, the output voltage from the cortex is fixed, the battery voltage, but is chopped into a pulse train at I think around 1200Hz. So what we need is probably the RMS voltage of the pulse train which is V * sqrt(D), where D is the duty cycle. If, for example, the motor is set to a value of 64 then D may be 0.5 (50% duty cycle) so the RMS voltage would be battery voltage * 0.707 and perhaps the motor would run at 71% of full speed. This is something that’s been on the to do list for a while but never found a student to delegate to :slight_smile: On the other hand perhaps this is taken care of in firmware and the duty set at 25% for a motor value of 64 giving an output of V * sqrt(0.25) or V * 0.5.

Part two of this would then be to determine if the motor ran at half speed if the RMS voltage was also half the nominal voltage.

1 Like

Would a cheap voltmeter read the average (RMS) voltage?

I could probably get an oscilloscope to check this out on Monday.

It’s hard to say, it really needs to be a “True RMS multimeter” to measure waveforms that are not true sine.

I will also try and do some tests next week, it’s easier to setup now that the IMEs are available.

1 Like

What is the best scenario in-terms of the load that we should put on the motors? Would it be the best if we had 7 in-lbs (for the 393 motors)? This would maximize power.
Also what is the independent and dependent variables? (while testing did you only modify the in-lbs or the rpm?)

Half the max speed and max torque will get you the most power output, as you said. But the slower it is running, the less back emf is being generated, so there is more current and therefore you are running through your battery’s charge faster and you are putting more wear on everything (not to mention possibly tripping the PTCs). So, faster is better. The 65%-70% of max speed range is probably the best of both worlds. So about 4.5in-lbs should keep the motors fairly happy, and you still have 89% the power output of 50% speed/torque.

This was tested on motor port 2 of a new Cortex. The voltage was measured just after the speed controller 29, with a 393 motor attached to provide some load.
The period was 870μs.
Positive voltage is down for some reason and the zero is the “1” on the left edge.

Input motor power:
10 - 70μs duty cycle
*nice inductive flyback and back emf

25 - 220μs duty cycle

50 - 500μs duty cycle
*you can really see the speed of the motor by how large the back emf is

75 - 770μs duty cycle

84 - 850μs duty cycle

1 Like

[can only have 5 attachments per post]

Here’s the plotted input power v. output duty cycle.


What was really interesting was that above 84, the duty cycle appeared to be the whole period, so the power output would be the same for all values from 85 through 127. The usercontrol code was empty and the values were input using the debugger windows, so the code should not have been doing anything to make this happen.

I didn’t have enough time to put more load on the motor and then see what happened between 85 and 127 (the 3-hour Physics C AP test took 5 hours…). Perhaps, jpearman, you can get some more thorough results? I would have liked to test the 2-wire ports (with the built-in motor controller) and the three-wire motors (by taking the motor apart and probing after the internal motor controller), not to mention more negative values. It might be worth noting that between input values of -11 and 6, there was no output voltage.

1 Like

Thanks for the testing, interesting results.

I also did a few no load tests tonight.

First, I checked that speed is proportional to DC voltage into the motor. I don’t have a very good bench supply at home but the graph is quite conclusive anyway. This shows direct connection of DC power to a 269 motor with rpm measured using the cortex and IME.


A straight line as expected, the dotted part is an extrapolation to zero.

Next I wanted to compare control values to no load motor rpm. Wrote a small program in ROBOTC to sample the IME and calculate rpm while ramping control value from -128 to 128 in increments of 4 every 2 seconds. Results sent to the debug stream. Here is the graph, control value on X axis, rpm on Y.


It also shows that above control values of 88 there is no change in motor speed. I would like to repeat this with the motor under load but my attempts to do this tonight failed, need to think of a better way to create a dyno.

There is a power point on the Lynbrook Robotics web site (end of the page) that was analyzing this for the IFI Victor884 controller, they found similar results.

1 Like

The dyno I was planning on using was just a force sensor measuring the torque on the (stationary) motor mount, so your load torque on the other end (the axle) doesn’t need to be calibrated.

Well I’m glad I’m not alone in those results.