The circuit I have built (taken from the HIP4086A gate driver data sheet found at https://www.intersil.com/content/dam/intersil/documents/hip4/hip4086-a.pdf) is:

enter image description here

The only difference between this circuit and what I actually have is that the motor's brake is implemented mechanically (irrelevant here) and speed control has not been implemented yet - right now the duty cycle of the xHI and xLI pins are all 20%. I am using trapezoidal commutation, and so I actually have 6 pins leaving the controller instead of the 3 in the diagram (I manually invert the HI pins in the controller).

My motor is rated for 36V. When my circuit is connected to a 12V power supply with roughly 1.5A of current running through, the motor rotor vibrates, and it is physically harder to try spin the rotor manually with my hand. There is also a slight high pitched sound, but the rotor does not spin. Could this be because I am not providing enough voltage/current, or could my phases be swapped? My motor's datasheet does not provide a commutation table, so I have used this one (from this BLDC data sheet: http://cdn1.beikimco.com/Products/Dowloads_bldc_housed/motor-brushless-dc-housed-dih23-30-007a.pdf):

enter image description here

I know that my controller is parsing the Hall effect sensor inputs correctly and determine the correct state the rotor is in. I have also verified that the circuit is connected correctly. My main question is what is most likely to be the issue here? Could the issue be that my controller's clock speed is too low? (Using Arduino UNO but a Teensy 3.5 is available). Am I not providing enough current/voltage? Are my phases simply swapped?

My motor's data sheet can be found here: https://www.anaheimautomation.com/manuals/brushless/L010758%20-%20BLK24%20Series%20Spec%20Sheet.pdf.


1 Answer 1


There are three sources that I can think of for the high frequency

  1. The PWM frequency of the control signal. If you're using the analogWrite() function, it is only at a few hundred Hz. It'll control a motor, but be noisy.

  2. The behavior of the current limiting. Are you doing anything with the signal from the sense resistor going back to the controller? Since the current that will be developed through the phasees will depend on the difference between the back EMF (which varies linearly with speed) and the effective driving voltage, most controllers have some means of limiting the current if there's a large difference between the output WPM and the actual speed, and this is usually achieed by either just chopping the outputs off until the current is again below the limiting value, doing something to the controlling parameter that determines the output PWM to knock it back, or in the case of some controllers all implemented in hardware, there's a second PWM generator that will switch the outputs.

  3. (most likely) The phases are not in the sequence that the commutation table expects. The motor datasheet shows that the Hall signals are spaced at 120 degrees, so that part is correct, but if the phases are in the wrong sequence, you can get a situation where the motor rotates to a point where the Hall signals change, and in the next sector the phases are energized to provide torque in the opposite direction, so the motor just oscillates back and forth around that point. Try swapping the phase leads around, there'll likely be one combination that works. For any combination of Hall sequence, there are six possible combinations of phase connections, only one of which will work as intended.

  • \$\begingroup\$ I am not doing anything with the signal from the sense resistor, and I am not quite sure what you mean by current limiting. Could you expand more on this point? Also, could this be an issue with timing or the value of my analogWrite() function? Right now I am sticking to lower PWM values, but I am not quite sure how to proceed. Swapping the phase leads has not really changed anything, although I might have to go back and comprehensively try each combination. \$\endgroup\$
    – sudo127
    Nov 10, 2018 at 23:57
  • \$\begingroup\$ Added some more detail. If the PWM ratio is generating enough current to overcome the initial friction that shouldn't be an issue, but once you've got it going at all, you're going to have to abandon the analogWrite() and start controlling the timers that generate the PWM directly to get a reasonable frequency and resolution. \$\endgroup\$
    – Phil G
    Nov 12, 2018 at 15:44
  • \$\begingroup\$ Thanks for all this detail! So are you saying that, even though the motor has Hall effect sensors, I will still have to account for timing and such on the micro controller? \$\endgroup\$
    – sudo127
    Nov 13, 2018 at 17:37
  • \$\begingroup\$ The commutation table should account for the relationship between the sensor transitions and the required phase currents, so long as the phases are wired as the table...If there's any mechanical advance on the Hall sensors (mounted a few degrees offset from the pole centers) the motor must run in the right direction. The motor would be marked with one direction only if that were the case. Bidirectional motors will have the sensors positioned at zero degrees. \$\endgroup\$
    – Phil G
    Nov 13, 2018 at 17:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.