Universal motor control, best solution?

Thread Starter


Joined Dec 10, 2013
Hello all :)

I've read so many stuff about speed-controlling a universal motor that I currently don't know what to do.

What I want to do: control the rpm of a universal motor.
Parts that I have to use: arduino, hall sensor, potentiometer, universal motor (230VAC, wattage usually around 250W, but might peak around 400W, max rpm: 16000)
circuit should run on 115V@60Hz and 230V@50Hz

I found 2 major solutions:
this is the same for both solutions:
- measuring the speed using a hall sensor
- setting different fix rpm values using a potentiometer

solution A) setting speed using a triac.
some people say this works, some people say it won't because the current-voltage phase shift
some say it's enough to measure the 0-crossing of the AC mains using an optocoupler, some say measure the voltage over the triac, because of the phase shift etc
for this solution I have to get the mains frequency into the equation and set the timings accordingly

solution B) this is what I kinda want to do. making a PFC that works from (let's say) 85V to 265V input, so we'll have an intermediate circuit voltage of around 380-400V DC. The universal motor can run with DC voltage without problems it seems (I hope that's really the case)
So I can control it using a PWM and a MOSFET or IGBT or something and an optocoupler to decouple the arduino from the mains. (a small PSU using a VIPer16 or something similar could be realized, too, to make the VCC for Arduino etc)

Doing this I would avoid some problems: circuit can run from 85-265V AC mains, no need to measure the main frequency, DC voltage with PWM to control the motor's drive.

But this is all I currently have on my hands, along with too many questions.
So let me start this slowly with these questions:

Is solution B indeed the way to go?
Will the motor have any problems with square-wave DC?
Do I need to ponder something like a snubber, initial current and RFI?

Thanks a lot for any reply that helps me start this project :)
BTW, I'm from Germany, so if you don't understand something at first, please ask me about it :)

With best regards,

PS: Additional stuff:
I'm an Arduino beginner, but I guess the sketch would be quite simple for solution B.
From my understanding I have to read the potentiometer using an ADC port, define a rpm value for the read-out level. Then I have to measure the rpm value, I guess this is done via interrupt (or I count the hi level on a digital port for 1 second, using millis() and a previously stored millis() value, then calculate the rpm)
after that I risen or lower the PWM value that's fed to the MOSFET/IGBT.
But again, I don't know the best way to do that without running into timing problems or cause slow reactions to speed changes.


Joined Jul 18, 2013
You will need feedback of some kind for accurate RPM control, check out Fairchild AN3006 and the Motorola TDA1085.
The TDA1085 was developed by Motorola for washing machine motors and was also used by one manuf of Treadmills for a low rpm motor, the circuit ran the Triac before a Bridge so the motor actually ran on pulsed DC.
I have the circuit used for the T.M. somewhere.
They used a low count tach of around 10 pulses/rev.
On a high rpm Universal motor, you may not get good control down below around 50% max rpm.


Thread Starter


Joined Dec 10, 2013
Hey Max, thanks for replying :)

I just noticed I forgot a few things -_-;;

- the motor will be connected to a gear box (1:8), then after that the rpm will be measured by a hall sensor board and at least 1 magnet.
- the potentiometer will be used as some kind of switch (for example, let's say it's a 360° POT, every 60° will result in a different fix rpm value. so 60° will be 200 rpm, 120° will be 500 rpm etc)
- these values might change in the future
- the motor will be secured by a over-temperature switch which can only be reset by disconnecting the mains (I'll have to check this also using a port of the arduino, but this part is kinda easy to solve)

these facts I can't change.

- what I'm not sure of is: the motor won't have problems with 380-400V DC peaks? (e.g. after bridge rect. or pfc)
- the TDA circuit will also run on 115V/60Hz?
- using a triac, would't this cause RFI, EMI or other spikes on the mains lines/power cables?

The arduino is kinda a "must"


Joined Jul 18, 2013
Using a Triac or other switchers before a bridge with the motor on the DC side offers some suppression, also a series ferrite choke can be added with a snubber across the Triac or SCR's.
The TDA is designed to run off of 120vac, but a 240v change should be possible as it is only a dropping resistor..
If you want to control it from a microchip of some kind, a D/A convertor could replace the pot?
I want one circuit for soft starting of a universal motor. Which is related to washing machine control. The PCB is to be designed for smooth starting and running with 45RPM during rinse, and 600RPM during spin of drum speed. The rinse and spin cycle will be desired by external cam timer inputs to the PCB. During rinse, the direction of the drum is to be changed periodically and 2 sec time delay is to be permitted in between.


Joined Jul 18, 2013
There is an IC developed by Motorola, TDA1085, it was developed particularly for controlling Universal motors for washing machines.
It uses a coarse type pulse detector on the shaft, ~ 6 -8 pulses/rev.


Joined Jan 23, 2018
What I did not see is how accurate the speed control needs to be. And while the torque required is not a huge thing, it certainly has a big effect on the range required from the driving circuit, because of the variable power requirements. Phase control of the mains supply to the motor will be the most efficient but probably not the simplest method


Joined Jul 18, 2013
It is possible to get accurate control of a Universal motor using a Triac, as seen by the Motorola device mentioned, also an ex member here has marketed a Universal motor router spindle controller that is used by the DIY CNC community using a pic and a triac the speed feed back is via a optic sensor using a single white spot per rev on the router, it is marketed under SuperPID.
It is Extremely accurate.