Maker Pro
Maker Pro

Issue in BLDC motor

pica

Jul 7, 2017
36
Joined
Jul 7, 2017
Messages
36
Hello All,

Again, I need one more help on the sensored BLDC motor.

I am developing a driver which is having max current protection 20A. The motor is driven on 12V and 24V.

The motor is 3 phase BLDC motor.

My driver gives motor speed as 1800 RPM at 24V ,1.3A without load and 900 RPM at 12V,0.9A without load.

I have checked other 2 and 3 drivers which has dedicated IC in the circuitry for BLDC motors. They are giving following speeds,

2000 RPM at 24V , 1.5A current
1100 RPM at 12V, 1.1A current

My project is to change those dedicated IC's with micro controller. I have implemented and its working fine. All functionalities are working fine.

The project is not acceptable because of speed characteristics are not matching. Other functions are OK. Just speed characters are not fine,

It would be 1000000000 times helpful for me if you all guys will help me in this issue, So that I can submit my project.

Awaiting for your reply.
 

(*steve*)

¡sǝpodᴉʇuɐ ǝɥʇ ɹɐǝɥd
Moderator
Jan 21, 2010
25,510
Joined
Jan 21, 2010
Messages
25,510
Presumably the drive to the motor leads the position by some calculated amount. I guess that if you reduced this lead, you would reduce speed and maybe increase torque.
 

pica

Jul 7, 2017
36
Joined
Jul 7, 2017
Messages
36
Hello Steve,

Thanks for your reply.
I wanted to increase the speed.
Leads may not be the case. Other drivers have long leads.
 

kellys_eye

Jun 25, 2010
6,514
Joined
Jun 25, 2010
Messages
6,514
What are the device numbers of the dedicated device drivers?
 

Minder

Apr 24, 2015
3,478
Joined
Apr 24, 2015
Messages
3,478
To implement velocity control on a DC or BLDC motor requires some kind of feedback to the controller, from the Halls themselves other than for commutation or other means.

M.
 
Last edited:

(*steve*)

¡sǝpodᴉʇuɐ ǝɥʇ ɹɐǝɥd
Moderator
Jan 21, 2010
25,510
Joined
Jan 21, 2010
Messages
25,510
Hello Steve,

Thanks for your reply.
I wanted to increase the speed.
Leads may not be the case. Other drivers have long leads.

I wasn't referring to the length of the leads, but the number of degrees the magnetic field leads the rotor position.

With or without feedback, these motors are simply three phase synchronous AC motors. (Sure there are differences in the windings and the shape of the driving waveform, but the main reason for this is simplicity in the controller).

The purpose of the controller is to create a rotating magnetic field in the motor. Up to a point, the speed of the motor is the same as the speed of the magnetic field.

If the speed of your motor is too slow, then either you are not generating a magnetic fields which rotates fast enough, it you have reached some limit in the motor.

Presuming your control logic determines the presumed position of the motor and switches the magnetic field so that it leads the position of the motor (to pull it around), one possibility is that the proceeding time in your microcontroller is such that the lead time (time and degrees are related by the rotational speed) is reduced at high speeds. Perhaps you could modify your code to take this into account (or just make it run faster)
 

Minder

Apr 24, 2015
3,478
Joined
Apr 24, 2015
Messages
3,478
BLDC are not 3 phase motors, although they are virtually both identical.
BLDC only have 2 windings energized at any one time, as opposed to 3 phase, which is fed by three phase sine wave. They represent a DC motor turned inside out, Hence BLDC.
The difference is also in the commutation.
The pdf shows the relation ship between the sensors, hall or other, on a BLDC motor and the winding's shown by the generated signal of the motor when back fed/rotated externally.
3 phase versions have all 3 winding's energized.
M.
 

Attachments

  • commutation.pdf
    136.6 KB · Views: 68

pica

Jul 7, 2017
36
Joined
Jul 7, 2017
Messages
36
Hello steve and Minder,

I am doing exactly same way the commutation pdf you sent. But there is the same issue.

I am controlling signals from MCU. There are total 6 signals required from MCU.

From those 6 sigals Upper MOSFETS, I have configured as high and low logics.
Downer MOSFETS, I have configured as PWM signals.

Shall I reverse this thing to get more speed.

Like downer MOSFETS to be used as high and low logics and upper MOSFETS as PWM.

Does this will increase the speed?. If any way is to increase the speed, please let me know.
 

Minder

Apr 24, 2015
3,478
Joined
Apr 24, 2015
Messages
3,478
The Picmicro Picdem MC LV prototype manual may help in some way, this is the BLDC development board
You may be able to down load the S/W also.
the pdf is downloadable also from 51554b.pdf.
M.
 

pica

Jul 7, 2017
36
Joined
Jul 7, 2017
Messages
36
What to do in case of changing the speed.

I wanted to all the possible conditions to increase the speed as I wanted to submit my project as soon as possible.
 

(*steve*)

