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.

DRV8305: InstaSPIN FOC sometimes killing motors at startup - soft-start option available?

Part Number: DRV8305

Hello Team,

Our motors are sporadicly killed when starting from 0. It turns out, that the position of the anchor determines, if the motor

a) starts smoothly

b) starts with a massive jerk or rattle, or

c) stalls while making loud noise and dies in 2 seconds.

The motor used has 2 magnetic poles, 40,000 rpm and is a low-inductive type.

We tried several Lab projects. Is there an option to "soft-start" motors, or start without control loop, like the DRV10876 does?

Best regards

Alois

  • Please make sure that the motor parameters are identified correctly using lab02b/02c and are set in the file of the use.h accordingly for other labs. You might take a look at chapter 14 (Managing Full Load at Startup, Low-Speed, and Speed Reversal) in InstaSPIN USer's Guide.

    InstaSPIN-FOC™ and InstaSPIN-MOTION™ User's Guide

    http://www.ti.com/lit/ug/spruhj1h/spruhj1h.pdf 

    The startup will be controlled without using the estimated angle if you enable the force angle.

  • Hello,

    Thanks for the advice. Let me evaluate some points:

    - Currently, the motor sometimes starts up very smooth from stillstand, but sometimes even jumps on the table. Once started, it rund quite good. In one out of 50 starts, it locks, makes loud noise and dies within two seconds due to current overshoot. All without any load.

    - Having changed the force angle flag from false to true, the starup from stillstand is even worse. Mostly, the motor locks.

    - I would say that the motor parameters are tuned empiric, more or less well. Once it runs, it operates good and controls speed with different load.

    - We have switched on the Rs and offsets recalculation at each startup of the device to have the correct values and eliminate motor tolerances.

    - Chapter 14 describes the full load at startup, low-speed and speed reversal cases. Our application is for nail design. That means, it may run from stillstand with or without load, it must allow speed reversal and the speed may vary from low to high. The lowest mode is ca. 1/10 of max. speed. As the controller doesn't know if the motor is in load or not before starting up from stillstand, shall we enable or disable force angle?

    In my knowledge, the InstaSPIN algorithm must know the actual angle using the signals from the Back-EMF. But when starting from stillstand, there is no Back-EMF amplitude. How does InstaSPIN estimate the anchor position and connect the right angle state to the 3-phase drive?

    Best regards

    Alois

  • You might enable the force angle and Rs re-calibration for improving the startup. The InstaSPIN uses the open loop for starting the motor without the estimation angle, the angle is generated according to the force running frequency.

    You may try to tune the variables in the file of the user.h for low speed with force angle.

    #define USER_ZEROSPEEDLIMIT   (0.5 / USER_IQ_FULL_SCALE_FREQ_Hz)  

    #define USER_FORCE_ANGLE_FREQ_Hz   (2.0 * USER_ZEROSPEEDLIMIT * USER_IQ_FULL_SCALE_FREQ_Hz) 

    Btw, please make sure that you are using the lab02c to identified the motor parameters since you are using a low inductance motor, and copy the related functions in lab02c to your project for the Rs-calibration.

  • Yes, I've used Lab2c to identify the motor.

    The Rs re-calibration and offset calibration is already running at every startup of the system. The calculated values are correct according to the motor's datasheet (Rs), or the offsets (measured in the hardware).

    I've done the following new steps:

    - Enabled force angle and changed values as adviced in the InstaSPIN-FOC and InstaSPIN-MOTION user's guide (chap. 4.4.2 and 4.4.3):

      USER_ZEROSPEEDLIMIT   (0.002) //(0.5 / USER_IQ_FULL_SCALE_FREQ_Hz)

      USER_FORCE_ANGLE_FREQ_Hz   (1.0)  //(2.0 * USER_ZEROSPEEDLIMIT * USER_IQ_FULL_SCALE_FREQ_Hz)

    No change at all. Shall we try these values experimentally, or is there a calculation rule?

    What I've done also is to reduce USER_MOTOR_MAX_CURRENT to 1.1 A as this is the rated current of the motor (was 20.0 A). The motor seems not to die anymore when a lockup happens.

    BR, Alois

  • Yes, that depends on the motor and the loading. You might try to increase the USER_ZEROSPEEDLIMIT.

    And you can use different maximum current and acceleration for the startup as the codes below.

    if(gMotorVars.SpeedTraj_krpm < gMotorVars.SpeedStart_krpm)
    {
    // set the speed acceleration
    CTRL_setMaxAccel_pu(ctrlHandle,_IQmpy(MAX_ACCEL_KRPMPS_SF, gMotorVars.StartAccel_krpmps));
    TRAJ_setTargetValue(ctrlHandle->trajHandle_spdMax, USER_MOTOR_START_CURRENT);
    }
    else
    {
    // set the speed acceleration
    CTRL_setMaxAccel_pu(ctrlHandle,_IQmpy(MAX_ACCEL_KRPMPS_SF, gMotorVars.MaxAccel_krpmps));
    TRAJ_setTargetValue(ctrlHandle->trajHandle_spdMax, USER_MOTOR_MAX_CURRENT);
    }

  • I experimentally set USER_ZEROSPEEDLIMIT to (0.01). The motor spins up with much lower rattle. We're still making tests with / without load, etc.

    What exacly does the value mean? If set to (0.01) - is this 1% (=400 RPM) of the maximum RPM (40,000 RPM), where the control switches from non-loopback to loopback operation when spinning up?

    Another question:

    Is it possible to re-sync the controller to a motor that is rotating?

    The reason, why I'm asking is, that once we turn off the motor the rotating mass will turn the motor a few seconds until it stops. If we switch on the controller before the motor stops, it apruptly forces the motor starting at 0 RPM. This results in heavy force and may destroy the motor's or the drive's mechanic construction.

    BR, Alois

  • Yes, it's PU format based on the scale frequency as the definition below in user.h.

    #define USER_ZEROSPEEDLIMIT        (0.5 / USER_IQ_FULL_SCALE_FREQ_Hz)

    I guess you want to start the motor on the fly that should call flying start. You might refer to the lab10e that provides an example of this function.