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.

InstaSPIN FOC lab2b Motor won't run after Identification

Other Parts Discussed in Thread: BOOSTXL-DRV8301, LAUNCHXL-F28069M

I had a working setup where both the Identification and the Run stages worked OK for quite a while.

I'm using BOOSTXL-DRV8301 with LAUNCHXL-F28069M, some China made 24V/10A/3000rpm 4-pole BLDC, and CCS 6.0.

Since I switched to MW 15 identification is OK,  but the Motor won't run. Instead, the Identification process repeats (!) even with Flag_MotorIdentified = 1. I tried reverting back to MW 14, tried switching boards with new ones of the same part# to no avail. Identification repeats instead of the motor run, then motor start making loud noise, vibrating and drawing high current. Have to disable the controller.

Could be something simple I'm missing (after I did this lab dozens of times with success).

For reference here are some results of Identification and Run

Identification EST state sequence
        EST_State_Idle                   0
        EST_State_RoverL             1 no rotation
        EST_State_Rs                    2 no rotation
        EST_State_RampUp          3  rotates
        EST_State_RatedFlux_OL 4  no rotation (very brief)
        EST_State_RatedFlux        5  no rotation
        EST_State_Ls                     6  no rotation
        EST_State_RampDown      7  no rotation and usually a loud noise with vibration (brief)
        EST_State_Idle                   8

id    Rs_Ohm      Lsd_H              Flux_VpHz    RoverL   RampUP    RampDown  Ident    Run
---------------------------------------------------------------------------------------------------------------------------------------------------
1     0.174075    0.003770678    0.06959469                  rotates       noise        OK       runs identification instead of motor Run
2     0.16026      0.003770678    0.07042854   1268       rotates       noise        OK       runs identification instead of motor Run
3     0.16584      0.003770678    0.06638835   1303       rotates       noise        OK       runs identification instead of motor Run
4     0.16893      1.950954e-09   0.05772831   1317       rotates       no noise   OK       runs identification instead of motor Run

Any hints are appreciated.

  • Figured this one. For those frustrated like myself here is the closure:

    1. Parameters (Ls particularly) are not always correctly identified. For my motor Ls is apparently significantly (3 or 4 orders) less than e.g. 0.003770678. Today I had success with Ls=1.950954e-09 but I was able to run with 0.00007 before.

    2. After the motor is identified the Flag_enableSys has to remain ON i.e. 1 to be able to perform the Motor Run with identified parameters. If Flag_enableSys is reset then on the following Flag_Run_Identify=1 the EST will start identification again even with MotorIdentified=1 and other identified parameters still showing up in the debugger.  Bug? If the system is supposed to be reset on Flag_enableSys=0 then all parameters have to be cleared to prevent confusions. I may miss something here though.

    For reference the identified parameters in my last successful test:

        Rs_Ohm      Lsd_H/Lsq_H   Flux_VpHz    RoverL
        -----------------------------------------------------------------
        0.14913     1.950954e-09    0.05210412   1195

    Identification EST state sequence: Idle -> RoverL -> Rs -> RampUp -> RatedFlux_OL -> RatedFlux -> Ls -> RampDown -> (MotorIdentified*) -> Idle     (*never seen this one showing in the debugger but InstaSPIN guide mentions it)

    Motor Run EST states:              Idle -> Rs -> OnLine

  • an Ls of 1 e-09 isn't real. you won't have a motor that has less than a few e-06 Henrys of inductance.

    are you using proj_lab02c to ID this motor?

    post your user.h file

  • Wow, didn't expect a reply by now. Thank you.


    I realize that 'e-9' is a bogus value. However, that's what the debugger window shows, and the motor runs OK with it right after the identification.

    If I put a value on the order of 'e-9' into the user.h, the program throws 'USER_ErrorCode_ctrlFreq_Hz_Low'. So, playing around with the Ls it settles to Min 0.00001 when no 'USER_ErrorCode_ctrlFreq_Hz_Low' is thrown and the motor runs OK.

    I tried both lab2b and lab2c and didn't find a considerable difference. Both often identify Ls too high4657.user_j5.h, and both run happily when Ls shows on the order of 'e-9'. I never saw Ls identified on the order of 'e-5'. It always either too high or too low.

    Please see user_j5.h is attached

    Thank you

  • your PWM is running too fast without using decimation. it means the interrupt is running at 30 KHz, which is too high. You are right on the edge of using all of the CPU during the interrupt.

    try
    #define USER_NUM_PWM_TICKS_PER_ISR_TICK (2)

    to give an effective 15 KHz ctrl rate.


    this is too low
    #define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0)

    it needs to be ~10% of the rated speed. Try (60.0)

    does the motor start spinning during RampUp and keep spinning? It needs too. If not, increase
    #define USER_MOTOR_RES_EST_CURRENT (1.0)

    until it does
  • Yep, that made a difference. Now the whole ID process runs differently. I increased USER_MOTOR_RES_EST_CURRENT to 2 and set other parameters as advised. Now the motor starts running at RampUp. Speeds up to 3 krpm i.e. the max speed of this motor, and keeps running with the speed of 0.3..0.6 krpm through the rest of ID until RampDown.

    Below are results of 3 ID runs using lab2c

    ID  Rs_Ohm     Lsd_H/Lsq_H   Flux_VpHz

    1   0.15303      0.000114135     0.0519262
    2   0.160935    0.0001133273   0.05209219
    3   0.159135    0.0001241508   0.05197695

    I tested the above parameters with labs 3a and 3b too. Works well. I guess this thread can be marked as answered.

    Thank you