HDD Moteur brushless[Brushless motor]

Salut,
Ca fait depuis pas mal de temps que je me casse la tête pour contrôler un moteur de HDD avec différents montages mais en vain ... =(
Du coup je me demande si ce schéma ne permettrait pas de le faire tourner:
(désolé pour la qualité :stuck_out_tongue: )
Les espèces de serpentins sont les 3 bobines du moteur. Si je contrôle les transistors avec un arduino avec la séquence que j'ai écrit (1 signifiant haut et 0 bas), ça devrait marcher, nan ? :roll_eyes:

Merci d'avance

Hi,
I would like to make a HDD brushless motor spin. Can this wiring work ?

The three streamers are the three coils of the motor and I 'll control the transisitors with an arduino. The 0 is for low state and the 1 for the high one.

Thanks in advance

J'ai essayé mais le moteur ne tourne pas. Au mieux, il fait quelques secousses par ci par là mais c'est tout...

Post a datasheet for the brushless motor that shows the voltage and current rating and kv of the motor. Post a link to the vender of the motor. When you posted this information we can talk about your question.

What do you mean by HDD ? Explain.

Why does your drawing show 5V and 12V ?
What does that mean ?

Poster une fiche technique pour le moteur brushless qui montre la tension et de courant, kv du moteur. Poster un lien vers le vendeur du moteur. Lorsque vous avez publié cette information, nous pouvons parler de votre question.

Qu'entendez-vous par le disque dur? Expliquez.
Pourquoi votre dessin ne montre 5V et 12V?
Qu'est-ce que ça veut dire?

Hi, thank you to answer me.
The only thing I know about the motor is that it comes from a DiamondMax Plus 9 ATA
/133 2MB buffer 60Go from Maxtor.
So by HDD, I mean Hard drive disk. Here is the datasheet:
http://www.datasheets.pl/hard_drives/DIAMONDMAX_PLUS_9.pdf
I wrote 5V or 12V because it will depend on the behaviour of the motor.

Thanks a lot

All hard drives have two motors . One for rotation and the other to drive the head.
That datasheet is useless for driving the motor.
Post a photo of the motor with any writing or label or motor plate or sticker that might be on it.

I'm taalking about the one for rotation. Moreover you can see that it seems that there isn't any information: Chez TODD:DisqueDurQuiClaque

By the way, I've just seen that: primitive HDD motor driver - YouTube
And I have justly a ULN2003 like he says he is using in the video. Any idea of how making it work ?

If it is truly a brushless motor you can use an RC brusheless ESC

If you have no ide what the current rating is the motor then it makes it difficult to choose the correct ESC.
The ESC (Electronic Speed Control) can be controlled using the servo library.
The input power wires are the thick red & black wires. The motor output wires are the red , white and blue wires.
You have to provide your own connectors.

Ok thanks a lot but since I have a ULN2003, I would like to use it. And by using a ULN2003, I don't need to know the current .

Ok. Good luck generating a 3 phase sinewave signal. (with no DACs) In case you don't understand what I am saying. I am saying that I have about 15 or 20 ESCs of different current ratings and I if I had your motor in my hand right now I could have it running in 15 minutes with one or two lines of code using the Servo library and one of many Lipo batteries I have.

Ok thanks but I knew that I could buy a controller but I would like to do it with the components I have at my home :stuck_out_tongue:

Good luck with that. I have heard ot has been done but I have had no success finding the code on the web.

I'll try this Embedded Systems in Egypt: November 2010 and tell if it works :slight_smile:

I have my doubts about the STEPPER motor code at the link you posted.
I know it is PIC code but it seems overly simplistic. I haven't tried it yet and it is possible that just energizing one coil, waiting some period, then energizing the next coil and so on might work. The delay count could be used to control the speed I suppose.

__CONFIG(WDTDIS & XT & UNPROTECT);
void delay();
main()
{

TRISA=0;                TRISB=0;
PORTA=0;                PORTB=0;

for(;;)  <====EMPTY "FOR" STATEMENT
  {
        PORTB = 0X01; (hex for decimal "1")
        delay();
        delay();
        PORTB = 0X02; (hex for decimal "2")
        delay();
        delay();
        PORTB = 0X04; (hex for decimal "4")
        delay();
        delay();
  }
}
void delay()
{
int i;
for ( i = 0; i < 1000 ; i ++ );
}

First of all ,

Your 1's and 0's represent the coil enegizing sequence for a stepper motor (that you have described as a "brushless motor".
While both statements are true, it is common engineering convention to call it a stepper if you are driving it with a stepper sequence and call it a 3-phase brushless motor (you left out the part about 3-phase , I don't know why) if you are driving it with a 3-phase sinewave signals 120 degrees apart. In order to do that you need an inverter circuit (see attached schematic).

Your circuit diagram is consistent with a stepper driver circuit, not a brushless 3-phase motor circuit.
The code at the link you posted is extremely simple and I have no idea if that would work. It didn't even have comments.
All it does is turn on the three outputs one at a time. A stepper driver normally has an even number of coils

A stepper motor (or step motor) is a brushless DC electric motor that divides a full rotation into a number of equal steps. The motor's position can then be commanded to move and hold at one of these steps without any feedback sensor (an open-loop controller), as long as the motor is carefully sized to the application.

and a stepper motor. A 3-phase motor uses an inverter/converter to convert a dc power source of some fixed voltage to 3 sinewaves , 120 degrees out of phase with each other. The sinewaves may or may not be referenced to zero volts the way AC mains sinewaves are. They could be in the midrange of a dc value of say 12 to 30V

Brushless motors may be described as stepper motors; however, the term stepper motor tends to be used for motors that are designed specifically to be operated in a mode where they are frequently stopped with the rotor in a defined angular position. This page describes more general brushless motor principles, though there is overlap. Two key performance parameters of brushless DC motors are the motor constants Kv and Km (which are numerically equal in SI units).

DC brushed motors rotate continuously when voltage is applied to their terminals. The stepper motor is known by its important property to convert a train of input pulses (typically square wave pulses) into a precisely defined increment in the shaft position. Each pulse moves the shaft through a fixed angle. Stepper motors effectively have multiple "toothed" electromagnets arranged around a central gear-shaped piece of iron. The electromagnets are energized by an external control circuit, such as a microcontroller. To make the motor shaft turn, first, one electromagnet is given power, which magnetically attracts the gear's teeth. When the gear's teeth are aligned to the first electromagnet, they are slightly offset from the next electromagnet. So when the next electromagnet is turned on and the first is turned off, the gear rotates slightly to align with the next one, and from there the process is repeated. Each of those rotations is called a "step", with an integer number of steps making a full rotation. In that way, the motor can be turned by a precise angle.

Because the controller must direct the rotor rotation, the controller requires some means of determining the rotor's orientation/position (relative to the stator coils.) Some designs use Hall effect sensors or a rotary encoder to directly measure the rotor's position. Others measure the back EMF in the undriven coils to infer the rotor position, eliminating the need for separate Hall effect sensors, and therefore are often called sensorless controllers. A typical controller contains 3 bi-directional outputs (i.e. frequency controlled three phase output), which are controlled by a logic circuit. Simple controllers employ comparators to determine when the output phase should be advanced, while more advanced controllers employ a microcontroller to manage acceleration, control speed and fine-tune efficiency. Controllers that sense rotor position based on back-EMF have extra challenges in initiating motion because no back-EMF is produced when the rotor is stationary. This is usually accomplished by beginning rotation from an arbitrary phase, and then skipping to the correct phase if it is found to be wrong. This can cause the motor to run briefly backwards, adding even more complexity to the startup sequence. Other sensorless controllers are capable of measuring winding saturation caused by the position of the magnets to infer the rotor position.

Brushless motors can be constructed in several different physical configurations: In the 'conventional' (also known as inrunner) configuration, the permanent magnets are part of the rotor. Three stator windings surround the rotor. In the outrunner (or external-rotor) configuration, the radial-relationship between the coils and magnets is reversed; the stator coils form the center (core) of the motor, while the permanent magnets spin within an overhanging rotor which surrounds the core. The flat or axial flux type, used where there are space or shape limitations, uses stator and rotor plates, mounted face to face. Outrunners typically have more poles, set up in triplets to maintain the three groups of windings, and have a higher torque at low RPMs. In all brushless motors, the coils are stationary. There are two common electrical winding configurations; the delta configuration connects three windings to each other (series circuits) in a triangle-like circuit, and power is applied at each of the connections. The Wye (Y-shaped) configuration, sometimes called a star winding, connects all of the windings to a central point (parallel circuits) and power is applied to the remaining end of each winding. A motor with windings in delta configuration gives low torque at low speed, but can give higher top speed. Wye configuration gives high torque at low speed, but not as high top speed.
Although efficiency is greatly affected by the motor's construction, the Wye winding is normally more efficient. In delta-connected windings, half voltage is applied across the windings adjacent to the driven lead (compared to the winding directly between the driven leads), increasing resistive losses. In addition, windings can allow high-frequency parasitic electrical currents to circulate entirely within the motor. A Wye-connected winding does not contain a closed loop in which parasitic currents can flow, preventing such losses. From a controller standpoint, the two styles of windings are treated exactly the same.

Brushless motors fulfill many functions originally performed by brushed DC motors, but cost and control complexity prevents brushless motors from replacing brushed motors completely in the lowest-cost areas. Nevertheless, brushless motors have come to dominate many applications particularly devices such as computer hard drives and CD/DVD players.

PWM1.JPG

Actually, the motor is a 3 phase brushless motor. But if I use the shematic to control a stepper, I just have to make vary the lenght of the function delay(), no ? When I try to power to power the first coil and then the second et finally the third, (according to this Hard disk motor op arduino - YouTube knowing that when I try it, I can hear exactely like in the video but without the motion :~ )it works when the delay is superior than 300 ms. Otherwise he'll only viber. It is because of the couple of the coils, isnt' it ?

 int phase1 = 2;
int phase2 = 3;
int phase3 = 4;

unsigned long stepLength = 40000;
int minStepLength = 1400;
int steps = 5;

int led = 12;

void setup() 
  {
    pinMode(led, OUTPUT);
    pinMode(phase1, OUTPUT);
    pinMode(phase2, OUTPUT);
    pinMode(phase3, OUTPUT);
    
    digitalWrite(phase1, HIGH);
    digitalWrite(phase1, HIGH);
    digitalWrite(phase1, HIGH);
    digitalWrite(led, LOW);
     
  }   

void loop()
{
    switchStep(1);
    switchStep(2);
    switchStep(3);
    
    if (stepLength > minStepLength)
      {
        stepLength = stepLength - steps;
      }
      else
       {
         // set the minimum pulse length
         stepLength = minStepLength;
       }
       
       if (stepLength < 39950)
          {
            // second gear
            digitalWrite(led, HIGH);
            steps = 300;
          }
          
        if (stepLength < 20000)
          {
            // third gear
            digitalWrite(led, LOW);
            steps = 50;
          } 
          
          
        if (stepLength < 3000)
          {
            // fourth gear
            digitalWrite(led, HIGH);
            steps = 2;
          }   
          
          
          
          
  }
   void  myDelay(unsigned long p) 
          {
           if (p >16300)
             {
               delay (p/1000);
             }
             else
              {
               delayMicroseconds(p);
              }  
          }        
          
 void switchStep(int stage)
    {
     switch(stage)
      {
       case 1:
        digitalWrite(phase1, HIGH);
        digitalWrite(phase2, LOW);
        digitalWrite(phase3, LOW);
        myDelay(stepLength);
        break;
        
        case 2:
          digitalWrite(phase1, LOW);
          digitalWrite(phase2, HIGH);
          digitalWrite(phase3, LOW);
           myDelay(stepLength);
          break;
          
        default:
          digitalWrite(phase1, LOW);
          digitalWrite(phase2, LOW);
          digitalWrite(phase3, HIGH); 
          myDelay(stepLength);
          break;
      }
  
   
 }

I can hear exactely like in the video but without the motion smiley-confuse )it works when the delay is superior than 300 ms. Otherwise he'll only viber. It is because of the couple of the coils, isnt' it ?

You never posted your code so no one knows what you were actually doing. Without the code you used when you posted the above question it is impossible to answer your question. I don't where you could have got your code from. I doubt you got it from the same place as the code I posted.

If you post the code you were using when you posted that question I can try to answer your question.

Yes you're right I forgot to put it and yes, it is the same.
About the motor, I finally understood why the motor didn't spin when the pulsation is inferior than 300ms. It's because (as you said) from the moment the pulse in inferior than a certain value, to keep it spinning I need to use a H bridge. So I bought several L293D and I'll see when I'll have it.

Post the code you used because I don't think your code is complete.

You should post a photo of your circuit too with a schematic that shows the motor power supply voltage and what you used to provide that motor voltage. There are a number of things that could have been wrong with your circuit.