Electrical – BLDC Motor rotor vibrates with audible high pitch beep, but does not spin. Controlled by custom motor controller

brushless-dc-motorcommutationgate-drivingmicrocontrollermotor controller

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.

Best Answer

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.