Controlling a HDD Motor

Hi there! First of all i am new in electronics however in software i have already some experience...

My question is i have a motor that is from an old HDD, and i would like to know how can i make it interact and connect to the arduino(at328). I was googling and it seems it needs 12v instead of only 5v...

Someone can explain me if there is a way to get 12v from 5v, if not what power supply i can get for 12v?

Besides that, how can i control it with the arduino, it looks it has 4 pins going out from the motor but i dont know which ones are for power or control... i am new at this and sorry for the newbie questions but i would like to learn how i can control a motor like this.

I already did with a servo motor using arduino beginner manuals but with these kind of motors i think its a rather more complicated subject.

If someone help me thank you in advance :)

Is there a brand name or model number on the HDD?

You can power it using a 12V battery or wall wart of sufficient amperage. What's sufficient? Well, that depends on the motor, which we know nothing about, except that it came out of an old hard drive.

What kind of interaction do you expect the Arduino to have with the motor? A tea party, maybe? A long, torrid love affair? Or, do you just want to turn it on and off?

sorry about not giving enough information.

The HDD is a Seagate ST3491A 428Mb. it has some label refering to 5v/12v.

The motor itself is somesort 'glued' into the disk shell, i can't take it out except for all the rest, also i can get access to 4 pins comming out from the motor.

The interaction would be simple, just knowing when he is turning, commanding to stop and moving.

Here is a product manual, don't know if this will help: http://www.seagate.com/support/disc/ata/st3491a.html

Those hard drive motors are BLDC Brushless DC electric motor, you can read more on this site http://en.wikipedia.org/wiki/Brushless_DC_electric_motor IT can have delta (3 pins)and wye (4 pins) winding styles. you can measure the resistance between the wires. From phase to phase you'll measure 2xR, from phase to neutral you'll measure R. This will let you identify the neutral. http://www.educypedia.be/electronics/motorBrushless.htm

A hard drive spindle motor is a 3-phase AC motor, not a DC motor; if you can spin one of these up, in theory you could spin up any 3-phase AC motor (even the really large ones):

http://en.wikipedia.org/wiki/Three-phase_electric_power

In order to turn one of these motors, you have to generate a phase sine-wave output, of the specific frequency for the motor, with each phase 120 degrees ahead (or behind) the other:

http://en.wikipedia.org/wiki/Three-phase

Most 3-phase stuff you see in everyday life runs off of 3-phase AC power, with each phase at a frequency of 50/60 Hz (depending on country); your home is usually a single-phase supply, but it is possible to run 3-phase stuff even then by using a particularly valued capacitor wired properly to give you the phases needed. A hard drive motor isn't much different, except for the frequency, which I would suspect to be much higher than 50/60 Hz (but I don't know what the frequency really is).

