uy$(instance)SlewRateLimiter Icon

SlewRateLimiter

Limits the slew rate within the range of falling and rising rates.

This component extends from SISO

Usage

SlewRateLimiter(rising, falling=-rising, td, assertion=assert(rising, falling, Base.isgreater))

Parameters:

NameDescriptionUnitsDefault value
risingMaximum rising slew rates-1
fallingMaximum falling slew rates-1-rising
tdTime derivative constants
assertionInternal parameter to assert that u_max is greater than u_minassert(rising, falling, Base.isgreater)

Connectors

  • u - This connector represents a real signal as an input to a component (RealInput)
  • y - This connector represents a real signal as an output from a component (RealOutput)

Behavior

\[ \begin{align} \frac{\mathrm{d} y\left( t \right)}{\mathrm{d}t} &= max\left( min\left( \frac{u\left( t \right) - y\left( t \right)}{\mathtt{td}}, \mathtt{rising} \right), \mathtt{falling} \right) \end{align} \]

Source

# Limits the slew rate within the range of `falling` and `rising` rates.
component SlewRateLimiter
  extends SISO
  # Maximum rising slew rate
  parameter rising::DecayConstant
  # Maximum falling slew rate
  parameter falling::DecayConstant = -rising
  # Time derivative constant
  parameter td::Time
  # Internal parameter to assert that `u_max` is greater than `u_min`
  parameter assertion::Boolean = assert(rising, falling, Base.isgreater)
relations
  initial y = u
  der(y) = max(min((u-y)/td, rising), falling)
end
Flattened Source
# Limits the slew rate within the range of `falling` and `rising` rates.
component SlewRateLimiter
  u = RealInput() [{
    "JuliaSim": {
      "placement": {"icon": {"iconName": "input", "x1": -50, "y1": 450, "x2": 50, "y2": 550}}
    }
  }]
  y = RealOutput() [{
    "JuliaSim": {
      "placement": {"icon": {"iconName": "output", "x1": 950, "y1": 450, "x2": 1050, "y2": 550}}
    }
  }]
  # Maximum rising slew rate
  parameter rising::DecayConstant
  # Maximum falling slew rate
  parameter falling::DecayConstant = -rising
  # Time derivative constant
  parameter td::Time
  # Internal parameter to assert that `u_max` is greater than `u_min`
  parameter assertion::Boolean = assert(rising, falling, Base.isgreater)
relations
  initial y = u
  der(y) = max(min((u-y)/td, rising), falling)
metadata {}
end

Test Cases

  • Examples
  • Experiments
  • Analyses