This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

LP-MSPM0G3507: How to determine actual state of motor while using FOC algorithm

Part Number: LP-MSPM0G3507
Other Parts Discussed in Thread: DRV8329,

Tool/software:

Hello everyone, 

I'm working with the LP-MSPM0G3507 and the DRV8329 EVM, utilizing the example Field-Oriented Control (FOC) code from the SDK (mspm0_sdk_2_02_00_05). In the GUI, which I use to control the motor in continuous read mode, the motor state (such as align, idle, or closed/open loop) is displayed. However, I've noticed that when the motor stalls during the alignment phase, it sometimes incorrectly shows as being in closed/open loop.

  1. To ensure reliable operation in our application, we need a more accurate method for determining the actual state of the motor, as the current GUI representation is unreliable. Would using Back Electromotive Force (BEMF) zero crossings be a viable solution, or is there a more effective approach?
  2. Additionally, could you clarify how the example FOC code detects the motor state?

Thanks in advance.
Best regards,

Om Dave

  • Hi Dave,

    However, I've noticed that when the motor stalls during the alignment phase, it sometimes incorrectly shows as being in closed/open loop.

    Maybe you can share the motor phase current waveform (user could get it by current probe) here to help check the rootcause.

    In Align mode and OpenLoop mode, there is no additional algorithm integrated to check the motor real status. This means, in algorithm, we assume it works as expected. Thus, if the load is too heavy to spin the motor, then the motor might works abnormal. It can be fixed by increasing the align current and openloop current.

    Would using Back Electromotive Force (BEMF) zero crossings be a viable solution

    That could be. Using ADC to detect the phase voltage could be useful to check the motor status.  While, using zero crossing at a lower speed might have lots of nosie due to the BEMF is quite small. In our algorithm, we do not use this.

    Actually we provide the Abnormal BEMF detection when enter the ClosedLoop mode, it will check the estimated BMEF and the ref BEMF (get from the Ke which set by user), if the estimated BMEF out of the range, then it will report a MOTOR_STALL fault. I suppose there has some description in tuning guide.

    Additionally, could you clarify how the example FOC code detects the motor state?

    If the motor fault occurs in closeloop mode, it will report fault and stop the motor. [Most of fault detection is default disabled, need user manually enable it by pUserInputRegs]

    In addition, the algorithm does not detect the motor status and determine whether it is normal, especially in align or openloop mode.

    B.R.

    Sal