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.

MCF8316AEVM: Reverse Drive BLDC Motor Using MCF8316A

Part Number: MCF8316AEVM
Other Parts Discussed in Thread: MSP430FR2355, MCF8316A

Hi Team,

I have a fan design project, I use TI's MCF8316AVRGFR driver and MCU MSP430FR2355. So everything worked very well. However, when I set the mode change from forward rotation to reverse rotation in GUI 1.1.8 and I measured the phase current. Here is the result:

The motor is rotating forward, decreasing from high speed to low speed. When at very low speed, the motor is braked by the current on the figure and the motor rotates in reverse.

I don't understand the brake motor being used and how to generate brake current to brake the motor using MCF8316A.

Could you show me how to do it and provide some solution?

 

Regards,

Vuong N.T.

  • Hi Vuong,

    Could you please save and upload your register settings JSON file using the GUI (File menu -> Save Registers) so I can take a look at your configurations?

    When you change the direction, the motor will utilize reverse drive as shown here:

    When the motor slows down in the reverse direction to a low speed, there won't be enough back-EMF generated to provide closed loop feedback. Therefore, the device has to switch to open loop commutation (a.k.a. blind commutation) to finish the final deceleration through zero speed, then accelerate in the forward direction, until enough forward back-EMF is generated to re-enter closed loop commutation.

    During the open loop period, the device will use the open loop register configurations to determine the open loop current limit, acceleration rate, etc.

    Regards,
    Eric C.

  • Therefore, the device has to switch to open loop commutation (a.k.a. blind commutation) to finish the final deceleration through zero speed,

    Here is the current when very low speed and it made motor stopped and through zero speed. 

    What is the current and how to create the current ? What process does the horizontal current represent?



    Regards, 

    Vuong N.T.

  • Could you please save and upload your register settings JSON file using the GUI (File menu -> Save Registers) so I can take a look at your configurations?

    Here is my JSON File

    {
    "signature": "oneui-register-data",
    "data": [
    [
    {
    "idx": 0,
    "id": "isd_config",
    "value": "0x7C630C0C"
    },
    {
    "idx": 1,
    "id": "rev_drive_config",
    "value": "0x092AF064"
    },
    {
    "idx": 2,
    "id": "motor_startup1",
    "value": "0x43A806D1"
    },
    {
    "idx": 3,
    "id": "motor_startup2",
    "value": "0x181120B5"
    },
    {
    "idx": 4,
    "id": "closed_loop1",
    "value": "0x020801B4"
    },
    {
    "idx": 5,
    "id": "closed_loop2",
    "value": "0x6AF186BC"
    },
    {
    "idx": 6,
    "id": "closed_loop3",
    "value": "0x6900A00A"
    },
    {
    "idx": 7,
    "id": "closed_loop4",
    "value": "0x64F20096"
    },
    {
    "idx": 8,
    "id": "speed_profiles1",
    "value": "0x00000000"
    },
    {
    "idx": 9,
    "id": "speed_profiles2",
    "value": "0x00200000"
    },
    {
    "idx": 10,
    "id": "speed_profiles3",
    "value": "0x00000000"
    },
    {
    "idx": 11,
    "id": "speed_profiles4",
    "value": "0x00000000"
    },
    {
    "idx": 12,
    "id": "speed_profiles5",
    "value": "0x00000000"
    },
    {
    "idx": 13,
    "id": "speed_profiles6",
    "value": "0x00000000"
    }
    ],
    [
    {
    "idx": 0,
    "id": "fault_config1",
    "value": "0x4FE9024E"
    },
    {
    "idx": 1,
    "id": "fault_config2",
    "value": "0x1001FF50"
    }
    ],
    [
    {
    "idx": 0,
    "id": "pin_config",
    "value": "0x00000000"
    },
    {
    "idx": 1,
    "id": "device_config1",
    "value": "0x10100001"
    },
    {
    "idx": 2,
    "id": "device_config2",
    "value": "0x0000B000"
    },
    {
    "idx": 3,
    "id": "peri_config1",
    "value": "0x000C0000"
    },
    {
    "idx": 4,
    "id": "gd_config1",
    "value": "0x0C010000"
    },
    {
    "idx": 5,
    "id": "gd_config2",
    "value": "0x01000000"
    }
    ],
    [
    {
    "idx": 0,
    "id": "ana_trim3",
    "value": "0x48004800"
    },
    {
    "idx": 1,
    "id": "ana_trim4",
    "value": "0x00000000"
    },
    {
    "idx": 2,
    "id": "ana_trim5",
    "value": "0x00000009"
    },
    {
    "idx": 3,
    "id": "ana_trim6",
    "value": "0x00000000"
    },
    {
    "idx": 4,
    "id": "ana_trim7",
    "value": "0x00000000"
    },
    {
    "idx": 5,
    "id": "ana_trim8",
    "value": "0x00004A43"
    },
    {
    "idx": 6,
    "id": "ana_trim9",
    "value": "0x8095D820"
    },
    {
    "idx": 7,
    "id": "ana_trim10",
    "value": "0xD3700138"
    }
    ],
    [
    {
    "idx": 0,
    "id": "int_algo_1",
    "value": "0x00B34278"
    },
    {
    "idx": 1,
    "id": "int_algo_2",
    "value": "0x00000001"
    }
    ],
    [
    {
    "idx": 0,
    "id": "gate_driver_fault_status",
    "value": "0x00000000"
    },
    {
    "idx": 1,
    "id": "controller_fault_status",
    "value": "0x00000000"
    }
    ],
    [
    {
    "idx": 0,
    "id": "algo_status",
    "value": "0x00000100"
    },
    {
    "idx": 1,
    "id": "mtr_params",
    "value": "0x00000000"
    },
    {
    "idx": 2,
    "id": "algo_status_mpet",
    "value": "0x00000000"
    }
    ],
    [
    {
    "idx": 0,
    "id": "dev_ctrl",
    "value": "0x00000000"
    }
    ],
    [
    {
    "idx": 0,
    "id": "algo_ctrl1",
    "value": "0x00000000"
    },
    {
    "idx": 1,
    "id": "algo_ctrl2",
    "value": "0x00000000"
    },
    {
    "idx": 2,
    "id": "current_pi",
    "value": "0x00099132"
    },
    {
    "idx": 3,
    "id": "speed_pi",
    "value": "0x00000000"
    },
    {
    "idx": 4,
    "id": "dac_1",
    "value": "0x00000000"
    },
    {
    "idx": 5,
    "id": "dac_2",
    "value": "0x00000000"
    }
    ],
    [
    {
    "idx": 0,
    "id": "algorithm_state",
    "value": "0x00000000"
    },
    {
    "idx": 1,
    "id": "fg_speed_fdbk",
    "value": "0x7FFFFFFF"
    },
    {
    "idx": 2,
    "id": "bus_current",
    "value": "0x00000000"
    },
    {
    "idx": 3,
    "id": "phase_current_a",
    "value": "0x00000000"
    },
    {
    "idx": 4,
    "id": "phase_current_b",
    "value": "0x00000000"
    },
    {
    "idx": 5,
    "id": "phase_current_c",
    "value": "0x00000000"
    },
    {
    "idx": 6,
    "id": "csa_gain_feedback",
    "value": "0x00010003"
    },
    {
    "idx": 7,
    "id": "voltage_gain_feedback",
    "value": "0x00000001"
    },
    {
    "idx": 8,
    "id": "vm_voltage",
    "value": "0x033FC000"
    },
    {
    "idx": 9,
    "id": "phase_voltage_va",
    "value": "0x00000000"
    },
    {
    "idx": 10,
    "id": "phase_voltage_vb",
    "value": "0x00000000"
    },
    {
    "idx": 11,
    "id": "phase_voltage_vc",
    "value": "0x00000000"
    },
    {
    "idx": 12,
    "id": "sin_commutation_angle",
    "value": "0x00000000"
    },
    {
    "idx": 13,
    "id": "cos_commutation_angle",
    "value": "0x00000000"
    },
    {
    "idx": 14,
    "id": "ialpha",
    "value": "0x00000000"
    },
    {
    "idx": 15,
    "id": "ibeta",
    "value": "0x00000000"
    },
    {
    "idx": 16,
    "id": "valpha",
    "value": "0x00000000"
    },
    {
    "idx": 17,
    "id": "vbeta",
    "value": "0x00000000"
    },
    {
    "idx": 18,
    "id": "id",
    "value": "0x00000000"
    },
    {
    "idx": 19,
    "id": "iq",
    "value": "0x00000000"
    },
    {
    "idx": 20,
    "id": "vd",
    "value": "0x00000000"
    },
    {
    "idx": 21,
    "id": "vq",
    "value": "0x00000000"
    },
    {
    "idx": 22,
    "id": "iq_ref_rotor_align",
    "value": "0x00000000"
    },
    {
    "idx": 23,
    "id": "speed_ref_open_loop",
    "value": "0x00000000"
    },
    {
    "idx": 24,
    "id": "iq_ref_open_loop",
    "value": "0x00000000"
    },
    {
    "idx": 25,
    "id": "speed_ref_closed_loop",
    "value": "0x00000000"
    },
    {
    "idx": 26,
    "id": "id_ref_closed_loop",
    "value": "0x00000000"
    },
    {
    "idx": 27,
    "id": "iq_ref_closed_loop",
    "value": "0x00000000"
    },
    {
    "idx": 28,
    "id": "isd_state",
    "value": "0x00000000"
    },
    {
    "idx": 29,
    "id": "isd_speed",
    "value": "0x00000000"
    },
    {
    "idx": 30,
    "id": "ipd_state",
    "value": "0x00000000"
    },
    {
    "idx": 31,
    "id": "ipd_angle",
    "value": "0x00000000"
    },
    {
    "idx": 32,
    "id": "ed",
    "value": "0x00000000"
    },
    {
    "idx": 33,
    "id": "eq",
    "value": "0x00000000"
    },
    {
    "idx": 34,
    "id": "speed_fdbk",
    "value": "0x00000000"
    },
    {
    "idx": 35,
    "id": "theta_est",
    "value": "0x00000000"
    }
    ]
    ]
    }

  • Hi Vuong,

    Please let me review your register settings and I'll get back to you tomorrow.

    Thanks,

    Eric C.

  • Hi Vuong,

    To answer your question regarding the shape of the current waveform, the part where the current waveform appears to flatten out and become horizontal temporarily is simply the point when the rotor crosses the zero speed transition. If you monitor all 3 phase current simultaneously, you'll observe the order of the phase current changes before and after the the zero speed transition.

    During the open loop deceleration -> zero speed -> acceleration, if you have [REV_DRV_CONFIG] enabled like in your register settings, then the reverse drive specific open loop current and acceleration settings will be used:

    Regards,
    Eric C.