Controlling Speed of Generator

Hi all - I am very new to electronics so I apologize for the lack of knowledge.

I am looking to do a small project using a scroll expander connected to a generator in order to create power. The mechanical energy would be sourced from a pressurized air stream flowing through the scroll expander. The air stream is somewhat irregular and would cause fluctuations in the rotational speed. In an effort to make things more complicated I wanted to see if it were possible to control the rotational speed of the expander/generator using the Odrive.

The two questions I am trying to answer are:

1.) How would you best manage the irregular rotational speed to produce cleaner power (BLDC with an inverter)?

2.) Would the ODrive be able to control the rotational of the generator?

I appreciate any help.

I think the simplest way would be to use the ODrive in velocity mode and then just set a velocity setpoint. Then the motor + scroll expander should run at that speed independent of the air pressure: the braking/generating torque would be modulated to match to keep the speed constant.

The main complication would be tuning the velocity control loop gains, but hopefully some trial and error can land you on something reasonable.

Of course this would mainly work if you have a battery or supercapacitors attached to the DC bus that is buffering the power, and you would need to have an external controller that ramps down the velocity setpoint if it starts getting overcharged.

Thanks Madcowswe.

I do plan to have a better attached.

Do you have any recommendations on an external controller?

For the external controller: A teensy, raspberry pi, or even a pc could work.


This is probably not forum for this question, but maybe I can get some help.

If it wanted to do this same setup but scale up to say 1-3 kW. What would you all change.

From my research it seems like an AC generator with an invertor is the best option, but I am not sure how I would control speed.

Any help is appreciated.

ODrive can do 1-3kW, so not really much to change.

1 Like

This is a fundamental misunderstanding. Generating clean DC power doesn’t depend much on the speed of the BLDC, and in fact trying to get the ODrive to run the target speed will make it worse, as it will introduce power ripples in the DC bus when you switch from generating to motoring.

You need DC bus current / voltage control, which we don’t currently have, but you should be able to get close by putting the odrive in torque mode and ramping up the torque target, or maybe in velocity control with a target velocity of 0rpm (not the desired speed).

It really depends on what they mean by “clean”. If you want constant power, then yes you need a special control mode which we don’t have.
If you just want good velocity control, and then let the battery buffer the power fluctuations, without excessive spikes or noise (this is “clean”), then you are good to go with just velocity control.

Apologies - the confusion is a result of my lack of fundamental understanding of generation and electronics in general.

I would assume that for now that generator is connected to a battery, lets say a typical car battery. The goal would be to charge the battery and control the rotational speed of the generator/expander combo. The issue I run into would be that the control of speed would need to happen around the clock and without any help from valves on the pressurized stream.

Again - probably not the place for it, but would a BLDC be best for the operation or would an induction motor or invertor be a better choice?

I think a brushless motor and an ODrive should be able to do this job well.

Thanks for the input.

Question on generator load. Assume the work is the same on the generator and you slow down rotational speed. Where would that work go? Does it become dissipated at heat?

Also - I am struggling to understand the differences between controlling the generator with O drive versus controlling it with a VFD.

When the ODrive is controlling a motor as a generator, and it puts a braking torque on the shaft, it acts like a generator. The work/power is converted to electrical energy which is pushed as current onto the DC power terminals of the ODrive.


Once that current hits the DC power terminals of the ODrive how is it dissipated? Is it as heat or does it need a load?

@Soul, you may want to read how battery charging works. An ODrive that has regen (=generator mode) enabled sort of assumes your DC bus is connected to a rechargeable battery. This bus is used to power up the electronics of the ODrive and potentially to drive a motor, but as @madcowswe has mentioned, if a braking torque is applied (regen/generator mode), the power direction is reversed - power is taken from the motor and pushed to the DC bus, raising its voltage. The battery counteracts this raising - current starts flowing into the battery, so it is now charging. If you keep doing this - something spins your motor and the ODrive applies braking torque - the battery will keep charging until it is 100% charged. When this happens, there would be no where for the energy to go. This is where you need some external logic (the external Teensy/Raspberry Pi/PC mentioned), which needs to act to prevent battery overcharge. This will e.g. disable the regen, or add an external load, likely a properly-sized resistor, to turn the excess energy into heat, as you’ve suggested.


Thanks for all the input everyone. I have been digging into this over the last month and wanted to come back here and get thoughts on the benefits of using ODrive over a phase angle fired power controller such as this one. (

With my limited knowledge, its seems the phase angle fired power controller would be better suited for controlling a generator while ODrive might be better suited for a motor.

Any insight is much appriciated.

ODrive’s FOC based control is optimal also for a generator, and should perform better than a phase angle based controller.

Could you explain the differences (pro/con) of Odrive vs phase angle controller for a generator?