Other Parts Discussed in Thread: DRV8305
Hello,
I'm helping a customer that is developing an application is based on a custom HW board using TMS320f28069m uC and DRV8305 driver. We post it on here since we believe the answer might be helpful to others.
They are in reverse, flying at 14-15m/s with a 9x6 propeller attached to a AXI2808/20 PMSM motor (parameters attached). They would spin in reverse with an acceleration >7.5 kRPM (accel = f(speed) has a trapezoidal aspect). Part of the time, everything went well, but in some cases, they are facing an issue : motor stays stucked at 0 RPM, it does not switch to reverse.
As recommended in another post, they did the following :
- Decrease acceleration close to 0RPM to 1kRPM/s (before 7.5kRPM/s) -> An important improvement has been observed. Still some cases remaining (during startup and during reverse)
- Complete removal of the RsOnline feature -> An important improvement also, no bad case detected
- Decrease acceleration & complete removal of RsOnline feature -> Good behavior, no more issue detected, we are going to launch further tests (>1000 startup + reverse phases & flight tests)
- Use low acceleration and different Kp&Ki, control bandwidth of speed regulator for startup and add a limitation value ( the output of speed regulator) for startup also.
- Use the instaSPIN-motion for velocity control in this case and turned off the force angle feature (“gMotorVars.Flag_enableForceAngle” set to 0)
- Tune the control bandwidth by changing the “gMotorVars.SpinTAC.VelCtlBw_radps” as the following code in project, and the “gMotorVars.SpinTAC.VelCtlOutputMin_A” to limit the maximum torque current for startup also.
// set the SpinTAC (ST) bandwidth scale STVELCTL_setBandwidth_radps(stObj->velCtlHandle, gMotorVars.SpinTAC.VelCtlBw_radps); // set the maximum and minimum values for Iq reference STVELCTL_setOutputMaximums(stObj->velCtlHandle, _IQmpy(gMotorVars.SpinTAC.VelCtlOutputMax_A, _IQ(1.0/USER_IQ_FULL_SCALE_CURRENT_A)), _IQmpy(gMotorVars.SpinTAC.VelCtlOutputMin_A, _IQ(1.0/USER_IQ_FULL_SCALE_CURRENT_A)));
Since it's still note working perfectly every time, can you help us respond to the following questions :
- When we try to have square curves as input (-10000RPM -> 10000RPM -> -10000RPM), we can observe that acceleration is not updated as we ask. (STVELMOVE_getAccelerationLimit answers the maximal value we have set, but the STVELMOVE_getActualAcceleration answers very far). Do you have any idea ?
- When we activate RsOnline at a middle RPM range (between 4000 and 8000), we still have issues at reverse, do you have any explanation ?
- We tried to decrease again acceleration to 0.5kRPM/s, reduce Jerk and maximum current output but we still have some percentage of failures. Can you clarify the startup sequence and the state of the flags please ? Do you an idea on how to fix it ?
- We tried to set and log the bandwidth, but got bandwidth is not equal to the one we have set. How and why the controller changes it ?
Thanks for your support !
Best Regards,
Mickael