2023-11-06 10:32 PM
Hi,
[VERSION]: MCSDK 6.2.0
[TOOL]: SDK Application Code:
- single PMSM Motor
- FOC
- Sensorless Cordic
- on STM32 G4
- on the fly startup enabled
- flux weakening enabled
- speed controller
[DETAILS]:
We have a fan application with large mechanical energy and a very small bus voltage capacitor. So it happens by decreasing the speed reference in a speed controlled PI controller that the overvoltage is happening. If we use less accurate PI parameters this also happens if the fan swings over at the final speed ramp. So, there is nothing surprising here because the motor acts as generator in "brake mode".
The motor SDK has only one brake mode to avoid overvoltage and this is the extra brake resistance that could be activated at a specific bus voltage level. Is this correct observed?
The best solution for my specific application would be to short the motor winding's at low side or high side or maybe in interchange to get a good head extraction and "pump" the rotary energy in the IGBT Block and the motor winding's. I wounder a bit why this option is not part of the STM Motor Control SDK, did I miss something?
How could I start implementing this without loosing the speed reference, because I use the sensorless Cordic algorithm? It should also smoothly decelerate without stopping the motor. A smooth ramp from e.g. 3000 rpm to 1000 rpm is desired.
[EXPECTED BEHAVIOR]: maximum decelerate without bus overvoltage based on max IGBT temperature
best regards
Sebastian
2023-11-08 01:11 AM
Dear SF??r,
Over Voltage feature could be fully handled in Motor control Workbench GUI on "Bus Voltage Sensing" tab. You can Enable/Disable it and in case of overvoltage detection, you can choose to "Turn on low side switches" in "Recovery action" selector (please, have a look to this post).
In order to slow down your motor you can use a ramp setting api "MC_ProgramSpeedRampMotor1_F(DesiredFinalSpeed_RMP, RampDuration_ms)" before calling stop.
What do you intend with "without losing the speed reference"? If your goal is to restart with the current rotation speed, you can use the "On-the-fly start-up" available in "Speed Sensing Config.>Sensorless start-up parameters" tab.
2023-11-08 05:10 AM
Hi GMA,
thanks for the answer, but it is not the solution I was locking for.
The Turn On Low Side Switches are a protection feature and starts in a case of a harder fault. I'm talking about driving the ramp smoothly down, e.g. with the function you named: "MC_ProgramSpeedRampMotor1_F". If the ramp duration is to small the bus voltage rises and I am not interested in getting the overvoltage fault and make an emergency brake. I am interested to drive the ramp smoothly down and use the low side FETs brake partly/sometimes to get the brake energy into IGBT heat. It's no option to do a fast down ramp, go into emergency brake and find the speed feedback back with "on-the-fly startup".
Hopefully I could describe my thoughts.
Thanks and best regards
Sebastian
2023-11-08 06:57 AM
Dear Sebastian,
For the API itself, you can use any timing you want (e.g 20s ramp to 1000RPM):
MC_ProgramSpeedRampMotor1_F((1000), 20000);
HAL_Delay(20000);
MC_StopMotor1();