The four wires that come out of the motor are the wires that control the phases; one is a "common" wire connected to each phase (or stator coil; that is, the outer coil that doesn't move), while the other three are connected to "the other side" of each phase's coil. This configuration is called a "Y" configuration (I think it is sometimes also called a delta-configuration, but I might be wrong there), so called because the "center" of the "Y" is the common point, and the three arms of the "Y" each represent a phase coil load, with the ends being the other connections to the phase coils (and hence, a "Y" shape).

All you have to do to get started is to figure out which coil is which. The way to do this is simple: Set your multimeter to a low resistance reading level (ie, 200 ohms or whatever your low scale is), then place your multimeter probes each on one of the terminals. Note the value. Pick a probe as the "stationary probe" and note the pin number, then move the other probe to a different terminal. Note the pin number and value. Then move that same probe to the last terminal, a note the pin number and value.

If all three values are the same (or very close), then the lead you didn't move was on the "common" pin, with the other three pins being the phase coils (all resistance readings should be close to each other).

If you have a situation where one value is half as much as the other two values (approximately), then the pin where your stationary probe was is one of the phase coils end, and the position where it is half as much as the others the common point; the other two readings are the other two phase coils (double the resistance, etc - if you draw a diagram of the "Y" and put your probes on it to simulate what you are doing, you will see what I mean - at one point you only measure the resistance of one phase coil, while the other points you are measuring the resistance across two phase coils).

So - now that you know which are phases, and which is common, you can then take a look at this instructable:

http://www.instructables.com/community/hard-drive-spindle-motor/

If you notice half-way down the comments, someone posts a handy link to an Atmel Application Note on driving such motors; it is probably a handy document, so read it.

Something to keep in mind though to try, if you don't want to have to generate three sine-waves out of synch - is to use square waves; just kick a square-wave out at the proper time so that all are 120 degrees out of phase with each other, and the motor will probably spin (there might be a slight hum, it might not be as efficient or as powerful, but it will probably work!); hook up three of the output pins on the Arduino thru some transistors or MOSFETs (like you would a relay or DC motor), and the outputs of those to the motors phases (of course, your 12 volt power supply hooks up to the transistors/MOSFETs to supply the higher voltage/current to the motor's phases). Then write the code to generate the phases at the proper times for the frequency it needs (once again, I don't know what the frequency is for your motor; start at 20 Hz and move up, I guess).

Only one problem, though - you know which phase is which, but you don't know the order. But there are ways to guess; hopefully, you get lucky, and common is pin 1, and phases 1,2,3 are pins 2,3,4 of the motor - if it looks like that go with it. But if it doesn't seem to be set up that way, don't sweat it; carefully swap the phase wires around (leave the common where it is at), and note what the motor does when you run your code; you might try adding a potentiometer to the Arduino to allow you to change the frequency; spitting it out the serial port so you can take notes. Add a button you can press to signal the Arduino to switch the phases programatically (and spit out the order to the serial port).

At a certain point, with a certain frequency setting, you will see the motor twitch in one direction; keep playing with the frequency, and it should eventually spin. To make it spin the other direction, reverse the order of the phase pulses.

Hope this helps you!

Here is a practical post/tutorial on how to do something with a hard drive motor: http://letsmakerobots.com/node/2898

Thank you so much for the help, i now start to understand more on how to connect the HDD motor to the arduino and a main thank you to cr0sh he really gave a lot of good information on how i can understand more the behavior of that type of motor, i know now which pins are which :).

However i was reading the document by atmel about 3-phase brushless dc motors ( http://www.atmel.com/dyn/resources/prod_documents/doc8012.pdf ), and i couldnt still understand the motor power stage, it looks like it uses just diodes i dont see them wearing any transistors (or maybe im really not seeing the 'whole picture'). Even if there has to be transistors how can i know i need PNP transistors or NPN ?

Thank you.

Honestly , it was not so much the objective however is very interesting as you said... i would like to, but i know that i dont have sufficient knowledge on that field that i can proceed on designing from scratch a 3-phase controller.

My main objective is just putting the motor running and stopping through an arduino. I don't know if it is needed to get so much in detail to put an old HDD motor running

" Like the nature of your motor, impedance of the windings, torque, speed, the load, how much power you have to work with, etc. etc. "

Well i at least know it has to get 12v through another powe source besides the arduino.

If there is another way or someone that had the same problem and resolved i would like to know.

As i was saying, for now my objective is just putting an old HDD seagate ST3491A motor running and stopping through an arduino.

Thank you in advance.

Hi, I am also thinking to use hdd motor. I need to know how slowly I can run it?

Number one you have to realize that HD motors are designed to run at (basically) a set speed, and it is a very high speed (7200-15000 RPM); likely the motor is designed to only run at that speed (that is, the 3-phase frequency is run for that speed); anything else might make the motor run (there is probably a bit of a range), but other frequencies might just make it "vibrate" in place (although since the motors don't cog like steppers, it probably has a wider range).

No matter what, you are likely going to need a transmission of some sort to bring the speed down and increase the torque before you can seriously think about using such a motor. My gut reaction, aside from just trying to make it work to learn how, would be to avoid these motors and go for something more conventional (if you have to use brushless motors, look in R/C car brushless motors and controllers).