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.

MSPM0G1507: cannot run lower speed?

Part Number: MSPM0G1507
Other Parts Discussed in Thread: SYSCONFIG

hi

I use example below sensorless FOC.

https://dev.ti.com/tirex/explore/node?isTheia=false&node=A__AKUmVVvwENJTxxowDwqtcg__MSPM0-SDK__a3PaaoK__LATEST&placeholder=true

 

I change below based on tuning guide in isr.c

    pUserInputRegs->isdCfg.w         = 0x6644040A;
    pUserInputRegs->closeLoop2.w     = 0xB9900C90;
    pUserInputRegs->systemParams.mtrResist        = 3650;
    pUserInputRegs->systemParams.mtrInductance    = 189;//1265;
    pUserInputRegs->systemParams.mtrBemfConst     = 9;//400;5.672*2*pi/4=8.9
    pUserInputRegs->systemParams.speedLoopKp      = 0.01;
    pUserInputRegs->systemParams.speedLoopKi    = 0.05;
    pUserInputRegs->systemParams.currLoopKp     = 1;
    pUserInputRegs->systemParams.currLoopKi     = 500;
    pUserInputRegs->systemParams.maxMotorSpeed = 1266; //4*19000/60 RPM
    pUserInputRegs->systemParams.fluxWeakeningKp     = 1.0;
    pUserInputRegs->systemParams.fluxWeakeningKi     = 500;
    pUserInputRegs->systemParams.maxMotorPower     = 10;
 
i change speedCtrl to 400.
image.png
it can run as below.
image.png
waveform is as below.
image.png

questions:

I want to run the motor at very low speed and high accuracy. but it can only run when I set >400.

any idea?

BR,

frank

  • Hi Frank,
    From what I can see, you'll have to change the values in this IRQ to change the speed. I would recommend to break down what the IQ15toIQ functions does in this case, or to simply play around with any value that will fit your application better. For reference, you can search the load value that by default is set in the sysconfig file.

    Best Regards,

    Diego Abad

  • Diego,

    I found that MIN_TARGET_SPEED  is 1342177.

    below code limit the min speed.
     
    /*! @brief minimum target duty in float */
    #define MIN_TARGET_DUTY_FLOAT                       0.01
    /*! @brief minimum speed */
    #define MIN_TARGET_SPEED                            _IQ(MIN_TARGET_DUTY_FLOAT)
            if((targetSpeed < MIN_TARGET_SPEED) ||
                    (pMC_App->maximumSpeed == 0))
            {
                targetSpeed = 0;
            }
    when I set speedCtrl= 400 => g_pAppInterface->userInputs.speedInput =1638400
    then motor can run.
    If I set below, motor cannot run.
    #define MIN_TARGET_DUTY_FLOAT                       0.001
    any idea how to adjust this value?
    BR,
    frank