Estimating the power dissipation of a motor controller

Whether designing a custom ESC based on Mitochondrik or using a complete ESC from Zubax Robotics, it is usually necessary to predict the power dissipation of the motor controller itself to design the heat sinking solution accordingly. A simple model that provides a first-order approximation of the heat loss of a motor controller is given in our old write-up: How I Learned to Stop Worrying and Love ESC Development - #5 by alexander.sysoev

In order to apply said model to a custom motor controller, one needs to simply consult with the chosen application parameters and the datasheets for the power electronic components chosen for the design. In the case of the ESCs designed by Zubax Robotics, it is usually necessary to contact us to obtain the required information, such as the transistor R_{DS(on)}, rise and fall time, shunt resistance, and so on (do not hesitate to do so, we respond quickly).

Once the numbers are obtained, they need to be simply plugged into the formulas to obtain the heat loss estimate. The following Python script will compute the key loss figures based on the user-provided inputs:

import math

# Application parameters
F_switch    = 29400     # [hertz]   Depends on the Telega version used and its configuration
u_dc        = 4.2 * 6   # [volt]    Maximum operating voltage
i_amplitude = 40        # [ampere]  Use the maximum expected current amplitude

# The numbers given below are valid for Zubax Myxa (all models)
R_ds        = 4e-3      # [ohm]     Worst-case drain-source resistance per transistor
R_shunt     = 3e-3      # [ohm]
t_rise      = 8e-9      # [second]
t_fall      = 25e-9     # [second]
P_dc        = 0.1       # [watt]    Approximate maximum loss within the DC link

# Apply the model
i_rms = i_amplitude / math.sqrt(2)
P_ohmic = i_rms**2 * R_ds
P_switching = u_dc * i_rms * (t_rise + t_fall) * F_switch
P_shunt = i_rms**2 * R_shunt
# 3 transistors conduct at any time instant; 4 are switching plus 1 constantly conducting DC and 1 closed.
P_total = 3 * P_ohmic + 4 * P_switching + 2 * P_shunt + P_dc

print(f"{P_ohmic=:.2f} {P_switching=:.2f} {P_shunt=:.2f} {P_total=:.1f}")

One potentially challenging aspect is finding the phase current amplitude and the required DC link voltage for the given load parameters. The following spreadsheet will help to that end:

For the related theory, please refer to the Telega Reference Manual.

Edit 17.07.2023: a mistake has been corrected in the script.