Active Damping: Control Diesel Engine Vibrations

Introduction

This model explores how to minimize vibrations in a diesel engine using a tuned mass damper.

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 SystemModeler; 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 SystemModeler, visit www.wolfram.com/system-modeler.

Initialize

Define the model name:

mmodel="IndustryExamples.HeavyEquipment.ActiveDamping.InteractiveActiveDampingModel";

Equation Analysis

Use the system equations from the model and study the displacement of the vibrating diesel engine for different choices of damping constant d, damping mass m1, and spring constant c1. Illustrate the result with an interactive Manipulate.

The semicolon (;) at the end of each line suppresses the output from that line. Remove the semicolons if you want to see the results of intermediate steps.

Retrieve equations from the model. Choose shorter names for some variable names:

SystemModel[mmodel,"SystemEquations",Method->{"Elimination"->All}];

eqns=SystemModel[mmodel,"SystemEquations",Method->{"Elimination"->All}]/.{(QuantityVariable["sd.d", "TranslationalDampingCoefficient"])->d1,(QuantityVariable[""sd.c, "SpringConstant"])->c1,(QuantityVariable["s.c", "SpringConstant"])->c2,(QuantityVariable["m1.m", "Mass"])->m1,(QuantityVariable["engine.mass.m", "Mass"])->m2};

Set the input to a given function:

eqns2=eqns/.SystemModel[mmodel,"InputVariables"][[1]]->Function[t,p0 Exp[I ω t]];

Eliminate algebraic variables:

algVars=Through[SystemModel[mmodel,"AlgebraicVariables"][\[FormalT]]];

eqns3=Eliminate[eqns2,algVars];

Replace all variables with their numeric values:

eqns4=eqns3/.SystemModel[mmodel,"ParameterValues"]/. (QuantityVariable["c1", "SpringConstant"])->c1;

Replace position variables with exponentials:

eqns5=eqns4/.{
(QuantityVariable["engine.mass.s", "Length"])->Function[t,u1 Exp[I ω t]],
(QuantityVariable["engine.mass.v", "Speed"])->Function[t,D[u1 Exp[I ω t],t]],
(QuantityVariable["m1.s", "Length"])->Function[t,u2 Exp[I ω t]],
(QuantityVariable["m1.v", "Speed"])->Function[t,D[u2 Exp[I ω t],t]] };

Look at time zero:

eqns6=eqns5/.\[FormalT]->0;

Solve for the magnitudes of the masses:

ans=Solve[eqns6,{u1,u2}]//First;

Create a function for the engine displacement:

ν1=u1/.ans/.{p0->1,c2->390,m2->170};

Study the displacement of the engine for different frequencies ω, damping constants d1, damping mass m1, and spring constant c1.

Manipulate[
Quiet@Plot3D[Abs[ν1]/. {m1->mass,c1->springConstant},
{ω,0,3},
{d1,0,0.5},
PlotRange->{0,1},
AxesLabel->{"angular velocity","damping","displacement"},
PlotPoints->50,
Mesh->{{{2,Directive[Red,Thick,Opacity[0.8]]}},None},
MeshFunctions->{#1&},ImageSize->Full],
{{mass,5,"damping mass"},1,15},
{{springConstant,24,"spring constant"},10,30},
SaveDefinitions->True,
ContinuousAction->False]

Simulation Analysis

Study the vibrations for different parameters of the damping system with simulations, illustrating the qualitatively different effect they have on the result.

Simulate for one choice of parameters:

ℳ=SystemModelSimulate[mmodel,{0,80},
<|"ParameterValues"->{"engineMass"->170,"m"->2,"d"->0.5,"c1"->18.44,"c"->390},"Inputs"->{"a"->Function[t,Sin[2t]]}|>];

SystemModelPlot[ℳ]

Simulate varying damping mass and damping constant:

parameterValues=Tuples[{{2,5,8},{0,0.5,1}}];

ℳ2=SystemModelSimulate[mmodel,{0,80},
<|"ParameterValues"->{
"engineMass"->170,
"m"->parameterValues[[All,1]],
"d"->parameterValues[[All,2]],
"c1"->18.44,"c"->390},
"Inputs"->{"a"->Function[t,Sin[2t]]}|>];

Plot the resulting vibrations of the engine. Different parameters lead to qualitatively different behaviors:

Legended[
GraphicsGrid[
ArrayReshape[
Table[SystemModelPlot[sim,"Engine Displacement",
PlotRange->{{0,80},{-0.02,0.02}},
PlotLabel->"{m1,d1}=="<>ToString[sim[{"m1.m","sd.d"}]],
PlotLegends->None],{sim,ℳ2}],
{3,3}],ImageSize->Large
],
Placed[LineLegend[{ColorData[97][1]},{"Engine displacement from center"}],Below]
]

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