Let's Make Robots!

(Howto) Walz a Hard Drive Spindle Motor

an example of a driver for a brushless DC motor without microcontroller
3pulses_l293d_big.gif24.92 KB
3phase_pulsegenl293d.sch92.71 KB

This is a continuation of my blog on the same subject. Please continue your commenting here.



I am the proud owner of a stack of scavenged hard drives. I hoped to find really fast, torqueless motors inside. But instead I found myself a project for my new found 555 knowledge.

The logic chip 74164 is a "Serial In Parallel Out bit shift register" (datasheet). S1 acts as a reset button. S2 is the little white wire in the video that "boots" the sequence. Once one serial pulse makes it into the 74164, the system will maintain the sequence. When the pulse reaches the third output (red), diode D1 feeds it back to the first (green).



The motor driver is the well known L293D. The circuit with the driver is much simpler:

The EN/able pins apparently do not need pulling down to work. The three diodes D2, D3, D4 only serve to cut a tiny 0.7 V off the voltage. That keeps the current maintainable for the driver chip (rated at max. 1.0 A continues duty). I tried lowering the motor's voltage supply, but the driver would not separate the two supplies very well, when I did. It works OK when V-motor is higher than V-logic. Not the other way around.

The video lasts as long as 10 minutes. Oh, and you'd better take your sea sickness medicine! The video compression kills any details, so here is a closeup of the experiment as demonstrated.

Avenues of improvement

It has been suggested (by oddbot and robologist) that the shape of these square/block wave can be improved upon. Advantages include higher rotational speeds or power efficiency.

Also the control method can be improved a lot. Removing the need for a manual boot up and automatic ramping up of the speed.

Furthermore a decent feedback mechanism could make the driver much more intelligent. Two main alternatives remain to be inestigated: external feedback (e.g. hall effect or optical sensing) telling a processor about the state of the entire system, or internal feedback (e.g. voltage detecting on any of the motor's coils when it is not being fired) which in turn could help the exact firing of the next (round of) pulses. That could even help gradually ramping up (or down) the speed.

Practical issues

Finding the right leads. In this picture, I soldered in the wires shown. I also chose the colour coding to be like the international colour convention of traffic lights. Nothing to do with reggae or rasta.

Just as in a stepper motor, measure the resistance through the coils. In the above diagram any coil from a coloured wire to the "black center" would be a very low resistance: somewhere between 0.5 and 1.5 Ohm. You need a reasonably good multimeter (M-thingey) in order to get an accurate measurement. And some patience.

The resistance through any connection from a colour to a colour would be about twice as much.

The bottom line

You're probably better off using a microcontroller after all!

Watch this space (not the other space) for updates.



Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
As this is a brushless motor is it better to send logic 1 out on all 3 pins and energise each coil by enabling and disabling each line in turn? You can then change direction by reversing on of the phases Then pwm modulate the chips power

I was trying this out.. but for some reason.. the sequence stops after a random time interval.. its not a fixed interval.. 

this is pretty old, sorry for the bump


my mate sent me that schematic ages ago, but why wont a simple 555, and 4017 combination work?

Nobody say it won't work, did they?

Electronics is trying, and trying is learning, and learning is gaining experience, and gaining experience will lead you at last to new ideas. Kudos, Rik, trying to get on the bottom of something is the right way:)

Excellent article, it certainly answered my search for what pins to apply voltage to to make the motor turn!


I have 2 memories of things which could help this idea evolve?  Many many years ago I built a graphplotter based on 2 stepper motors, my father built the mechanics (he was an engineer) and I messed around with the electronics.  My Z80 based microprocessor system had a Parallel IO port so it was easy to generate the the pulse sequences. 

A) I think the 5V outputs then went into a power transistor wired as "open collector" which basically meant that a low voltage, low current could switch a higher voltage/current, the transistor behaved like an on/off switch.

B) the Spec Sheet for the stepper motor recommended that the coils be energised singly, and in pairs, alternately:  i.e. based on Red/Amber/Green the sequence would be R, RA, A, AG, G, GR.  When 2 coils are energised the motor only makes half a step.  This makes the stepping twice as granular, so your motor would require 18 steps in the sequence to make one turn.  My stepper motors were 180 steps per turn, and designed to turn slowly and precisely, I suspect that with only 9 steps per turn and a motor designed to turn fast then it's only about maintaining the inertia at the correct rate so I doubt this is an improvement.  It would also require diodes or AND/OR gates to help generate the pulse sequence.


Anyway, I have 10 or so old drives so I may have a play with this.  The immediate advantage of these being step motors is that it would, in theory, be possible to

1) rotate them precisely in sync;

2) wire them in parallel

Of course, I have no idea why I would want to do this, but it seems like a fun engineering objective to spin shafts at 7,000 RPM then have them wind down and still be precisiely aligned...


One last question, on some drives the motor is held in the frame on a large flange, screwed down.  On others the motor seems mounted directly in the HDD frame: any idea how to get these motors out of the frame?


Thanks again.


Don't laugh but the simple way is to cut them out.  I do, just cut wide enough to dress things up, then drill mounting holes in the corners.  Oh yeah, I cut them square.  Also you should tape the motor to keep FOD, (er... Foreign Object Debris, but you probably knew that.) from getting in around edges.

No I don't know how to ge them out. They might be press fitted. So brute force is authorized. If you destroy them, there is no loss. At any rate you will gain knowledge. Make sure to share. You now know where.

On the the other thing: I never know WHY i do things like making stupid stuff. Or rather: the why the end result has reason to be. It's about doing it, not having it.

here's what i did:

1)i set the clock around 0.25Hz then i started the 74164 shifting.here i had 47µF and 10nf in parallel.

2)i set R1 around 1K and then and then connected a pot at R2.

3)then i removed the 47µF.then the hard disk motor started squealing at a high freq. then i increased R2 and gradually the freq. decreased and then after some value of r2 the clock suddenly switched off every time i did this.and beyond that value the clock never turned on again.then when i turned back the pot (decreasing value).the clock starts after some value just as earlier.and during which the motor starts and after some value of pot. then gains some RPM and the the motor stops and the squealing takes over and the motor stalls.i tried decreasing the R2 very slowly but still the motor starts and gains some RPM and then halts again.

can you please tell me what's the problem.and can you please tell me if the value of r2 has a max. value beyond which the clock stops.is what i am doing wrong, because i coould'nt get decreasing value of capacitors?

i'm using an SMPS to power up the the circuit is it okay?because even without i sparking the pin2 of 74164 the IC starts automatically as soon as switch on the circuit. 


thank you.

You mention resistors by number, but you don't tell which circuit you're discussing. Don't make us guess.

You say your "clock switches off". Do you mean your motor stops running or do  you really see the clock pulses die? How do you see that?

By "squealing" you mean "turning really fast", right? Or is it just making high pitched noises?

Did you ever consider that my circuit is not the best way to go? I mentioned this several times across this page....