Hello all
I came here because of the Rigol DSOs but just looked around the forum some more and found this branch.
I've read so many stuff about speed-controlling a universal motor that I currently don't know what to do.
This is what I want to do: control the rpm of a universal motor, using Arduino.
Parts that I have to use and prerequisites:
- 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
- the motor will be connected to a gear box (1:
, then after that the rpm will be measured by a hall sensor board and at least 1 magnet (don't know if 1 or 2 yet).
- 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)
I found 2 major solutions:
solution A)
setting speed using a triac.
some people say this works, some people say it won't because of the current-voltage phase shift
some say it's enough to measure the 0-crossing of the AC mains using an optocoupler, some say I have to 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, I think
solution B) is what I prefer.
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 power MOSFETs or IGBTs or something and an optocoupler to decouple the Arduino from the mains.
(a small PSU using a VIPer16 or something similar could be realized on board, too, to generate the VCC for Arduino)
With this solution I would avoid some problems: circuit can run from 85-265V AC mains, no need to measure the mains 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 asking this:
- Is solution B indeed the way to go?
- Will the motor have any problems with square-wave DC voltage?
- Do I need to ponder something like a snubber, high initial current and RFI?
Thanks a lot for any reply that helps me starting this project!
BTW, I'm from Germany, so if you don't understand something I wrote at first, please ask me about it
With best regards,
Nik
PS: Additional stuff:
I'm an Arduino beginner, but I guess the sketch would be quite "simple" for solution B.
From my current knowledge I have to read the potentiometer using an ADC port, define a rpm value for the read-out ADC 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 MOSFETs/IGBTs.
But again, I don't know the best way to do that without running into timing problems or cause slow reactions to speed changes ...