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.

BLDC_Sensored Can't Realize Lower Speed and Heavy Load Operation

The software path I used:  D:\ti\controlSUITE\development_kits\DRV8312-C2-KIT_v128\BLDC_Sensored

Hardware:DRV8312EVM RevD

I bought  a motor control evaluation kit for spinning three-phase brushless (BLDC): DRV8312-C2-KIT,I use the brushless motor matched with the official network and matching procedures.

1. I set the speed of the motor to 800rpm, and the motor can run steadily with large load. But when I set the speed of the motor to 200 rpm, the motor can not run stably with load.

If I touch the motor shaft by hand, the motor will slow down or even stop running.

2. This product I am making now requires that the motor can run steadily with load at 200 rpm. How can I modify the program to achieve 200 rpm running steadily with heavy load?

  • You need to improve the resolution of feedback speed and tune speed controller according to the running state.

    1. Hall output signal calibration.

    2. Calculate the feedback speed per each coming hall signal.

    3. Add current close loop control to improve response performance.

    The example project is just a reference, only as a demo in most cases, you have to add some own functions to improve it according to the system requirements if you want to implement it to any end equipment.

  • 1. How to Hall output signal calibration?I need to change the order of values for Hall 1. HallGpioAccepted?

    The default order is:5 1 3 2 6 4,

    Is it necessary to change it to:5 3 1 2 6 4,   1 5 3 2 6 4,  5 1 3 2 4  6,.........?right?

    // Comment the following if-else-if statements in case of 
    // inverted Hall logics for commutation states. 
    if (hall1.HallGpioAccepted==5) 
    pwm1.CmtnPointer = 0;

    else if (hall1.HallGpioAccepted==1) 
    pwm1.CmtnPointer = 1;

    else if (hall1.HallGpioAccepted==3) 
    pwm1.CmtnPointer = 2;

    else if (hall1.HallGpioAccepted==2)
    pwm1.CmtnPointer = 3;

    else if (hall1.HallGpioAccepted==6)
    pwm1.CmtnPointer = 4;

    else if (hall1.HallGpioAccepted==4) 
    pwm1.CmtnPointer = 5;

  • Right, you need to change the hall index array or adjust the connection sequence of the motor wires according to your motor. And you may add a delay compensation function to do calibration for hall sensor. We just provide some ideas for you, but we can't help you to do a more detailed design since it's an engineering topic that must be done by yourself according to the real debugging result.

  •  1.How to add a delay compensation function to do calibration for hall sensor?

    2. How to add current close loop control?Is there any reference code?

  • Unfortunately, we didn't have such a reference code for you, you have to design these functions by yourself.