Hard drive step motor has trouble starting

A few days ago I got a step-motor from a broken hard drive and was curios about making it work.

I could make it spin and it goes at the correct amount of steps, but has trouble starting and staggers/jumps at low speeds.

The motor is labeled “NIDEC F0819423f”, but I couldn’t find specifications about it.
I’m using an arduino-Uno board with an atmega328 for this.

It has 4 pins which I checked with a cheap LCR-meter.

Connection Impedance Inductivity
1-2 1.4Ω 150µH
1-3 1.4Ω 150µH
1-4 1.4Ω 150µH
2-3 2.8Ω 520µH
2-4 2.8Ω 520µH
3-4 2.8Ω 520µH

From this I guessed it’s a 3-phase-motor with 1 being GND and 2-4 phases.
Since it’s from a hard drive, it’s probably operated with 5-12V.

I generated 120° phase shifted 50% signal on the digital outputs and first tried directly driving the motor without load, which worked pretty well without anything getting hot.
Then I did this half-proper with npn-transistors as gates to use 12 V later on and take the load of the arduino outputs.
The proper way would probably be to buy a driver, like the L293D.
The components get a bit hot with this configuration, though… I probably made a mistake at calculating the resistors.

Now the motor turns with 4 phase-periods per rotation and somewhat stable from 0.5-6 rps, but does not start without turning it by hand at the correct speed.

I once read this might indicate a missed phase or a phase-problem, but this seems fine so far.
Or would I need a “starter” to overcome the initial load?

motorteset.ino (1.7 KB)

Almost all motors regardless of type have a minimum speed at which they will rotate.
The specs for the motor will often give those numbers in some form.
It could be the minimum voltage or amps required or in some cases pulses and or duration of pulse.

Factors like that can often be offset in the program in a few ways.
My own preference is to MAP the minimum so that if it really takes 0.5 amps to trigger then anythin below that will be regarded as zero.

Try swapping things around.
NPN are better at sinking current vs sourcing current in this configuration.

A single phase will draw 3.6 A from 5V, steady state.

What is the purpose of R4? What transistors did you use?

Thank you all for the quick replies!

I try to limit the current drawn by the coils since otherwise there is only the impedance between power and ground.
Transistors are bc547B.

You mean replace R4 with a potentiometer and see at what resistance it starts on its own? I don#t have a variable power-supply, so I can only work with fixed voltages at mapping out. ^^

Thanks for the hint! I will try it out tomorrow when I have a bit more time.

I try to limit the current drawn

R4 and the 100 mA collector current rating of the BC547 explains the poor performance.

I'm surprised it works at all. At the very least you need transistors that can handle much higher current, with appropriate base resistors (e.g. 330 Ohm), in the common emitter configuration suggested in reply #2.


Simply program it to run at a set speed in your sketch until you find where it stalls.
Add a suitable small amount extra so it does not stall and use that as your reference to zero by using the MAP function.

@ jremington
Thanks for the hint and the edit with the suggestion!

I replaced R4 with 56 Ohm, limiting current to 89 mA and replaced R1-R3 with 600 Ohm with the circuit from reply #2. Now components stay cool. ^^
It also still works that the motor is turning if I start it by hand, but 83 mA is probably too little.
L293D is rated for 600 mA per channel, so I guess that is more common. ^^
Since I don't have transistors with higher ratings here, I will probably get an L293D and try with that.

I tried different speeds, and with starting-help it only rotates at 0.8 - 2.2 rps, but without help it does not start rotating.
As mentioned above I guess the current is too low to drive it correctly.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.