Application Center - Maplesoft

App Preview:

Tuned Mass Spring Damper

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  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-1 is

eval(`ω__1`, params)

13.98492872


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

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)

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

1458730.861

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

26869.77094

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

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); psPlot2 := pointplot([seq([2*i*samplingRate*Pi/2^10, psNotTuned[i]], i = 1 .. (1/2)*2^10)], connect = true, color = red, legend = "Not Tuned")

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

NULL