Seat Suspension: Comparing Dampening Designs

Introduction

This model compares the response of a simple passive damper with that of a hybrid semi-active damper over a range of frequencies corresponding to an application in a truck seat suspension system. The model is constructed from components in the Modelica.Mechanics.Translational library. Mathematica is used to estimate and visualize the amplitude frequency response curves of the dampers.

Explore the available scenarios by evaluating each cell in order. Evaluation is done by selecting a cell and pressing Shift+Enter.

In order to get the full experience of this example, you need the following:

Wolfram System Modeler; a free trial download is available at www.wolfram.com/system-modeler

The model that came in the same bundle as this notebook

For more information about Wolfram System Modeler, visit www.wolfram.com/system-modeler.

This model is based on B. A. Reichert, Jr., “Application of Magnetorheological Dampers for Vehicle Seat Suspensions,” M.S. thesis, Department of Mechanical Engineering, Virginia Polytechnic Institute and State University, Blacksburg, VA, 1997.

Initialize

Define the model name:

mmodel="IndustryExamples.AutomotiveTransportation.SeatSuspension.DamperComparison";

Numerical Experimentation

Visualize the response of a passive damper and a hybrid semi-active damper as a function of time to compare damping performance.

First simulate the response of the two different damper designs to a 30-second chirp signal:

sim=SystemModelSimulate[mmodel,{0,30},<|"ParameterValues"->{"chirp.M"->30}|>];

Plot the chirp input signal:

SystemModelPlot[sim,"chirp.u",
PlotStyle->Gray,PlotLabel->"chirp input signal",AxesLabel->{"t (s)",None}]

Plot the response of the passive damper:

SystemModelPlot[sim,"mass2.s",
AxesLabel->{"t (s)",None},PlotStyle->ColorData[1][2],PlotLabel->"passive damper",PlotRange->All]

Plot the response of the semi-active damper:

SystemModelPlot[sim,"mass1.s",
AxesLabel->{"t (s)",None},PlotStyle->ColorData[1][1],PlotLabel->"semi-active damper",PlotRange->All]

The semi-active damper has better damping performance over the entire range of frequencies.

Analysis & Custom Visualization

Visualize the response of a passive damper and a hybrid semi-active damper as a function of the chirp frequency instead of the simulation time. Then numerically estimate the amplitude frequency response curve using a custom Mathematica algorithm. Finally, produce a custom visualization of the amplitude response curve together with the simulation results as a function of frequency.

First simulate the response of the two different damper designs to a 30-second chirp signal:

sim=SystemModelSimulate[mmodel,{0,30},<|"ParameterValues"->{"chirp.M"->30}|>];

Damper Response as a Function of Frequency

Get the amplitude and frequency range of the chirp signal:

{amplitude}=sim[{"chirp.A"}];
{fMin,fMax}=((sim[{"chirp.w_start","chirp.w_end"}])/π);

Get the response of the passive damper and the semi-active damper as a function of the linearly varying chirp frequency and scaled by the chirp amplitude:

{passive[t_],semiactive[t_]}=((sim[{"mass2.s","mass1.s"},Rescale[t,{fMin,fMax},{0,30}]])/amplitude);

Plot the scaled response of the passive damper as a function of chirp frequency:

passiveplot=Plot[Evaluate[passive[t]],{t,1.7,fMax},PlotStyle->{Opacity[0.5],ColorData[1][2]},AxesLabel->{"f (Hz)",None},PlotRange->1.6,AxesOrigin->{1.7,0},PlotLabel->"passive damper"]

Plot the scaled response of the semi-active damper as a function of chirp frequency:

semiactiveplot=Plot[Evaluate[semiactive[t]],{t,1.7,fMax},PlotStyle->{Opacity[0.5],ColorData[1][1]},AxesLabel->{"f (Hz)",None},PlotRange->1.6,AxesOrigin->{1.7,0},PlotLabel->"semi-active damper"]

Custom Algorithm: FunctionEnvelope

Define a custom algorithm that numerically estimates the envelope (amplitude) of an oscillatory function f:

FunctionEnvelope[f_,{t_,a_,b_},n_:40]:=Module[{seeds,x,y,points,progress=0,tempf,union},seeds=Rescale[Range[0,1,(1/n)]+(1/(2n)),{0,1},{a,b}];points=Last[Last[Reap[Monitor[Do[Quiet@Check[progress++;{y,x}=FindMaximum[Abs[f],{t,x0}];x=t/.x;If[a≤x≤b,Sow[{x,y}]],Null],{x0,seeds}],ProgressIndicator[progress,{0,Length[seeds]}]]]]];
union[]:=
points=Union[points,SameTest->(((Abs[First[#1]-First[#2]])/(Replace[Max[Abs[First[#1]],Abs[First[#2]]],u_/;u==0:>1]))<10^-6&)];
union[];
tempf=Interpolation[points];
points=Quiet[Join[{{a,tempf[a]}},points,{{b,tempf[b]}}]];
union[];
Interpolation[points]
]

Custom Visualization: Amplitude Response Curves

Numerically estimate the amplitude response curve as the envelope of the oscillatory response:

passiveenvelope=FunctionEnvelope[passive[f],{f,fMin,fMax}];

semiactiveenvelope=FunctionEnvelope[semiactive[f],{f,fMin,fMax}];

Custom plot of the numerically estimated amplitude response curves:

amplituderesponse=Plot[{passiveenvelope[f],-passiveenvelope[f],semiactiveenvelope[f],-semiactiveenvelope[f]},{f,1.7,fMax},AxesOrigin->{1.7,0},PlotStyle->Map[Directive[Thick,#]&,{ColorData[1][2],ColorData[1][2],ColorData[1][1],ColorData[1][1]}],AxesLabel->{"f (Hz)",None},PlotLabel->Row[{"amplitude response: ",Style["passive, ",ColorData[1][2]],Style["semi-active",ColorData[1][1]]}]]

Plot scaled response curves together with amplitude response curves:

Show[amplituderesponse,passiveplot,semiactiveplot]

Terms and Conditions of Use

This domain example is an informational resource made freely available by Wolfram Research.

Use of This Example

• You may not use this example for any purpose that is unlawful or dangerous.
• You assume total responsibility and risk for your use of this example.
• You may not present this example with any alteration to its trade dress, trademarks, or design.

License

All content in this bundle is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. By accessing the content or using it in any way, you accept and agree to be bound by the terms of this license. If you do not agree to these Terms of Use, you may not use this content. Wolfram Research reserves the right to change, modify, add to, or remove portions of these Terms of Use at any time without notice. Please refer back to www.wolfram.com for the latest Terms of Use.

A summary of the licensing terms can be found at:
http://creativecommons.org/licenses/by-nc-sa/3.0

The full legal code can be found at: 
http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode