BLDC ESC not working well

Thread Starter

assassin1452

Joined Jul 21, 2014
8
Hi,
I have a project of building a sensorless Electronic Speed Controller for Brushless DC Motor. I first made a research to understand how does the electronic components work , how does the motor work and to know some methods that allow controlling these motors. Then, I made a circuit on a solderless breadboard, and wrote the code and after testing on an HDD brushless motor and finding problems on the circuit or on the code, and after solving these problems, I was able to make an HDD brushless motor turn with a variable speed, and the ESC worked. The problem is that the motor doesn't start turning untill I raise PWM duty cycle to 60%, can someone explain me why?
Thank you
 

Alec_t

Joined Sep 17, 2013
14,313
Welcome to the forum!
We know nothing of your HDD motor specification, so explanation is difficult. Can you be sure the motor is sensorless? What driver circuit are you using? A schematic would be helpful.
 

kubeek

Joined Sep 20, 2005
5,795
I guess you will have to post your schematic and code.
Do you ramp up the speed when you start the motor? Also realize the motor will need a lot of current to overcome the initial forces from the magnetic poles. After it has sufficient speed the inertia of the rotor will be enough to overcome it.
Also I am not sure you need pwm at all, the motor should be turning at whatever commutation speed you have set and lowering the power by pwm will only reduce its available power.
 

Thread Starter

assassin1452

Joined Jul 21, 2014
8
The circuit for detecting the zero cross is this one: each phase is connected to a loww pass filter to filter the PWM signal, the filtered signals are connected using resistors to form a virtual neutral point, the virtual neutral point is connected to 3 comparators (-) inputs, each filtered signal is connected to one comparators (+) input, the signal on the output of the comparators is used to detect the zero-cross. I think this circuit is working well because I tested it on the oscilloscope and checked it and the motor spins well at high PWM duty cycle (or high voltage applied), but doesn't move or moves a little bit and stops at low PWM duty cycle (or low voltage applied)
And in the circuit there is a charge pump, 6 MOSFETS mounted as an H-bridge, the microcontroller.
You talked about current, I think the problem is maybe from the power supply, can you please give me some details about that
Here is basicly what the code does:
Open-loop:
-The PWM duty cycle is set by default to 20%, and the PWM is activated
-The motor is first moved to a certain default position and after 15ms the high MOSFETS are desactivated, and the low MOSFETS are activated
-After 15 ms, the first two windings that were energised to position the motor are re-energised and this is the first commutation step.
-The microcontroller executes 6 commutations with a interval of time between two commutation of 15 ms by default.
-After 6 commutations, this interval is reduced by 1 ms.
-The microcontroller does 6 commutations and reduces the interval by 1 ms after each 6 commutation steps, and continues doing that untill the interval between two commutations is 3 ms.
-The microcontroller executes the closed loop.
Closed loop:
-The microcontroller, after the previous commutation, waites for the zero-cross and calculates the time between the commutation and the zero-cross.
-The microcontroller, after detecting the zero-cross, waites for the amount of time previouslt calculated before commutating.
-The microcontroller commutates and excecutes the closed loop again.
 

Thread Starter

assassin1452

Joined Jul 21, 2014
8
I tried to increase the interval between two commutations to approximately 52 ms as beginning, but it doesn't work, maybe, at low PWM duty cycle, the interraction between the rotor and the stator magnetic fields is not sufficient to make it move, am I right, or is there another explaination to that?
 

MaxHeadRoom

Joined Jul 18, 2013
28,686
What DC voltage level are you using? The rotor inertia has to be overcome in order to get the motor turning, the customary value of the DC supply is at Least 110% of the motor rated voltage and can go to 150% for a PWM controller.
Max.
 

Thread Starter

assassin1452

Joined Jul 21, 2014
8
I'm using a 12V DC voltage.
And what does it mean to overcome the rotor inertia, can you please give me more details?
The motor rated voltage? Where can I find this info?
Thanks
 

MaxHeadRoom

Joined Jul 18, 2013
28,686
The motor plate or the spec sheet for it should give all motor details.
If it is actually a 12v, motor with PWM control you should be able to go up close to 18vdc supply.
Max.
 

kubeek

Joined Sep 20, 2005
5,795
And what does it mean to overcome the rotor inertia, can you please give me more details?
The rotor has some weight and is stationary at the beginning. You cannot make it instantly run at certain RPM, you have to ramp the RPM slowly enough so that the motor doesnt slip and lose "traction" relative to the magnetic field that is trying to rotate it.
 

