I need an electric drive for a high-speed three-phase BLDC centrifuge motor. 48V, 350W, 10000rpm. I need acceleration adjustment when accelerating the engine. Optical encoder 600 pulses/revolution. I need to control the acceleration when accelerating a centrifuge from 0 to 10000 rpm in 5 ms.
What will you advice me?
Hi Alexandr,
ODrive could definitely work for your application. A few considerations:
- You should keep the max electrical frequency of the motor under ~700-1000Hz or so. That’ll mean your motor should have 6 or less pole pairs to hit your desired velocity while maintaining good control.
- 0-10,000 RPM in 5ms is incredibly fast, if your centrifuge has a moment of inertia of 5e-4 kg-m^2, then that would require ~104 Nm of torque - at 10,000 RPM that’s 108kW, which is quite a bit more than the 350W of your motor.
Did you mean 5 minutes instead of 5 milliseconds? That’s much more feasible in that case.
You can use the ODrive input mode VEL_RAMP to set a constant acceleration (set by vel_ramp_rate) while changing velocity - for instance if you want to accelerate at a constant rate to reach 10,000 RPM after five minutes, you’d configure the vel_ramp_rate (10,000/60)/(60*5)=0.556 rev/s^2 - then when commanding your 10,000 RPM (or 166.67 rev/s) velocity, the ODrive would automatically accelerate at 0.556 rev/s^2.
Thanks for your reply. The rotor of the electric motor has 4 poles. And the acceleration when accelerating the engine really goes from 0 to 10,000 rpm in 5 milliseconds. The acceleration of the centrifuge must reach at least 40,000 rpm/second. This is how the liquids are separated by density.
Hey Alexandr,
Could you share the moment of inertia of your centrifuge, and what motor you’re using? My initial feeling is that this is infeasible with just a 350W motor, but it depends on the inertia.
What encoder are you using?
I’m sorry to be late with the reply. We’re trying a Chinese GHB38 encoder, but maybe we’ll find something else. The moment of inertia is very small.
No worries!
If you use an ODrive Pro, then this may work.
You’ll need to know your system’s inertia and properly characterize the kv of your motor, then you can set the inertia parameter and set wL_FF_enable and bEMF_FF_enable.
Additionally, you’ll likely want to raise encoder_bandwidth, maybe to 2000.
As a note here, you’ll need a single pole motor. A two pole motor may work, but you may reach velocity limits around 25000 - 35000 RPM instead of your desired 40000 RPM.
The motor choice here is really going to be the critical factor.
Also ensure that the overall quadrature input rate stays below 10 MHz. If you’re using a 600 PPR encoder (2400 CPR) at 40,000 RPM, that’s 40000/60 * 2400 = 1.6MHz
. So you may want to raise this resolution for lower jitter position sensing, as long as that frequency stays below 10MHz.
There’s also the issue of your listed encoder not being able to go above 12000 RPM, or output more than 300kHz quadrature. You’ll definitely want to find a better encoder for that, unless you’re just using it for testing.