Odrive MOSFET temperature rise measurements using the onboard thermistor

Hey everyone

I have been doing some testing on the thermal performance of an odrive V3.5 48V board. I expect results will be similar for all versions with the black heatsinks. The versions with the gold heatsinks may be slightly worse due to their lower quality thermal pads.


tldr:
Tests of the onboard thermistors show that they underestimate the MOSFETs temperature by 15C when operating at high currents and temperatures and so a safety margin of 25C is suggested. The measurements shown below indicate you should not exceed the following current set-points if you intend to operate your odrive at 100% load indefinitely (ebike, direct drive robot arm etc.) or else you risk overheating:

Heatsink only in still air: 40A
Heatsink with basic fan cooling: 75A
Heatsink with overkill fan cooling: 90A

Warning: You will overheat most motors before reaching the limits shown above so be sure to always keep an eye on your motor temperature!


Method

Odrive V3.5 48V with stock included heatsinks. Powered by 3 x 48V, 7.3A MeanWell switch mode power supplies. I am using two 150kV D6374 wired in parallel on M0 (both motors on a single channel) to act as a load for the odrive. Note that the motors can not be used this way for any practical purpose and they were only wired in parallel to help dissipate the heat generated by testing. The current was limited in firmware and the load provided by setting the motors to do an index search so that all MOSFETs experience a roughly equal load. No testing on the break resistor MOSFETs was undertaken. Ambient temperature of 13.2C for all tests. The onboard thermistor temperature was logged by modifying the ‘liveplotter’ function in the odrivetool to output the values to a text file. You can find a copy of the modified odrivetool here. To use it just replace your own copy of odrivetool and run ‘odrivetool liveplotter’ from a fresh Anaconda prompt window if you want to replicate these results.

Results

1. Temperature offset

All odrive boards have integrated thermistors located next to the MOSFET packages.

image

As of the latest firmware release the temperature of these thermistors can now be read using odrivetool. See this thread for more details. Before using the temperature readings of the thermistors @madcowswe suggested that it would be a good idea to first check that their readings are accurate. This was done by comparing the thermistor temperature reading to that of a thermocouple taped to the top of a bare MOSFET package.

During previous measurements I have soldered the thermocouple directly to the pad under the MOSFETs but I have since found that doing so leads to a large underestimation of the package temperature due to the time it takes for the heat to travel to the underside of the board.

A maximum temperature differential of 15C was observed between the MOSFETs and the thermocouple when operating at high currents and temperatures. Therefore I would suggest a 25C safety margin when relying on the thermistor temperature. With this in mind, I will keep the temperature reported by the board below 100C for the following tests.

2. Temperature rise under different cooling conditions and currents

Test 1: Exposed board in open air

If you plan on running your odrive at 100% load without a fan in a big enclosure or in open air then I would recommend keeping your current below 40A.

Test 2: Exposed board in open air with a realistically sized fan
This test uses a quiet 80mm PC fan to blow air gently over the heatsinks.

With the addition of this PC fan a constant current of 70 to 80A is achievable.

Test 3: Exposed board in open air with overkill fan
In this setup I used a powerful blower fan placed directly over the M0 MOSFETs. This setup is noisy and impractical but it shows the upper limits of what can be achieved with air cooling and the stock heatsinks. Note that I place a layer of tape over the thermistor so that it is not also cooled by the powerful fan and instead hopefully still reflects the board temperature.

Here we see 90A is achievable, but its really not worth the added noise and bulk of the blower fan. It is likely that a bigger heatsink mounted with proper thermal compound could yield similar results with the quieter PC fan.


If you plan on using this data for your own work make sure to consider the maximum ambient temperature your board will be exposed to and how that will impact your temperatures. For example, if you place your board in a water tight enclosure, put it on an ebike and take it for a ride on a warm 35C day then you may need to halve the current values listed above to prevent overheating.

15 Likes

Thank you so much for spending the time to put together this data! It very clearly illustrates the dependence on cooling for the continuous current capability.

One thing I’d like to add is that the MOSFETs junction temperature rating is 175 degC, and the thermal resistance from junction to the PCB is very low. So it’s actually not the FET that will overheat first, it is the PCB material itself, and other components around the power stage: they are only rated to 125 degC. So the upper limit for the board is probably when the thermistors actually read 125 degC, i.e. when disregarding the offset you found between FETs and thermistor.
That said, I think it’s good to have some margin, and 100 degC is certainly a good level to keep the temperature at or below.

Again, thanks for the detailed data collection.

2 Likes

Man , it’s cold in your shed :slight_smile:

3 Likes

How did you connect the 3 MeanWell power supplies? is it possible to connect them in series or parallel? do they support linear or foldback current limit? how did you reach 30, 40, 50 and 60 Amps with only 3 power supplies of 7.3 Amps each one?

Sorry for my newbie questions.

2 Likes

Hi @Nochika

Keep in mind that the current the motor sees is not the same as the current the power supply outputs. See point 2 in the link below.

As the resistance of the motors is very low (~0.035 ohm) it would be possible to supply large currents even with one power supply at standstill.

Hope that helps.

1 Like

Hi @Richard_Parsons

Thanks! it is now clearer!

However, I still have another question unanswered: did you connect, for this test, in parallel three MeanWell power supplies to power up 21.9 Amps to the motor controller?

Best,

1 Like

Yes, the three power supplies were first calibrated to have the same voltage (± 0.1V) before being connected together in parallel. Some people have said that this could be potentially dangerous but I didn’t have any problems. If you go down this path then you can keep an eye on the mains current draw via a watt meter just to make sure nothing strange is going on. I wrote about the topic of power-supplies at the link below if you would like to know more.

Thank you very much @Richard_Parsons!

One last question, by chance, did you use these power supplies?

Some people say the following about those power supplies:

“The Mean Well LRS series is not designed to have multiple power supplies connected in-parallel”

“Generally AC/DC switching (conversion from AC to DC and then DC/DC regulation) electronic supplies cannot tolerate outputs connected in parallel.”

Best,

1 Like

I was lucky enough to salvage my power supplies out of a machine that was decommissioned at my work. So I can’t help you there I’m afraid.

If the manual for the power supplies says they are not designed to be used in parallel, then it may be best that you do not use them this way for your own safety. Perhaps consider purchasing a surplus or second hand server PSU with the current capability that you need. These can be found very cheaply on Ebay provided you know the correct search terms. If you take a look at the end of that post I linked previously you can see I purchased a 42V 6kW rated PSU for about $100 USD delivered. This PSU can also be modded to increases its voltage to 48V if needed. If your still stuck feel free to stop by the ODrive discord channel to ask for further help from the community.

1 Like

I’m still trying to figure out how to limit the current properly. Reading this:

Note that above 60A, you must change the current amplifier gains. You do this by requesting a different current range. i.e. for 90A on M0: odrv0.axis0.motor.config.requested_current_range = 90 [A]

, seems like it is not enough by just setting odrv0.axis0.motor.config.current_lim, let’s say to 40 A, but you also need to set some value in odrv0.axis0.motor.config.requested_current_range. Could I just set any value bigger than odrv0.axis0.motor.config.current_lim to odrv0.axis0.motor.config.requested_current_range? or what’s the reasoning about current range with the current limit? if I want to limit the current at 40A, what current range should I set?

Best,

Are you talking about the BLDC motor or the motor controller (ODrive)? In your tests you reached 80A and 90A while the BLDC motor that you used is 70A max.

How did you limited the current that the motor sees? by changing this value: odrv0.axis0.motor.config.current_lim?