¡sǝpodᴉʇuɐ ǝɥʇ ɹɐǝɥd
Moderator
Jan 21, 2010
25,510
Joined
Jan 21, 2010
Messages
25,510
If the problem is latency in your code (i.e. poor, inefficient coding) then you can either fix the code or you can change your code to assume that the sensor position is placed a few degrees further around in the direction of rotation of the motor.

Without any further information, and presuming you haven't reached the actual maximum speed, I presume that the speed is limited because the delay between sensing (or calculating) the position of the motor and changing the voltages applied to the windings gets to the point that the motor dos not get any more net "push".

If you understand how your code works, this should be relatively easy to test/fix.
 

pica

Jul 7, 2017
36
Joined
Jul 7, 2017
Messages
36
Hello steve,

I have generated a timer of 8 micro seconds. When interrupt occurs, at the same instance hall position is taken in variable. After this, quickly I have made a switch case which switches according to that variable. In short, The mosfets are controlled by that variable value which has hall information. This I am doing in a quick time. I can not reduce the 8 microsec as then all instructions would not execute.
 

(*steve*)

¡sǝpodᴉʇuɐ ǝɥʇ ɹɐǝɥd
Moderator
Jan 21, 2010
25,510
Joined
Jan 21, 2010
Messages
25,510
When you get the position, fudge it to say the motor is a little further advanced when the motor is running at high speed.
 

pica

Jul 7, 2017
36
Joined
Jul 7, 2017
Messages
36
When you get the position, fudge it to say the motor is a little further advanced when the motor is running at high speed.

Shall I give some delay between hall sensing and switching MOSFETS?

Let me know what can be done?
 

(*steve*)

¡sǝpodᴉʇuɐ ǝɥʇ ɹɐǝɥd
Moderator
Jan 21, 2010
25,510
Joined
Jan 21, 2010
Messages
25,510
No, you need the opposite of a delay.

You need to anticipate the position of the motor.

Since I don't know how you're sending the position of the motor, it's pretty hard to be other than quite vague.
 

pica

Jul 7, 2017
36
Joined
Jul 7, 2017
Messages
36
Hello steve,

please find the below code for your reference.
Code:
ak=P6;     
 if(state==0)danticlock(&ak);



void danticlock(unsigned char *seq)
{
 switch(*seq)
 {
  case 3:
  U1=0;U2=1;U3=1;
  B1=prd;B2=ducycle;B3=prd;
  break;
  case 2:
  U1=0;U2=1;U3=1;
  B1=prd;B2=prd;B3=ducycle;
  break;
  case 6:
  U1=1;U2=0;U3=1;
  B1=prd;B2=prd;B3=ducycle;
  break;
  case 4:
  U1=1;U2=0;U3=1;
  B1=ducycle;B2=prd;B3=prd;
  break;
  case 5:
  U1=1;U2=1;U3=0;
  B1=ducycle;B2=prd;B3=prd;
  break;
  case 1:
  U1=1;U2=1;U3=0;
  B1=prd;B2=ducycle;B3=prd;
  break;
 }
}

Here ducycle is dutycycle value.
prd is maximum value of duty cycle as I am using ULN2003 which is reverse buffer IC.
 

(*steve*)

¡sǝpodᴉʇuɐ ǝɥʇ ɹɐǝɥd
Moderator
Jan 21, 2010
25,510
Joined
Jan 21, 2010
Messages
25,510
Where does seq come from?

And why is there a duty cycle involved? The main difference between a bldc and a three phase pm synchronous motor is that you supply a constant voltage to the windings for the period they are energised.

What frequency is your pwm done at? Aside from being unusual, the frequency may result in the windings being energised for a fraction of the time you expect them to be, especially at higher speeds.

If the "seq" is the motor position, and assuming it goes 1,2,3,4,5,6 then I might consider passing seq+1 to your code and higher motor speeds. Of course you will need to allow for the fact that you are now passing 7 (which should be treated as 1) to your function. This is pretty crude, but might work.

So, after seeing your code, your problem may also be due to the PWM that you already to be using as well as due to latency in your system.
 

BobK

Jan 5, 2010
7,682
Joined
Jan 5, 2010
Messages
7,682
There might be a simpler answer. Have you checked the motor terminal voltage with your driver and the working drivers? Is it possible your MOSFETS are not turning on fully and the voltage is reduced?

Are you, by any chance using N channel MOSFETS in the upper half of the bridge without a proper gate driver? This would reduce the output voltage by several volts.

Bob
 

kellys_eye

Jun 25, 2010
6,514
Joined
Jun 25, 2010
Messages
6,514
Pop by Youtube and look for GreatScott who is, co-incidentally, doing a video on BLDC drivers using Arduino and he covers such issues as start-up over-current and modified waveforms to increase torque etc.
 

pica

Jul 7, 2017
36
Joined
Jul 7, 2017
Messages
36
Hello Bob,

The motor terminal voltage is same as supply voltage i.e 24V.

Mosfets are turning On fully.
 
Top