Quarter-Car Suspension Model

Model of a quarter-car suspension

Examples

Basic Examples (2) 

Retrieve the model:

In[1]:=
ResourceData[\!\(\*
TagBox["\"\<Quarter-Car Suspension Model\>\"",
#& ,
BoxID -> "ResourceTag-Quarter-Car Suspension Model-Input",
AutoDelete->True]\)]
Out[1]=

The icon:

In[2]:=
ResourceData[\!\(\*
TagBox["\"\<Quarter-Car Suspension Model\>\"",
#& ,
BoxID -> "ResourceTag-Quarter-Car Suspension Model-Input",
AutoDelete->True]\), "Icon"]
Out[2]=

Scope & Additional Elements (4) 

Available content elements:

In[3]:=
\!\(\*
TagBox[
RowBox[{"ResourceObject", "[", "\"\<Quarter-Car Suspension Model\>\"",
      "]"}],
#& ,
BoxID -> "ResourceTag-Quarter-Car Suspension Model-Input",
AutoDelete->True]\)["ContentElements"]
Out[3]=

The available model types:

In[4]:=
ResourceData[\!\(\*
TagBox["\"\<Quarter-Car Suspension Model\>\"",
#& ,
BoxID -> "ResourceTag-Quarter-Car Suspension Model-Input",
AutoDelete->True]\), "AvailableModelTypes"]
Out[4]=

The operating point:

In[5]:=
ResourceData[\!\(\*
TagBox["\"\<Quarter-Car Suspension Model\>\"",
#& ,
BoxID -> "ResourceTag-Quarter-Car Suspension Model-Input",
AutoDelete->True]\), "OperatingPoint"]
Out[5]=

The parameters:

In[6]:=
ResourceData[\!\(\*
TagBox["\"\<Quarter-Car Suspension Model\>\"",
#& ,
BoxID -> "ResourceTag-Quarter-Car Suspension Model-Input",
AutoDelete->True]\), "Parameters"]
Out[6]=

Visualizations (3) 

The numerical model:

In[7]:=
sys = ResourceData[\!\(\*
TagBox["\"\<Quarter-Car Suspension Model\>\"",
#& ,
BoxID -> "ResourceTag-Quarter-Car Suspension Model-Input",
AutoDelete->True]\)] /. ResourceData[\!\(\*
TagBox["\"\<Quarter-Car Suspension Model\>\"",
#& ,
BoxID -> "ResourceTag-Quarter-Car Suspension Model-Input",
AutoDelete->True]\), "Parameters"]
Out[7]=

Extract the subsystem from input s to output x2:

In[8]:=
tfm = SystemsModelExtract[sys, 1]
Out[8]=

Its Bode plot:

In[9]:=
BodePlot[%, ImageSize -> 300]
Out[9]=

Analysis (7) 

The numerical model:

In[10]:=
ssm = ResourceData[\!\(\*
TagBox["\"\<Quarter-Car Suspension Model\>\"",
#& ,
BoxID -> "ResourceTag-Quarter-Car Suspension Model-Input",
AutoDelete->True]\)] /. ResourceData[\!\(\*
TagBox["\"\<Quarter-Car Suspension Model\>\"",
#& ,
BoxID -> "ResourceTag-Quarter-Car Suspension Model-Input",
AutoDelete->True]\), "Parameters"] // N
Out[10]=

Simulate the suspension on a bumpy surface:

In[11]:=
surf = 0.1 (SquareWave[t/3 - 1] + 1);
In[12]:=
olor = OutputResponse[ssm, {surf, 0}, {t, 0, 10}];
Plot[{surf, olor}, {t, 0, 10}, Sequence[
 PlotRange -> All, Exclusions -> None, PlotLegends -> {"input", "output"}]]
Out[13]=

A system specification for a controller design that attenuates the oscillations:

In[14]:=
sspec = <|"InputModel" -> ssm, "FeedbackInputs" -> 2|>
Out[14]=

An LQ-regulator:

In[15]:=
cd = LQRegulatorGains[
  sspec, {DiagonalMatrix[{10^2, 10^2, 10^8, 10^2}], {{10^-3}}}, "Data"]
Out[15]=

Simulate the closed-loop system:

In[16]:=
ior = InputOutputResponse[
  cd[{"ClosedLoopSystem", <|"Merge" -> False|>}], {surf, 0}, {t, 0, 10}, "Data"]
Out[16]=

The oscillations are attenuated by the controller:

In[17]:=
Plot[{surf, olor, ior["OutputResponse"]}, {t, 0, 10}, Sequence[
 PlotRange -> All, PlotLegends -> {"input", "open-loop", "closed-loop"}, Exclusions -> None, PlotStyle -> {
Dashing[{Small, Small}], Automatic, Automatic}]]
Out[17]=

The control effort:

In[18]:=
Plot[ior["SubsystemOutputResponse"][[5]], {t, 0, 10}, PlotRange -> All]
Out[18]=

Suba Thomas, "Quarter-Car Suspension Model" from the Wolfram Data Repository (2025)  

Data Resource History

Source Metadata

Publisher Information