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.

MCF8316A: Motor keeps trying to start, but cannot advance to closed loop

Part Number: MCF8316A

Hi,

I have built a breakout that is very similar to the evaluation board and I can communicate with the controller over I2C. I set up the recommended default values and I can read them back. 

When I try to start the MPET algorithm, I always get MPET_FAULT error. I searched the forum for a long time and tried many suggestions, but I cannot get the motor to start. Unfortunately, it does not have a datasheet, so I can only measure the Rph and Lph values and I also measured the Ke back EMF constant, so that I can skip the MPET algorithm. Still, after setting the measured values, the motor does not spin up, it only tries to start over and over again. I also tried to set Kp=10 and Ki=1, but still no success.

I'm using a a salvaged BLDC motor from a floppy drive, it has 3 pins with 4 pole pairs.

I measured the voltage on one of the phases and the signal looks like this:

Can you give me guidance on how to get the motor spinning?

Best regards,

Tibor

  • Hi Tibor,

    First I recommend taking a look at the MCF8316A tuning guide for guidance on getting the motor to spin into closed loop, debugging guidance, and further tuning the motor to meet your application needs: https://www.ti.com/lit/ug/sllu335a/sllu335a.pdf. Also, please make sure to avoid sending any I2C commands to the MCF8316A device while the algorithm is not in MOTOR_IDLE state to avoid Errata #8.

    Can you provide the current register configuration being used? Also, please set all faults to latch on detection and provide the fault being reported. To set all faults to latch, set LOCK_ILIMIT_MODE, MTR_LOCK_MODE, and HW_LOCK_ILIMIT_MODE to the first option or 0b.

    Regards,

    Joshua

  • Hi Joshua, 

    I am working with Tibor on this project. 

    The register values that we are being used as follows: 

    #define ISD_CONFIG 0x00000080, 0x44638C20
    #define REV_DRIVE_CONFIG 0x00000082, 0x283AF064
    #define MOTOR_STARTUP1 0x00000084, 0x4B1E01C0
    #define MOTOR_STARTUP2 0x00000086, 0x23066000
    #define CLOSED_LOOP1 0x00000088, 0x0C318190
    #define CLOSED_LOOP2 0x0000008A, 0x1AAD0000
    #define CLOSED_LOOP3 0x0000008C, 0x00000000
    #define CLOSED_LOOP4 0x0000008E, 0x00000A26
    #define SPEED_PROFILES1 0x00000094, 0x00000000
    #define SPEED_PROFILES2 0x00000096, 0x00000000
    #define SPEED_PROFILES3 0x00000098, 0x00000000
    #define SPEED_PROFILES4 0x0000009A, 0x00000000
    #define SPEED_PROFILES5 0x0000009C, 0x00000000
    #define SPEED_PROFILES6 0x0000009E, 0x00000000
    #define FAULT_CONFIG1 0x00000090, 0x7FE80206
    #define FAULT_CONFIG2 0x00000092, 0x74000000
    #define PIN_CONFIG 0x000000A4, 0x00000002
    #define DEVICE_CONFIG1 0x000000A6, 0x00000000
    #define DEVICE_CONFIG2 0x000000A8, 0x0000B000
    #define PERI_CONFIG1 0x000000AA, 0x40000000
    #define GD_CONFIG1 0x000000AC, 0x00000100
    #define GD_CONFIG2 0x000000AE, 0x00200000
    #define ALGO_CTRL1 0x000000EA, 0x80000000
    #define ALGO_CTRL2 0x000000EE, 0x0000001E
    #define INT_ALGO_1 0x000000A0, 0x00B3607D
    #define INT_ALGO_2 0x000000A2, 0x00000039
    Monitoring the ALGORITHM_STATE Register periodically shows 0x00000011 and 0x00120014. 
    The MPET is not working properly; it measures motor resistance and inductance but cannot measure the back-EMF constant. I looked into the Tuning Guide, but nothing seemed to help, the motor was not spinning. 
  • Hi Alima,

    I recommend skipping MPET for now by manually measuring the resistance, inductance, and BEMF constant and setting the SPEED KP and KI gains to an arbitrary value. Before attempting to spin the motor, disable the speed loop by setting SPEED_LOOP_DIS to zero. Try using these settings to spin the motor. If it does not spin successfully, please provide me with a capture of the phase current and the fault that is being reported (if any are reported).

    Regards,

    Joshua

  • Hi Joshua,

    1. I tried to skip MPET and set the resistance, inductance, BEMF constant, and the SPEED KP/KI. I also disabled the SPEED_LOOP_DIS. However, the motor starts spinning and then stops when the algorithm state is 9h (MOTOR_CLOSED_LOOP_ALIGNED), with no fault reported. How can I solve this?

    2. I tried using another motor (Mexon EC motor, 3-phase, 1 pole pair). MPET is still not functioning correctly. I got the motor's resistance, inductance, and BEMF constant from the datasheet, set all these values, and the SPEED KP/KI. I also disabled the SPEED_LOOP_DIS. The motor starts spinning and accelerates really fast (the algorithm state is 8h = MOTOR_CLOSED_LOOP_UNALIGNED) and then stops with a fault.

    The CONTROLLER_FAULT_STATUS register (Address = E2h) shows 0x80900000 (ABN_SPEED, MTR_LCK). I am setting the speed to 0x4000 (50% of max speed), and the max speed is 0x012C. When I read the value from the FG_SPEED_FDBK register (Address = 216h), it shows 0x56F4DE80 (32608 rpm). The SPEED_FDBK register (Address = 752h) shows 0xA88ECF70 (63209 rpm).

    How can I fix this?

    Best regards, 

    Alima 

  • Hi Alima,

    Can you provide two captures of the phase current? Please have one capture show the entire motor operation including startup and have the other capture be zoomed in on the point where the motor fails/stops spinning.

    Regards,

    Joshua

  • Hi Joshua,

    Sure, below you can find the attachments. 

    First motor: Stops spinning, no fault detected 

    Second motor: Stops with a fault

  • Hi Alima,

    I will need some time to look into your issue. I will aim to get back with you by Friday.

    Regards,

    Joshua

  • Hi Alima,

    Please try decreasing the open loop acceleration (OL_ACC_A1) and closed loop acceleration (CL_ACC) until the motor is able to spin up correctly. We also recommend slowly increasing the speed command when SPEED_LOOP_DIS is set to 0b. When the speed loop is disabled the speed command will set the target current to the speed command % of the set current limit.

    Regards,

    Joshua