Motor Efficiency Dyno - Odrive control queries

Hey guys,

I’m considering building a motor efficiency dyno for my Final Year Project at uni as a way to parameterise off the shelf motors for our Eco Marathon team.

Plan is to use these parameters in a SIMULINK model to predict competition performance and drive car development.

My initial plan is to use two motors.
One to be tested/parameterised (torque control) & one acting as a brake/torque load (likely velocity control). This will allow me to sweep through the range of torques/speeds to capture the entire efficiency map.

My question is, how mature is the regen braking? I will need to be sinking all the output motor power (~600W peak).
Ideally, this would be fed back to the other motor, reducing power supply consumption.
If I need a braking resistor, am I right to assume I need one capable of sinking 600W?

Love to know your thoughts.

Also, the ‘sink’ motor will be mounted through a load cell to properly measure system torque.

Final question so far is am I able to get motor input power out of Odrive to work out efficiency?

This has already been done, by an ODrive user on this forum: @Richard_Parsons


I’d already stumbled upon this actually.
It looks like he’s still using a brake resistor.

How would you go about speccing a power supply, given that it doesn’t need to be able to supply the peak power, but it does need enough to supply any transient speed up/speed down moves?

I personally love this power supply:
300W output up to 60V (5A) and 15A (20V) - USB/RS232/Ethernet interface, a few Python libraries for it (e.g. KoradSerial) - it’s a rebranded Korad KWR100
also has remote sense (wire resistance compensation) and remote on/off input.

Yes, you should still connect the brake resistor even if you don’t “intend” to use it. In the newer firmwares, it acts as a DC Bus overvoltage clamp (instead of trying to sink all of the regen current) so it will serve to protect the power supply and board, but ideally it won’t be called on if your dyno is working correctly.

You can calculate the power required for a given acceleration at a given speed, by multiplying the acceleration by the inertia and velocity? (with correct SI units) :stuck_out_tongue:

Pretty sure it’s:
Inertia = J (Kg.m^2)
Velocity = w (rad/s)
Acceleration = dw/dt
Torque T = J dw/dt
Power P = T * w

Nice, I’ll take a look.

Do you think 300W is sufficient for a motor that could peak at say 600W? Assuming a situation where the ‘sink’ motor isn’t generating any power, would the PSU just limit the current to protect itself?

300W is sufficient for the motor to produce full torque at low speeds, but you can’t sustain that torque at high speeds.
IF you are running in a dyno configuration however, then the regen power from the load motor should be sufficient to provide the additional current for the drive motor.
so Yes. :slight_smile:

Yes, this PSU would limit the current - it’s a current limited as well as voltage-limited power supply. You could set it to 60V 5A and drop a dead short across the output and it would quite happily drop the voltage to whatever the parasitic resistance produces at 5A - i.e. it would cross-over into current-limited operation.

edit: obviously don’t set it to 60V with an ODrive connected - the ODrive might not be too happy about it. Use 50V instead.

1 Like


How much of a consideration do you think I need to give to cooling?
I assume throughout a test, ideally, everything would remain at a stable operating temperature as to not effect resistances etc.

I’m thinking a pc fan with 3d printed duct over the ODrive mosfets should cover their needs.
Motors however, I likely want much more stable temperature control to keep winding resistances etc consistent from run to run.

If you’re only using 600W motors, then I doubt you need any cooling at all. The bare board even with no heatsinks on should handle that happily. You need cooling when you get to the >2kW range, in my experience.
The wiring itself acts as quite a good heatsink, especially if it’s soldered on.

That said, the cooling requirement is mainly about the current in the motors. So if you have high-kV motors that need a lot of current to produce their full torque (i.e. designed for low voltage operation) then you might need cooling.
Cooling is a must if you’re going over 50A or so.

Do you have a temperature sensor in your windings? If not then you might struggle to regulate their temperature from run to run as you say.

The motor I’m hoping to characterise is the following unit from Nanotec:

I’m new to motor calcs, but if I can get Kv from rated rpm/rated voltage, that gives a Kv of 62.5 rpm/V.

I don’t believe they have any internal sensors other than Hall Effect. I guess housing temp should be a reasonable ballpark but that reading will lag well behind what the internal winding temp is thanks to all the additional thermal mass.

If you’re doing efficiency testing, I’d suggest you use a high resolution encoder on each motor rather than use the Hall sensors. (which may be what you’re doing)
Only because the drive’s commutation scheme should be more efficient with high resolution feedback - especially at the low speed end.

Those motors are rated 18A for their continuous 660W power, and 54A for their absolute maximum instantaneous peak current. Therefore I doubt that the ODrive board will need much in the way of cooling, if anything. The motors themselves are another matter.

And yes, Kv is normally expressed as RPM/V

Also, what are you using as a load motor / measurement device? Do you have a torque sensor?

I’m not sure so far about a load motor.
Given uni budgets will be slashed thanks to COVID, requirements are something that’s cheap and does the job.

Torque sensor wise my plan is to have one of the motors mounted such that the housing can still rotate about its axis. Then the torque reaction will be taken through a load cell at a set distance from the axis (M=Fd).

Something like this might do:

Only trouble with that is it has some residual friction / cogging so you won’t be able to set it to a zero or a completely constant torque. You can run anti-cogging calibration on it with the ODrive though which would help a lot.

Would I not run into issues if both motors had wildly different Kv values? I.e one motor running at a much higher voltage than another?

I doubt I’ll need to exceed probably 7500rpm or so.

No, they don’t need to be exactly equal - the drive regulates the voltage it is sending to each motor. As long as the load motor has kV equal or slightly higher than the motor under test, then you are able to cover the full range of capability of the motor under test. You don’t need the full speed range out of the load motor.
Your motor has a max speed (mechanically limited, i’d guess) of 5k rpm. I wouldn’t advise going any higher than this. Also at 62.5 rpm/v, 5k rpm produces 80V of back-EMF, which would blow up the ODrive. The highest speed you will be able to test is 62.5*56 = 3500 RPM. But it may be that it will trip out slightly lower than this, assuming you set your dc_bus_overvoltage_trip_level to 56.0

I.e I should aim to keep back emf < the voltage rating of the odrive?

Yes, if you use a high-kV motor at maximum speed to backdrive a low-kV motor, you could generate a higher voltage in the low-kV motor than the ODrive can handle.

However, the ODrive limits PWM magnitude (and therefore max speed) to 80%. So the 100 Kv motor can only run at 4.4k rpm even if by some failure mode it had a runaway.
This would generate up to 70V in your 62.5 Kv motor. However, the brake resistor would kick in at that point and prevent the DC Bus from rising above 56V (generating deceleration torque in the test motor) and raising an error condition in the ODrive which would shut off both motors.
So in short, pairing a 62.5kV test motor with a 100kV load motor shouldn’t cause any problems.

Whereas (for example) using an ODrive as a starter for a 240V petrol generator would be a bad idea, since the generator can easily overpower the brake resistor. :stuck_out_tongue:

Ah so my maximum speed is limited by:
max voltage * Kv * 80%
Using the minimum Kv of the two motors in the setup?

Also where does the 80% come from, ie what does this 20% safety factor cover in terms of odd events?