<< Click to Display Table of Contents >>

Navigation:  »No topics above this level«

Yet Another Universal Motor Speed Controller

Return to chapter overview

Want to do something interesting with your old washing machine motor?

Circuit diagrams and C++ code for Arduino Zero coming soon! I'm still working on the "field-assisted braking", and the ski season has started (which will delay things a bit).



Older washing machines contain a nice "universal motor", which can run on AC or DC voltages. These can go up to about 15000rpm. More recent machines contain even nicer direct-drive motors, but these are often an integral part of the drum and cannot be used separately.

The universal motor usually has an integrated "tachometer" for measuring its rotational speed. This will normally be on the end of the motor opposite the brushes. The tachometer is like a small AC generator where the frequency of the sine wave output is proportional to the rotational speed. The amplitude is also proportional (0..100V peak-to-peak on my motor), but measuring this is more difficult and not as accurate as just measuring the frequency. On my motor, the frequency is 8 times the rotational speed, e.g. there are 8 pulses per revolution, or 2KHz at 15000rpm. A simple sine-wave-to-digital converter is used to provide a frequency input for the microcontroller. This also filters out the noise, and can handle high AC voltages up to 150V p-p.

Most motors also have an integrated over-temperature thermostat which disconnects the power to the rotor if it gets too hot. This is needed if the motor gets jammed or runs too fast and the controller does not notice the problem and fails to turn it off. Our control circuit is able to measure the motor's current, so it's able to detect these problems before it overheats.

My motor has 7 connections on an 8-pin connector. Most universal motors have the same connections, but the order may be different. Some may have separate connections for the thermostat, some may have the field coils on 4 separate connectors without a centre-tap (this is better), and some may not have the field coil centre-tap. Here's the label from my motor, which shows the pin numbers. If there's no label, you can usually find the info on Internet if you have the motor's part number printed on the chassis. If not, you can usually see where the wires are connected.



Field Winding centre-tap


Field Winding 1


Field Winding 2


Rotor 1, via the thermostat


Rotor 2


Tachometer 1


Tachometer 2


Not connected

The "field winding" or "stator" generates the magnetic field. The "rotor" or "armature" is the bit that rotates. The "commutator" connects to the rotor's coils and has contacts called "brushes" which provide power to the rotor coils as it rotates. The commutator's rotating contacts change the rotor's magnetic fields relative to the field winding at the exact moment needed to turn the motor. For a more coherent description, look up "universal motor" on Wackypodia.

To control the speed of the motor, an inductive-load triac switching circuit is used to turn the rotor's power on and off in synchronisation with the mains AC voltage waveform. The power is turned off at the zero-crossing point, and on at a specific point into the AC cycle according to the desired speed. Varying the turn-on point controls the speed, a longer turn-on delay decreases the speed. This is called "leading edge phase control". To do this we need an optically-isolated "zero crossing detector" for the A/C mains input, which tells the microcontroller when to start its phase control timing cycle, 100 times a second (at 50Hz).



220-240V 50Hz A/C operation, 650W

Isolated USB connection supporting MattLab's TinySoap© protocol, for control by a desktop PC application

LCD display

Potentiometer for local speed control

Run/stop and forward/reverse controls

Speed regulation using the motor's built-in tachometer

Optically isolated zero-crossing detection, which also measures mains frequency and voltage

Leading edge phase control using a triac

Relays for motor direction and field control

Field-assisted braking

Programmable cycles using a simple ControlScript© language (you could even use it in a washing machine :-)



The prototype PCB has plug-in modules, so it's easy to change the design:

USB card (a very cheap Chinese FT232 counterfeit with no EEPROM, but it works fine up to 256kbps)

USB galvanic isolator using a ADuM1201 or ADuM1401 digital isolator chip

Arduino Zero mounted on 2.54mm headers, with a nice solution for the Arduino's very annoying non-aligned pins

Optically-isolated zero-crossing detector, with mains frequency and voltage measurement

Single transistor tachometer digitizer

650W optically-isolated triac controller

Relays for direction and field control on the motherboard


Pretty pictures



The Motor

The cute-looking motor has a 1940's gothic art-deco design. It's from an old Bosch machine. Designed in Germany, made in China.

universal-motor-2 universal-motor-3

(Mine was the 9000-210719 model, the 9000-888356 is the replacement model, but they are essentially the same)


The Windows desktop app (C#)



<full details soon...>