Thread Starter

assassin1452

Joined Jul 21, 2014
8
Actually, I'm using a 12V DC power supply, I don't know it's rated voltage, it's an HDD brushless motor.
So there is a friction force that resist the motor movement, so should I use a high PWM duty cycle at the beginning to increase the magnetic force that should attract the rotor and be higher than the friction force, then decrease the duty cycle untill it reaches a low value, or use a low PWM duty cycle and just increase the time between two commutations, so that it has enough time to move to the next position?
Thanks
 
Last edited:

MaxHeadRoom

Joined Jul 18, 2013
28,686
The really effective way to control any motor is with some kind of feedback, and operate either in the velocity mode or torque mode for position control, using either tachometer method or encoder feedback..
In the case of VFD's that control an AC induction motor, a method is used to sense several operating conditions such as current rpm etc, and the frequency is adjusted in order to maintain the RPM, called Sensorless Vector control.
With using a higher voltage, more energy or higher mean current is sent to the motor for a given PWM ratio.
Max.
 

Thread Starter

assassin1452

Joined Jul 21, 2014
8
I'm using the comparators signals to determine the zero-crossing points, but first I should start the motor from standstill, and that what open loop does, but as you said, the motor should overcome the inertia of the rotor (and also the load inertia), but how can I do the start-up correctly, should I start with a high PWM duty cycle or a low duty cycle, should I start with a high commutation frequency or a low commutation frequency?
Thanks
 

MaxHeadRoom

Joined Jul 18, 2013
28,686
This is where feedback of any kind comes in, you really need to know what the motor is doing and take some action based on that.
Otherwise you are operating it blind.
Max.
 

djsfantasi

Joined Apr 11, 2010
9,163
Disclosure: I am not familiar with BLDC motors, but do know from model railroading about controlling permanent magnet brushed DC motors. Linn Westcott in 1962 developed a "True Action" speed controller or "throttle". The TAT would start with short pulses of DC at the motor's voltage rating (12vdc per National Model Railroading Association standards). Then, as the speed requested increased, the pulses would disappear. As Bruce Metcalf wrote, "Extensive research has shown that the best possible drive signal for control of modern DC per-mag model railroad motors is a fixed DC signal with short pulses added at low speeds to overcome starting friction and low-speed non-linearities."

The article (which can be found here) also has diagrams of the waveform produced by the True Action Throttle.

I apologize if this doesn't apply (please let me know if this is the case), but posted it for general information.
 

kubeek

Joined Sep 20, 2005
5,795
but how can I do the start-up correctly, should I start with a high PWM duty cycle or a low duty cycle, should I start with a high commutation frequency or a low commutation frequency?
Well obviously you cannot start at high commutation freqency and go to a lower frequency since the motor will not even start to move like that. The motor at standstill is at zero RPM, so you need to start drving it close to zero RPM to get it gradually moving. The slope of the ramp will depend on rotor inertia, but you could ramp it up very slowly without any trouble. Actually your driver should be able to rotate the motor veeeery slowly, like 1 revolution per second without damaging anything.

Can you post the details of your motor? BLDC and stepper motors have various nummber of poles, so you get different angle of the shaft per full commutation, so say with 10hz commutation frequency some motor will do 300 RPM and some will do for example 150RPM, which influences your startup commutation frequency.

Because there are ususally quite large static forces that hold the rotor in place you want the PWM to be as high as you can, but not too high so that you don´t exceed the motor´s recommended current. The motor doesn´t create any back EMF when running slow, so the stall current will be mostly limited by the resistance of windings, which usually means it is 10-20x higher than the full power full RPM running current.

P.S please post the actual circuit, not just your wording of it. A picture is worth a thousand words. Also the actual code will be appreciated.
 

MaxHeadRoom

Joined Jul 18, 2013
28,686
But when starting it from standstill, isn't it commutated blindly? I'm aiming to build a sensorless ESC
The only Popular motor that is capable of operating accurately in a blind fashion is the open loop stepper motor, and provided that the mechanics of the system has been designed accurately, the acell/decel/rpm rate is governed directly by the step rate of the control pulses.
Is see this is for a ESC motor so It looks like it is in the realm of RC motors?
I am more familiar with the BLDC motors used in motion control, I have never looked in to the requirements of the ESC motors, but there appears to be quite a bit out there on the web in the way of controllers.
Max.
 
Top