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.

TMS320F28031: BLDC Motor jerking at startup on load

Part Number: TMS320F28031
Other Parts Discussed in Thread: CONTROLSUITE

We are designing bldc motor controller using TMS320F28031. When we are testing on vehicle (battery operated) we are observing jerking at initial starting condition and once vehicle is moving it was smooth. i tried to find the issue and observed that at the start hall signals are coming in a reverse sequence for 10-12 states. it means that at the start vehicle is moving in the reverse direction and software is trying to commutate it in forward direction and due to that wrong commutation is happening and jerking sound coming.

Please suggest that what type of precautions we need to take for starting conditions and also suggest us the theory for this type of applications.

  • As mentioned in your reference link, the reason is that the commutation point or start position is not correct if you are using a hall sensor. You can't use the open-loop control as the reference code in controlSUITE for a startup if the motor is starting with the full load, and need to detect the initial position based on the input signals of the Hall sensor.

    We don't have detailed documentation about this, you might have to search this in some textbooks or engineering forums.

  • We haven't used any reference code given in controlSuite. We have written our own code to detect the HALL signals of the motor and accordingly we are doing the motor commutation. I don't think Hall sensor creating any issues here because it is running smoothly after a few seconds it means motor hall sensor giving accurate position. Motor is running smoothly if no load provided to it.

    We have tried with other motors also and same issue we are facing in all. If hall sensor creates issue then we should have get the better result at least in one motor. It is purely related to starting load conditions. I am not getting why this issue is coming on load only.

    We have searched in the forums and found that 2-3 people faces the same issue but no solutions provided to them from anybody.

  • As mentioned above, you need to design a startup control function to detect the initial position based on the input signals of the Hall sensor, and then start the motor from the right commutation step accordingly, without using a fixed commutation step to start the motor.

    And you need to tune the speed and current regulator for the startup, not use the same parameters for running the motor at high speed. This should be a generic engineering problem on the control algorithm design, is not related to the MCU controller.

  • As i mentioned above, i am not using any reference code. I am detecting the hall signal before commutation process starts and i commutate the motor only on the latest hall state. so there is no chance of doing commutation on wrong/fixed hall state. 

    And i haven't mentioned that this is the issue related to MCU controller. If you think that this is a generic engineering problem then please share some reference articles or any information so that i can use them to resolve my issues. If you don't know the exact issue or solution then please connect someone who is expert on these applications. We are using texas DSP for our products since 2008 and we expect that whenever we face some issue then Texas support engineer should show us the right path. 

  • On this forum, we are able to support specific device and reference related questions. We can just provide some common suggestions for you and we are difficult to provide such support as you want without knowing your detailed design code and more details.

    You might provide more information to show the issue.

    What control algorithm are you using? Trapezoidal control with 3 hall sensors, or sensored-foc?

    Both speed-close loop and current-close loop are implemented? Or only speed-close loop if you are using trapezoidal control for BLDC?

    How to start the motor from zero speed? Use an open loop with a forced angle? Or close-loop from the first step? Any close-loop used? 

    Any load on the motor when starting?

    And please post some waveforms of the motor phase current and commutation signals that could help us to understand the issue.

  • Hi Amit,

    Adding to Luo's last comments it was a common practice to kick start (open control loop) motor via firing a single Hall code prior to 1st commutation cycle. Older code used that method but we did not like sudden surge current with older FOC startup mode.

    The kick start principle simply calls the Hall interrupt handler to drive a code into GPIO ports for PWM drive. Note it may require the Hall sensors ring has an adjustment position relative to magnetic rotor position. Another method used linear Hall sensors and ADC to refine the rotors position under  normal and load conditions.  

  • Could you please provide more information about your design and issue? If not, we couldn't understand the root cause of the issue you met, and can't give more suggestions for you except for some common senses I mentioned above. Thanks!

  • Actually when the motor is at zero RPM and we start to rotate the motor then some noisy jerky sound coming.

    To find out what exactly happening in the motor we have observed the starting hall states of the motor and we have observed unusual behavior of the motor, it was rotating in reverse direction for one step then it starts rotating in forward direction and this back-forth rotation was there till initial 8 states, after that it runs properly.

    Hall states at the start:









    1 3 2 6 4 5 

    1 3 2 6 4 5

    Talking about the software design part:

    We are running the BLDC motor (48 poles) in open loop, Once throttle command given by the USER, command goes to RC2_MACRO() of the rmp2cntl.h library and output of this macro goes directly to BLDCPWM_MACRO(Pwm1).  We are continuously monitoring the input DC current and if DC current goes beyond than a certain limit i.e 30A then P loop comes in the picture to limit the current by reducing the error factor from the throttle command. We are only facing the issue at the startup especially on load, after a few seconds motor runs smoothly.

    Let me know if you need anymore information.

  • Hi Amit,

    Seemingly rotor searches between magnetic rotor poles (under load).

    One concept of open loop commutation first fired known code 5 (highest phase current) just after Halls interrupt kick start, to establish a known start position.

    Begs the age old question, did the chicken or the egg come first.

    Perhaps soft start commutation (longer) cycles for heavy rotor loads even with Halls, add a delay loop? The closer the first Hall code (degrees) to actual true mechanical rotor position the better, hence an adjustment to the Hall PCB assembly may reduce start position error after rotor stops moving. One would think 48 poles could easily commute over any Hall position error in software. Hall's are less battery efficient than sensorless FOC and far more troublesome in the long run.

    With open loop trapezoidal wave FOC we use {5, 1, 3, 2, 6, 4} then switch closed timer loop {5, 2, 3, 4, 6, 1,  1, 6, 2, 5, 4, 3}. Actual Hall codes depend on the translation tables in software. The use of Hall codes was for simplicity sake but with 48 poles perhaps FAST sensorless FOC would be more prudent.

  • As mentioned above, make sure that the startup and commutation index is mapped to the hall sensor input state. It seems like the motor didn't spin smoothly, and had vibration during startup. You might try to increase the duty cycle if you are using the open-loop, or the torque current if you are using the close-loop when the motor starts running. It's better to implement the speed close-loop for startup since the motor has the hall sensors.