# Controlling amplitude of harmonic oscillator

I'm trying to figure out how to use basic control theory to design a controller that controls the amplitude of a harmonic oscillator at
resonance. For example, I want to drive a spring mass damper with a sinusoidal force source at the resonant frequency. I want to adjust the amplitude of the force source based on the amplitude of the resonant motion.
Consider the resonator to be: 1/(m*s^2 + b*s + k)
In order to setup the situation as I've described above, I'm tempted to say that in front of the resonator, I need the LaPlace transform of the sinusoidal drive, and then after the resonator, I need another sine wave and a LPF that acts as the amplitude demodulation. So my overall open loop transfer function would look something like:
s/(s^2+k/m) * 1/(s^2 + b/m*s + k/m) * s/(s^2+k/m) * LPF
where the terms in order are: excitation sinusoidal force, the resonator itself, and the demodulation sine wave, followed by the final LPF. The input of the system is the magnitude of the sinusoidal force and the final output is the amplitude of the motion at the resonant frequency.
When I try to perform a root locus on this I get all sorts of poles and zeros on the positive side of the complex plane. Yet in practice (or at least a Simulink simulation) I'm able to control the thing to some degree of stability with just a simple P controller.
I'm clearly not a controls expert and am in over my head here. Is the method that I'm using have any legitimacy to it? Is the reason that the simple P controller sort of works due to the fact that the actual gain is so very small?
I've tried looking on the web for help on this type of probably but haven't been able to find much. The standard control problem of a 2nd order system is the position, not the amplitude of resonant motion. Any recommended further reading would be greatly appreciated.
Thanks! Mike
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
snipped-for-privacy@spamgourmet.com wrote:

At best your system has two time varying blocks, more likely your system has a time varying block and a nonlinear block. To use the Laplace transform to analyze this system you need to make a model that disregards the nonlinear and time-varying elements.
I'm going to assume that the only thing you care about is the amplitude of the resulting harmonic motion, not the phase. If this is the case then you want to extract this amplitude with some sort of rectification scheme rather than, e.g. multiplying by a sine wave. Rectification is a nonlinearity, so right there you know your system is nonlinear.
For your drive it sounds like you want to multiply a sinusoidal prototype by a drive amplitude, and have the resulting drive be applied to your harmonic oscillator. This is a time-varying block.
All -- indeed most -- is not lost, however. If you look at your harmonic oscillator driven by an on-frequency sine wave, you'll see that the output is a sine that asymptotically approaches some constant value which in turn depends on the amplitude of your drive. Driving your oscillator by an off-frequency sine wave has similar results, except that you'll have some unfortunate transients that may or may not give you problems.
What does all this mean? For the on-frequency case if you look at the amplitude of your sine wave as a function of the input amplitude, your plant looks like a low-pass filter -- nothing more. I suspect that this image is mostly true for frequencies that are within the passband of the filter formed by the spring, mass and damping of your mechanical system. This means that you should be able to model your plant with a simple low pass, and use basic PID control techniques to drive it.
The only caveat that I can add here is that you must avoid control schemes that slew your input drive much faster than the plant can follow -- doing so runs the risk of your input turning off. While the input is off the plant will freely oscillate as it loses amplitude, and may significantly change phase with respect to the input. If the input then turns on significantly out of phase with the plant the output would drop instead of rising, at least until the plant's phase had reversed. This could cause some really bizarre oscillations.
If the frequency of oscillation of the system didn't have to be driven by the outside world you could avoid this problem by making it into an active oscillator -- take the plant output, delay it suitably, multiply it by your plant 'drive' command, and apply it back to the plant. This would insure that if the plant is going it will continue to do so, and would even allow you to actively damp the plant if you needed rapid response. You would have to have a means of starting the system up, probably by detecting the absence of any oscillation and applying _something_ to get things started.
Depending on just how many aspects of your output you need to control, and how fast the control needs to happen with respect to the oscillation speed of your mechanical system, I can think of endless directions the potential solutions could spin off. If this hasn't helped yet, perhaps you could share some more detail.
--

Tim Wescott
Wescott Design Services
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Thanks for the detailed response. I understand what you mean regarding the time-varying and non-linear aspects of what I was trying to do.
I understand qualitatively how the harmonic oscialltor driven at resonance bahaves mainly as a low pass filter. However, I am struggling to work out the details of the math. Basically, my question is for a given drive amplitude, what is the resulting motion? Furthermore, how quickly will the amplitude of motion respond to changes in that amplitude.
The basic differential equation is:
m*y'' + b*y' + k*y = A*sin(sqrt(k/m)*t)
when we take the LaPlace transform of this we get:
Y*(s^2+b/m*s+k/m) = A/m*sqrt(k/m)/(s^2 + k/m)
Are we only interested in the response at the resonant frequency, which is when s^2 = -k/m? In which case, when this is substituted into the above equation, the right side explodes since we are dividing by zero.
Again, I'm going wrong somewhere here and I don't quite see where.
Mike
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
snipped-for-privacy@spamgourmet.com wrote:

Two unrelated things:
First, you're posting from Google. This isn't a bad thing in itself, but the Google newsgroup interface is broken. See the link below for a FAQ on how to make yourself look like you're posting from a regular newsreader (and keep potential respondents like me happy enough to reply to your replies).
Now on to our regularly scheduled programming:
To find the response you get your equation
A / (m * sqrt(k/m) Y = ------------------------------- (s^2 + b/m s + k/m) (s^2 + k/m)
Then you use partial fraction expansion to solve for the sinusoidal part and the damped sinusoidal part -- and it won't blow up. Check your local CRC math reference book, or the web, or most controls books for how to do partial fraction expansions.
The response that you get from this partial fraction expansion should answer all your questions, particularly if you remember that the response to a step change in amplitude is the same as the response without the step change plus the response to just the step change.
When you're doing this, you should also experiment with what happens when your drive is a bit off frequency -- I don't know exactly what it'll be, but my intuition tells me it has the potential to be severe.
--

Tim Wescott
Wescott Design Services