My understanding is that REV and VEX provides their motor torque speed curve based on their motors running at 12 volts. Is that correct? I’m trying to do some motor performance modeling to be able to do predictive PID tuning. I need to understand the Torque Speed relationship at different voltages. Can I assume a linear relationship? In other words, half the voltage provides half the torque at the same speed? I’m sure there are non linearities at low end of the voltage range due to increases in frictional effects.
Is this linearity assumption good for both brushed and brushless motors?
Yes, the four motor constants that are used to describe motors in FRC (free speed, free current, stall torque, and stall current) scale nearly-linearly with voltage. You can imagine the entire motor curve graph shrinking (in all axes) linearly with voltage.
Edit:
This is not true. You can calculate the torque outputted by the motor at any voltage using the formula \tau = \tau_s V \left( 1- \frac{\omega}{\omega_f V} \right) where V is the voltage ratio. So as you can see, halving the voltage will not provide half the torque at the same speed.
The way I usually model this is to first calculate the torque line (plotted vs speed) slope at the spec voltage (12 volts for FRC motors).
To do this you need two points on the torque/speed graph: (0,stall torque) and (free load speed,0). Using simple “rise over run” that means the slope of the line is (note the minus sign):
Slope = -Stall Torque / Free Load Speed
You can use the the slope intercept formula to calculate the torque given the speed at 12 volts. The intercept is just the stall torque.
Torque = (Slope * Speed) + Stall Torque
For operation at lower (or higher) voltages just shift the torque line intercept vertically using a voltage ratio. This is useful because it provides the correct “overspeed” braking behavior (which I usually want for simulation purposes).
An example using a NEO running at 4 volts:
3.36Nm @ stall (0 rev/sec)
98 rev/sec @ no load (0Nm)
Slope: -0.0343
@ 0 rev/sec (stall) = 1.12Nm
@ 23 rev/sec (just a random number) = 0.33Nm
@ 51 rev/sec (greater than the free load speed @ 4 volts) = -0.63Nm
To clarify what’s going on here, the “free load speed” of a motor is nothing special, it’s just the speed at which the motor is going too fast to produce any torque (and thus, it can’t accelerate to a higher speed). If you put load on the motor (slow it down), it can produce a torque again.
\omega is the motor’s instantaneous speed, and \omega_f is its free speed (a defined motor constant). Similarly \tau is the motor’s instantaneous torque, and \tau_s is the stall torque (another motor constant).
I didn’t even notice the typo. That statement is still incorrect. If you look at the equation I wrote, substituting in V = 0.5 will not give you the same result as substituting V=1 and dividing the result by two.
You can perform the same calculations that I laid out for torque, with current by just substituting the variables.
One thing to note is the free-load current when calculating the slope of the current line. Your points will be: (0,Stall Current) and (Free Load Speed, Free Load Current)
This means that torque and current are not actually proportional to each other (except at stall). There is a linear relationship, but they’re not proportional.