cancel
Showing results for 
Search instead for 
Did you mean: 

STM32G030 Sensorless FOC: Startup Failure (Timeout) during Windmilling on Single-Shunt Custom Board

Elavarasan
Associate II

Hardware/Software Environment:

MCU: STM32G030K6T6

SDK: MCSDK v5.4.8 (CubeMX v6.3)

Current Sensing: Single-Shunt (Rshunt = 0.1Ω, Op-amp Gain = 7.5)

Motor: PMSM, Nominal 900 RPM.

Observer: STO-PLL, Min Reliability Speed = 350 RPM.

The Problem:

I am trying to start a motor that is windmilling at 500 RPM in the CCW direction. My application requirement is to run in the CW direction at 900 RPM.

Currently, when I call MC_StartMotor1(), the motor slows down slightly but continues to rotate CCW. The State Machine transitions from IDLE -> START, stays in START (Rev-up) for the duration of the phases, and then returns to start-up fault.

Normal start from 0 RPM works perfectly.

Rev-up Table: Phase 1 is 0 RPM (Alignment) for 2000ms at 90% nominal current. Subsequent phases ramp to +450 RPM.

Manual Braking: I have implemented a PWMC_TurnOnLowSides() call for 500ms in the CLEAR state to dissipate CCW energy, followed by PWMC_SwitchOnPWM().

Observation: Despite high alignment current, the motor "slips" and never reaches the 350 RPM CW threshold required for the Observer to signal "Reliable."

In a Single-Shunt configuration, how can I improve the "magnetic grip" during the Alignment phase to overcome -500 RPM windmilling without a BEMF sensing circuit? Also tried using On the fly start option, didn't help as expected.

Kindly give your suggestion to overcome this issue.

5 REPLIES 5
GMA
ST Employee

Hello @Elavarasan,

Using the on-the-fly feature, did you try extending the detection and breaking duration time?

If you agree with the answer, please accept it by clicking on 'Accept as solution'.
Best regards.
GMA

Hi,

I first tried increasing the detection time and braking duration in the On-The-Fly (OTF) option, but it did not improve the behavior significantly during 500 RPM windmilling.

With only the OTF option enabled and after tuning the speed PID parameters, the motor is able to recover and run properly when the windmilling speed is around 250 RPM.

To handle 500 RPM CCW windmilling, I added a call to PWMC_TurnOnLowSides() for about 500 ms in the CLEAR state. This helps reduce the windmilling speed from around 500 RPM, but after that the rotor does not align properly during the alignment phase, so the startup sequence fails.

Key details of the current setup:

  • Control method: Sensorless algorithm

  • No external feedback sensors

  • OTF startup enabled

  • Added low-side braking in CLEAR state (500 ms) to reduce high windmilling speed

What I’m looking for:

  1. Suggestions to improve startup during high-speed windmilling (≈500 RPM) in a sensorless setup.

  2. Best practices for braking or rotor alignment before startup in this scenario.

  3. Any example implementations of trapezoidal (six-step) control that I could test as an alternative approach. I’ve been trying to find references or example projects using trapezoidal control but haven’t had much luck so far.

Hello @Elavarasan,

Concerning the FOC sensorless algorithm, if extending the Br(e)aking phase is not sufficient to slow down the motor, modify Phase 1 by setting a low RPM value, for example 50 RPM, for a period long enough to make the motor rotate in the CW direction.

image.png

If you agree with the answer, please accept it by clicking on 'Accept as solution'.
Best regards.
GMA

Hi,

Thank you for your reply, I have already kept the phase one to 100Rpm followed by 250& 400Rpm. In this condition the motor can oppose and the run when the external wind speed is 300Rpm if the wind speed is more than that it cant hold and run in CW. 

If any example available for trapezoidal control kindly share the details of it. 

Hello @Elavarasan,

On-the-fly 6Step parameters are described in section 5.1.6, Rev-up component and on-the-fly start-up, of the MCSDK User Manual. Access the document through Workbench tool > About > Documentations > Documentation.

If you agree with the answer, please accept it by clicking on 'Accept as solution'.
Best regards.
GMA