Go Down

Topic: how to drive the cd-rom brushless motor? (Read 5 times) previous topic - next topic

cxl2253

just found BA6840BFS IC can driver the cd-motor with 3-phase . i cannot find the motor stype,it is nothing  about it,maybe i will detach it to see which pin is wire A,b,c ,whici is Hall 1,2,3, etc

westfw

There's a whole cult following in converting old CDROM 3-phase motors to high-power "outrunner" motors for model planes and such.  Rewind the stator, add stronger magnets, drive with a multi-amp ESC...
While there are many different motors, the principles of the three-phase motors which are usually there are the same, and you can learn a lot from the cult, even if you don't go to the extremes...  (the motor is the same before you start mods; just not as powerful.)

   http://www.rcgroups.com/electric-motor-design-and-construction-361/

This does mean that driving such a motor from an Arduino is relatively difficult; about comparable to driving a stepper motor.  Standard circuit is a half H-bridge for each of the three wires.  I'm still looking for a simple circuit that will do for light loads...

It ALSO means that one way of driving such a motor is to buy a cheap RC Electronic Speed Controller, which the arduino can then drive as it would a servo...

cxl2253

#7
Jun 29, 2008, 02:46 am Last Edit: Jun 29, 2008, 02:47 am by cxl2253 Reason: 1
yes, now i found that it is diffcult to drive the BLDC, maybe  it is relatively easy to drive BLDC with sensor than sensorless . LBP6190 maybe meet the need if with hall sensor. But it cost nearly $2 more. Does anybody use arduino to drive BLDC without sensor ???

kiwijor

Hi, I have tried and found this Sketch useful for driving a Sensorless BLDC Motor.

Quote


// this uses the Arduino servo library included with version 0012

// caution, this code sweeps the motor up to maximum speed !
// make sure the motor is mounted securily before running.

#include <Servo.h>

Servo myservo;

void arm(){
 // arm the speed controller, modify as necessary for your ESC  
 setSpeed(0);
 delay (1000); //delay 1 seconds,  some speed controllers may need longer
}

void setSpeed(int speed){
 // speed is from 0 to 100 where 0 is off and 100 is maximum speed
 //the following maps speed values of 0-100 to angles from 0-180,
 // some speed controllers may need different values, see the ESC instructions
 int angle = map(speed, 0, 100, 0, 180);
 myservo.write(angle);    
}

void setup()
{
 myservo.attach(9);
 arm();  
}


void loop()
{
 int speed;

 // sweep up from 0 to to maximum speed in 20 seconds
 for(speed = 0; speed <= 100; speed += 5) {
   setSpeed(speed);
   delay(1000);
 }
 // sweep back down to 0 speed.
 for(speed = 95; speed > 0; speed -= 5) {
   setSpeed(speed);
   delay(1000);
 }
 setSpeed(0);  
 delay(5000); // stop the motor for 5 seconds
}  





I am building my Knowledge up to drive a large very powerful BLDC Motor.

Kiwijor 8-)

retrolefty

#9
Apr 10, 2010, 01:41 am Last Edit: Apr 10, 2010, 01:44 am by retrolefty Reason: 1
A lot can be learned reading a Atmel application docs on driving brushless DC motors:

http://www.atmel.com/products/AVR/mc/3p_bldc.asp?family_id=607

This app note looks very informative for sensorless applications:

http://www.atmel.com/dyn/resources/prod_documents/doc8012.pdf

Lefty

Go Up