Maintaining a motor's RPMs under a variable load

Thread Starter

cmartinez

Joined Jan 17, 2007
8,252
I just designed a circuit to control the speed of an ordinary AC brushed motor (if you must know the details, it's a Milwaukee 3.5HP router).
Anyway, the thing is that this router has an excellent speed controller that works by monitoring a resolver installed at the top of its shaft. The controller allows one to adjust its speed in the range of 10,000 to 22,000 RPM.

The reason why I had to build my own circuit is that I need it to work at speeds of between 300 and 1,500 RPM. The circuit I designed uses a single TRIAC and I control the speed by using two separate MCU's. The first MCU reads the router's resolver using a hall effect sensor (which generates 24 divisions per revolution) and reports a 6-bit number representing the motor's actual RPMs to the second MCU, which is in charge of triggering the TRIAC at a calculated phase-angle.

The system works reasonably well when there is no load involved. That is, RPMs are nice and smooth when the router is idle and not cutting anything. But it seems that the algorithm I wrote to increase or decrease the TRIAC's triggering angle is too primitive. The router's RPMs become unstable under load, and it leaves ugly marks on the material being cut.

Is there a simple algorithm out there that I could implement in the MCU's programming to improve the router's performance?
 

DickCappels

Joined Aug 21, 2008
10,169
This is something I did for a DC powered drill motor. The concept might work well for AC as well.

upload_2017-4-29_16-17-6.png
Above: Y axis is volts across the motor, X axis is the motor current. Current limit starts at about 200 ma.

The method is that of increasing the voltage as the current increases with load. In the case of an AC motor it would be a matter of decreasing the firing angle of your thyristors. This is negative resistance, and it you have too much you can introduce a new kind of instability. I use this on a drill motor and it makes tasks such as routing much more controllable.
 

Attachments

MrAl

Joined Jun 17, 2014
11,462
Hello there,

Older speed controllers use a measurement of the back emf of the motor to regulate the speed because the back emf is proportional to speed.

Measurement of the back emf requires a measurement of the current as Dick did as well as a measurement of the applied voltage. The back emf is then the applied voltage minus the current times a constant:
Vbemf=Va-Ia*K

and K is determined experimentally for good speed control but with a slight decrease in speed with load rather than a huge decrease that you get with no control at all. This back emf voltage Vbemf is then proportional to speed so it is an indicator of speed and can be used in a standard setup for speed control like with an op amp integrator/error amplifier.

If you do measure the speed using another method you should take the speed measurement at the same place in the cycle for each cycle. So if you measure the speed near the end of the AC cycle then you should use that place for every measurement, and the measurement of the speed at the end of that cycle is only allowed to change the speed adjustment for the next cycle.

Also, it is good to allow a slight decrease in speed with load rather than no change at all or an increase in speed with load. That gives the user some sensory feedback as to what is happening at the work piece and also keeps things more stable.

Since you mentioned the patterns in the work piece, it would be interesting if you could adjust the speed in jumps on purpose in order to get different known (precalculated) decorative patterns in the wood piece. That might make for some interesting finished pieces.
 

Tonyr1084

Joined Sep 24, 2015
7,899
I agree with DNA Robotics. When routing I take shallow cuts until I reach the desired depth of cut. That way the bit is not trying to eat away too much wood at a pass. With my starting cuts I can be more aggressive but as I approach the final cut I cut shallower cuts so as to allow the bit to work easy and not mar my surfaces. I also learned to read the grain of the wood and pick the edge that would best suit the process.

May the grain be with you.
 

shortbus

Joined Sep 30, 2009
10,045
A member that is no longer with us made a circuit for doing this. RB was his name. He developed it to use wood routers on metal cutting DIY CNC machines. If I recall right it worked with a PID type circuit. He went on to sell it to a company that makes it and calls it "SuperPID". A link to his homepage, http://www.romanblack.com/cool.htm
Can't remember if the circuit was on this site or not. But a lot of guys at CNCZone use it.
 

MaxHeadRoom

Joined Jul 18, 2013
28,682
A member that is no longer with us made a circuit for doing this. RB was his name. He developed it to use wood routers on metal cutting DIY CNC machines. Can't remember if the circuit was on this site or not. But a lot of guys at CNCZone use it.
@THE_RB first promoted it on the CNCzone site but they are still sold in Australia but I think he put it together for someone else to market.
I picked one up on the first promotion they had, it is Picmicro based with an optical retro-reflective once/rev sensor for feedback.
5krpm to 20krpm triac controller for Universal motors spindles.
There are quite a few app notes on the Pic site for motor rpm feedback.
Max.
 

Thread Starter

cmartinez

Joined Jan 17, 2007
8,252
Thank you everyone. As I have already mentioned, I had absolutely no problem measuring the motor's actual RPM. The challenge here is to steadily maintain those RPM under varying load. But @DNA Robotics does have a point, the router motor was not designed to run at such low speeds and might be inherently unstable under those conditions.

Thanks for the tip, @shortbus. I'll look into it and see if I can learn something from it. And what you've shown in the graph is more or less what I had in mind, Dick. What I'll try now is to linearize current output to the motor, making it proportional to the amount of target RPM. That is, I'm going to try something like:

IncreaseInCurrent = (TargetRPM - ActualRPM)*WAG​

WAG is an excellent term taught to me by @GopherT, and it sure comes in handy for this application. The trick here is going to be linearization... since I'm dealing with AC sine waves, I have to calculate the needed decrease in the TRIAC's firing angle to get a proportional increase in current.
 
Last edited:
Top