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.

motor shake when power on

Hello, Chris and Adam,

Now my motor can work. my code is based on lab 13a.

when power on, the power current will get up to 1A. the big current will last for about 5 seconds. 

After 10 seconds, the motor will shake one time and then it is hold at a fixed postion.

I know that 28069 will do offset and Rs recalibration during these 10 seconds from the part 10.3 in the user's guide(www.ti.com/.../spruhj1).

But my customer can not accept this shake because it will damage the instrument on the motor.

Can I remove the motor shake by disable the offset and Rs recalibration?

Thank you

Fei

  • Why don't you try disabling the RsRecal and O.ffsetRecal (store the inverter's values in user.h pre-compile) following what you learned in proj_lab03.

    However, you will need to do something to align the rotor to the D axis. The RsRecal can do this, and you can lower the WaitTime and total current used by following the documentation in SPRUHJ1 regarding shortening start-up time. You can also skip RsRecal and just inject your own amount of Id current to align the rotor to the field.
  • Yes, I am doing a try.

    If not disable them, how can I remove the shake or weaken it?

    Where is the shake from?

    Thank you
  • depends on where the shake is from. if it's from RsRecal then you can reduce the current or remove the RsRecal altogether (but you still need to align the rotor for use with the encoder).
  • Hi, Chris,

    I found that this shake is not from RsRecal and OffsetRecal, it is from the beginning of the motor running closed loop. At that time, RsRecal and OffsetRecal have been finished. Even though the position error is 0 at that time, the controller will begin to output a control torque to the motor, there is a overshoot on the position, so I can see some shake on the motor(only last for about 1 second).

    I try to decrease the USER_MOTOR_MAX_CURRENT(from 3.0 to 1.0), the shake(overshoot) is weakened, but is not cleaned. Maybe I need a system without the overshoot. What can I do for this?

    How can I gradually increase the maximum output current to USER_MOTOR_MAX_CURRENT when getting into the closed control loop?

    Thank you

    Fei

  • have you first tried reducing the acceleration and jerk settings for your controller?
  • Hi,

    My code is based on the lab13a. In this project, it call ST_setupPosCtl(ST_Handle handle) and ST_runPosCtl(ST_Handle, CTRL_Handle). It did not call ST_setupPosMove(ST_Handle handle) and ST_runPosMove(ST_Handle).

    In the function ST_runPosCtl, it sets Velocity Reference and Acceleration Reference, but these two default values are 0.

    In the function ST_setupPosMove, it set the Velocity limit and Acceleration limit.

    where can I reduce the acceleration and jerk values?

    Thank you

    Fei

  • Fei,

    I think the issue is that in lab 13a, the position reference is always set to 0.  This means that after successfully aligning the motor and encoder, there is now a position error.  Since the position reference is not exactly equal to the position feedback.  

    During the RsRecalibration you can try setting the position reference to be equal to the position feedback.  This should make it so that there is not shaking when the power is applied.

    STPOSCTL_setPositionReference_mrev(stObj->posCtlHandle, STPOSCONV_getPosition_mrev(stObj->posConvHandle));

    Another thought I had, are you confident that the motor is getting a good alignment between the motor and encoder during RsRecalibration?  If there is much error in the calibration that will cause the controller to need to apply more torque than is required in order to move the motor.

  • Thank you, Adam,

    Two questions.

    where can I find the RsRecalibration function to insert the STPOSCTL_setPositionReference_mrev?

    How can I know if it is good align or not?


    Fei
  • Fei Yan1 said:
    where can I find the RsRecalibration function to insert the STPOSCTL_setPositionReference_mrev?

    You will want to put that inside the if statement where the zero offset is set for the ENC module.

    Fei Yan1 said:
    How can I know if it is good align or not?

    Does the motor physically move during the RsRecalibration procedure?  If the motor has varying levels of torque each time you start it up that could indicate that the alignment isn't good.  You can also increase USER_MOTOR_RES_EST_CURRENT_A to be equal to USER_MOTOR_MAX_CURRENT this way you are using enough current to force the motor and encoder into alignment.