Application Center - Maplesoft

App Preview:

Tuned Mass-Spring-Damper Design

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application




Tuned Mass Damper Design for Attenuating Vibration

Introduction

A mass-spring-damper is disturbed by a force that resonates at the natural frequency of the system.

 

This application calculates the optimum spring and damping constant of a parasitic tuned-mass damper that the minimizes the vibration of the system.

The vibration of system with and without the tuned mass-spring-damper is viewed as a frequency response, time-domain simulation and power spectrum.

 


restartwith(DynamicSystems)with(plots); with(SignalProcessing)

params := [m__1 = 1.764*10^5, k__1 = 3.45*10^7, b__1 = 1.531*10^5, m__2 = 8165]:

Derive Expressions for the Optimum Spring and Damping Constant of the Tuned Mass Damper

Mass ratio

mu := m__2/m__1:


Natural frequency of tuned mass damper

`ω__2` := sqrt(`k__2 _calc`/m__2):


Natural frequency of main system

`ω__1` := sqrt(k__1/m__1):

Hence the natural frequency in rad s is

eval(`ω__1`, params)

13.98492872

(2.1)


Ratio of natural frequencies

alpha := `ω__2`/`ω__1`:


Optimum ratio of natural frequencies

`α__opt` := 1/(1+mu):


Hence the optimum spring constant of the tuned mass-spring-damper

`k__2 _calc` := solve(alpha = `α__opt`, `k__2 _calc`)

m__1*k__1*m__2/(m__1+m__2)^2

(2.2)

Damping Ratio

z := `b__2 _calc`/(2*m__2*`ω__2`):


Optimum damping ratio

z__opt := sqrt(3*mu/(8*(1+mu)^3)):


Hence the optimum damping constant of the tuned mass-spring-damper

`b__2 _calc` := solve(z = z__opt, `b__2 _calc`)

(1/2)*6^(1/2)*(m__2/(m__1*(1+m__2/m__1)^3))^(1/2)*m__2*(m__1*k__1/(m__1+m__2)^2)^(1/2)

(2.3)

`k__2 _calc` := eval(`k__2 _calc`, params);

1458730.861

(2.4)

`b__2 _calc` := evalf(eval(`b__2 _calc`, params));

26869.77094

(2.5)

Full list of parameters

params__tuned := [m__1 = 1.764*10^5, k__1 = 3.45*10^7, b__1 = 1.531*10^5, m__2 = 8165, k__2 = `k__2 _calc`, b__2 = `b__2 _calc`]:

params__nottuned := [m__1 = 1.764*10^5, k__1 = 3.45*10^7, b__1 = 1.531*10^5, m__2 = 0, k__2 = `k__2 _calc`, b__2 = `b__2 _calc`]:

Equations of Motion for the Entire System

Equation of motion for the whole system

de := m__2*(diff(x__2(t), t, t)) = -k__2*(x__2(t)-x__1(t))-b__2*(diff(x__2(t), t)-(diff(x__1(t), t))), m__1*(diff(x__1(t), t, t)) = -k__1*x__1(t)-b__1*(diff(x__1(t), t))-k__2*(x__1(t)-x__2(t))-b__2*(diff(x__1(t), t)-(diff(x__2(t), t)))+F(t):
ic := x__1(0) = 0, (D(x__1))(0) = 0, x__2(0) = 0, (D(x__2))(0) = 0:

sys := DiffEquation([de], [F(t)], [x__1(t)]):

Frequency Response

Response with  Tuned Mass Damper

p1 := MagnitudePlot(sys, range = 5 .. 30, parameters = params__tuned, color = blue, legend = "Tuned"):

Response with no Tuned Mass Damper

p2 := MagnitudePlot(sys, range = 5 .. 30, parameters = params__nottuned, color = red, axesfont = [Calibri], labelfont = [Calibri], legend = "Not Tuned"):

display(p1, p2)

 

Dynamic Response

Assuming that the main system is perturbed at its natural frequency

f := eval(`ω__1`, params)

13.98492872

(5.1)

p1 := ResponsePlot(sys, 7500*sin(f*t), parameters = params__tuned, color = blue, numpoints = 2^10, legend = "Tuned"):

p2 := ResponsePlot(sys, 7500*sin(f*t), parameters = params__nottuned, color = red, numpoints = 2^10, legend = "Not Tuned"):

display(p1, p2, axesfont = [Calibri], labelfont = [Calibri], axesfont = [Calibri], gridlines)

Power Spectrum

tunedResponseData := plottools:-getdata(p1)[3]:

notTunedResponseData := plottools:-getdata(p2)[3]:

samplingRate := 1/(tunedResponseData[2, 1]-tunedResponseData[1, 1]):

psTuned := PowerSpectrum(FFT(tunedResponseData[() .. (), 2])):

psNotTuned := PowerSpectrum(FFT(notTunedResponseData[() .. (), 2])):

psPlot1 := pointplot([seq([2*i*samplingRate*Pi/2^10, psTuned[i]], i = 1 .. (1/2)*2^10)], connect = true, legend = "Tuned", gridlines):

display(psPlot1, psPlot2, axis[1] = [mode = log], axesfont = [Calibri], labels = ["Frequency [rad/s]", "Power"], labeldirections = [horizontal, vertical], labelfont = [Calibri])

``