 # Motor Model Constants

I’m working on modeling motor dynamics and voltage-velocity responses for various FRC applications. Basically the plan is to create a linear model of the motor, compute the transfer function, then use control principles to calculate the speed response curves for various inputs (constant voltage, current limit, etc).

The standard linear DC motor model uses the constants k_T, k_e, R, and L as opposed to the FRC standard \omega_f, \tau_s, i_s and i_f. I know k_T = \frac{\tau_s}{i_s}, k_e = \frac{12 V}{\omega_f}, and R = \frac{12 V}{i_s}. I’m wondering if there is a way to calculate L (inductance) using the FRC constants or if anyone has measured it for the common motors. Also, is there a way to account for free current or is that ignored in the ideal model?

In the past, I have seen brushed motor inductance measured via an LCR meter. As I recall the maximum of 4 readings, each 90 degrees apart (measurement made open circuit).

Were I to test for inductance, I would use a single pulse test. Apply a pulse of Voltage to a locked-rotor motor and calculate the inductance from the R-L current waveform. A little bit of tuning would be needed to identify the pulse duration. I don’t think that this pulse can be produced or measured using standard FRC materials.

I believe that the no load current should factor into the calculation of Ke. The available Voltage is reduced by the product of the no load current and the armature resistance.

An LCR meter is the right way to do it. You can also use an oscilloscope and a function generator (that can source a bit of current), if you’re feeling clever.

Backing up for a second, it seems like you’re going for the full second order DC motor model, that is:
J\ddot{\theta}+b\dot{\theta} = K_t i
L i' + Ri = V - K_e \dot{\theta}

While this is the correct model, the RL time constant of FRC-class motors is essentially negligible (it takes about 0.5 ms to saturate the windings of a NEO and about 0.12ms for a CIM, if my numbers are right). As such, you have a whole entire state with a rise time constant less than the update time of your system (as you’ll probably not run a control loop at more than 250Hz) - you can remove this state and model the motor as first order with essentially zero harm to the actual modeling accuracy of the system. In the case of a first order system, you can find current simply using \frac{V-K_e\dot{\theta}}{R}. If you’re creating a state space model, you can fudge this as a state with some usage of the C and D matrices. Free current will be nonzero in the second order model and should be included in the first order with that equation, but don’t quote me on that in case I’m wrong ;p

I’m attacking the same problem from the empirical/ mechanical measurement side. I have built a gearbox and flywheel system with six different motors attached so that they have essentially matched free speeds. It is composed of two AM 3-CIM gearboxes and three VPs all bolted together, with an SRX encoder on the output/flywheel shaft. I’ve finally figured out how to measure a decent speed-torque* curve and hope to have at least preliminary results by kickoff. The motors are: CIM, mini-CIM, NEO, 775pro, RedLine, and BAG. My intent is to measure their torque/speed curves at multiple throttle settings, both in acceleration and braking. I can also use a brushed motor as a torque load by shorting its leads; I anticipate using mostly the air-cooled motors for this purpose.

* relative torque, actually - measured simply as angular acceleration. As all of the motors are attached to the same system throughout the measurements, the results should be comparable.