Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

to run a sensorless BLDC motor at high rpm wiithout BEMF feedback

Status
Not open for further replies.

avijit36

Newbie level 4
Joined
Dec 5, 2010
Messages
6
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,343
I got a BLDC motor from an old HDD (it has no Hall sensor). I made a driver circuit with an Atmega-8, one ULN2003, six opto-couplers and six IRF610 MOSFETS. Wrote the following C code to send sequential pulses to the gates and the motor is running freely without any kind of feedback at a relatively low speed (my idea is 4 to 5 rotation/sec). Speed is not increasing beyond that limit.

Now my question is, how may I build a logic (for C coding) to increase its speed to its maximum capable limit (of few thousand rpm) by measuring the BEMF voltages from each phase ?

Is it not possible to run the motor at high rpm freely (by stepping mode) without BEMF feedback ?

A Das


Code C - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
while(1)
{   
time_delay_int  =   (uint16_t)( Read_ADC_port_5() );
time_delay      =   (double)( time_delay_int );
 
PORTB  = 0b00110000;        
_delay_ms( time_delay );        
PORTB  = 0b00011000;
_delay_ms( time_delay );        
PORTB  = 0b00001100;
_delay_ms( time_delay );        
PORTB  = 0b00000110;        
_delay_ms( time_delay );        
PORTB  = 0b00000011;        
_delay_ms( time_delay );        
PORTB  = 0b00100001;        
_delay_ms( time_delay );
}

 
Last edited by a moderator:

Thoughts:

1. Does "_delay_ms()" accept a double as a value size?
2. You read the ADC inside the loop, this will slow it down by waiting for the ADC to complete. Can it be moved into an ISR?
3. Assuming the smallest value "_delay_ms()" will accept as a value is 1, it is used 6 times in the loop so at least 6mS is needed for one cycle of phases, is that too slow?

I'm not sure which compiler you are using and I'm not very familiar with Atmega-8 but the code looks inefficient for high speed to me.

Brian.
 

Is it not possible to run the motor at high rpm freely (by stepping mode) without BEMF feedback ?
Not reliably and certainly not efficiently.
 

Besides any code details. Running a BLDC (a synchronous machine) at high speed without sensor feedback as such isn't the problem. A problem arises if you want noticeable torque.
 

You should predict the time between each sequence. It is easy at constant speed if the motor feels no torque. You can measure its speed (at desired level) in one transition region. If it is 2 pole bldc motor, one electrical turn = one mechanical turn so that each interval is 60 degree pi/3 radian

deltaW = 2*pi*f -- f can be easily calculated if you know the speed difference so, time can be found.

or the hard way if you know the characteristics of your motor you can build a model on simulink after that you can learn the step response of the motor.
 

How this BEMF feedback voltage be used to build up the logic in Microcontroller ? Means, I want to know the sequences of operations or logic.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top