3 phase sensorless BLDC speed control

I found this really cool motor inside an old western digital hard drive. I wasn’t sure what kind it was. It has four wires. After much testing with the meter and searching of different types of motors I figured out that it is a 3 phase sensorless, brushless DC motor (as opposed to brushed, unipolar stepper, bipolar stepper, sensored brushless, etc). I thought it would be simple to make work but it’s turned into a pretty complex project. This is my first real digital circuit design. In the process I’ve learned all about TTL 74 & CMOS 4000 components. It uses *no* microcontroller; the circuit is all industry standard TTL & CMOS. When researching the motor, I could not find a speed controller for that type of motor which did not use a microcontroller. It is definitely not as efficient as a microcontroller controlled motor due to the lack of pulse width modulation. Pulse width modulation could probably be added, but I’m just excited the back EMF detection is working.

the circuit

the motor




This is an extremely preliminary circuit design. A few chips could easily be designed away, and some startup logic would definitely help. It has evolved from an original idea which ended up being not quite right. A redesign of some of the timing components would help.

Circuit Description:

The 555 timer is setup to generate a clock pulse as a voltage controlled oscillator. My original idea was to adjust the control voltage based on the back EMF in order to correct the commutation but in the end the circuit doesn’t function that way. For now I left the timing circuit as is but it would function much better if setup as an astable oscillator instead of a voltage controlled oscillator. Since I’m not actually using the voltage control, pin 5 of the 555 is setup with a neutral voltage (1/2 Vcc) using a pair of 10k resistors.

When setup as a voltage controlled oscillator, the 555 generates spikes instead of a nice square wave with 50% duty cycle. In order to get a good clock pulse with 50% duty cycle, the 555 output is fed into the 4013 D flip flop which is wired to toggle it’s output. In this way the Q output can be used as a 50% duty cycle clock pulse for the rest of the circuit.
I wasn’t sure how many parts of the circuit were going to need a clock pulse but it turns out only the 4017 receives it, which means the 4013 can be eliminated entirely.
The 4017 decade counter is setup to enable 6 lines in sequence which are used to hardwire the 6 step commutation. Each of the six lines are fed through rectifiers so that they are isolated during the commutation sequence. From the rectifiers the commutation is wired to the H-bridge setup with 3 NPN and 3 PNP transistors with free wheeling diodes setup to eat the HV that may come off the motor EMF. Since the PNP transistors need inverted signals, all lines that run to the PNP side are fed through inverters first. I used a single chip hex inverter for the job. Running the clock at this point is enough to make the motor spin, but it has zero torque since any interruption will break the commutation.
From this point the back EMF zero crossing point is read off the motor using 3 op amps, one for each motor wire, which are setup to compare to the neutral motor wire. Since HV may come of the motor, a resistor stack built using 75k resistors is used to isolate the signal going to the op amps.
When the motor is running, only two wires are ever energized, leaving the third for back EMF detection. The output of the three op amps is fed to the 4066 (4 channel analog switch) which is wired as a multiplexer to enable the motor wire EMF which is not energized. The switching is done by wiring the enable lines to the appropriate output of the 4017.
At this point the output of the 4066 shows the zero crossing point of the back EMF of the motor. This zero crossing point is in turn fed to 1/4 of an LM339 comparator which is compared to a reference voltage (determined by scoping the back EMF). The output of the comparator is now an on/off tick of when the zero crossing point happens. This output is fed into an NPN transistor to invert the signal which is then used to hold the reset line of the 555 timer. This causes the clock tick to adjust based on the back emf detection, giving the motor torque.

A *lot* of improvements could be made. Mosfets would help for power output. The clock circuit is garbage. A PIC microcontroller would eliminate a lot of the complexity. Still, I wanted to put this out there so others could see it.