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?