Moaar power!

Exciting news! All the existing moteus controllers in the world now have an upgraded default maximum power and upgraded rated maximum power as of release 2025-03-27! Depending upon the input voltage and PWM rate, sometimes nearly twice the amount. First, check out the comparison table, then the rationale:

Old default max / rated New default & rated
moteus-r4 340W / 450W 900W <= 30V, 400W >= 38V
moteus-c1 75W / 100W 250W <= 28V, 150W >= 41V
moteus-n1 340W / 1200W 2kW <= 36V, 1kW >= 44V

Background, why a power limit?

moteus brushless motor controllers drive 3 phase PMSM motors, accepting a DC input voltage, and outputting current to each of the 3 phases of the motor. It does so using MOSFET based switching, which alternately connects each phase to either ground, or the DC positive input. As that switching progresses, charge is either drawn, or replenished into, the onboard bulk capacitors.

For most motor controllers, their size is dominated by these bulk capacitors, which tend to be very large. One of the defining characteristics of the moteus line of controllers is the small overall volume that they occupy. One of the ways that is accomplished is by using multi-layer ceramic capacitors (MLCC) as the entirety of the bulk capacitance, rather than a more traditional electrolytic or polymer bulk capacitor supplemented by ceramic capacitors. This approach has upsides and downsides:

Pros:

  • Small overall volume

  • High capacitor efficiency, i.e. relatively lower thermal loss in the capacitors for a given load

Cons:

  • Low capacitance: MLCCs are much more expensive per unit of capacitance

  • Low equivalent series resistance (ESR): This causes both inrush current concerns and can result in degraded performance if multiple controllers are connected to the same power bus with low impedance cables.

  • DC bias derating: MLCCs lose capacitance significantly as applied voltage increases

As the bulk capacitors are charged and discharged during a switching cycle, the onboard DC bus voltage rises and falls, resulting in what is called DC ripple. For the moteus line of controllers, this ripple is what determines the maximum power rating for a board. It needs to be constrained such that the peak voltage as seen by components on the board, plus requisite margin even during transient events, stays under their maximum rated voltage. Notably, the rise and fall rate of this DC ripple is roughly constant as the switching rate changes, so that a higher switching rate will result in a lower magnitude of the ripple.

“Rated” power and “default” power

The old “rated” power for each moteus board was determined by testing each board at its maximum rated voltage, and measuring the DC ripple as the output load was increased until the DC ripple reached a suitable maximum for that controller. In the somewhat distant past, moteus defaulted to a 40kHz switching rate. To date, all boards have had their rated power based on that 40kHz rate, even though the current default is a 30kHz rate. That results in the rated power being misleading by a factor of 3/4, since most users will never change the default rate.

Second, these rated powers were measured at the maximum possible input voltage. As the input voltage is lowered, the component’s absolute max is less of a concern, and the MLCC capacitors used for bulk decoupling have a higher effective capacitance. That means that at lower input voltages, the power that moteus can output is actually higher.

Third, for no particularly good reason, the default power on moteus-n1 has historically been set at 450W @ 40kHz / 340W @ 30kHz for no good reason, despite the board being rated much higher.

To add to the confusion, the only means for changing the allowable maximum power, servo.max_power_W was not absolute, but was rather a “nominal” power “as if” the controller were running at 40kHz. Thus with the current default of 30kHz, any value the user set there would actually be 75% less.

Finally, the internal method used for limiting power was applied in a way that could easily become unstable if it came into effect while the motor was moving at a velocity sufficiently far from 0.

What is new?

As of firmware release 2025-03-27!, several changes have been made.

First, moteus now has a “factory power limit curve”, which has a “low voltage” power limit, a “high voltage” power limit and a region between which is linearly derated.

Second, the values for those regions have been re-calibrated in a consistent way across all current mjbots moteus controllers using the current default switching rate of 30kHz.

Third, the mechanism for overriding this factory default has changed. It still has the same name, servo.max_power_W, but is now specified in absolute terms. That means if you set the maximum power to 50W, moteus will limit itself to 50W no matter what your input voltage or PWM rate is (unless the factory curve is lower at that operating point). By default, this configurable value is now unset, which results in the “default” maximum power being equal to the rated board power.

Finally, moteus now limits power by limiting the controlled current, rather than by hard-limiting the voltage after current control was completed. This is a softer constraint on power, but in practice seems much more stable across a range of speeds and powering vs regeneration operation modes.

How do I get this extra power?

Just follow the instructions in the reference manual to upgrade your firmware: https://github.com/mjbots/moteus/blob/main/docs/reference.md#flashing-over-can

Do note that a higher power does not mean improved thermal performance! Operating at higher power levels will more quickly run into either controller or motor thermal limits, which will likely be a factor in many applications.