SlewRateLimiter
IconSlewRateLimiter
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:
Name | Description | Units | Default value |
---|---|---|---|
rising | Maximum rising slew rate | s-1 | |
falling | Maximum falling slew rate | s-1 | -rising |
td | Time derivative constant | s | |
assertion | Internal parameter to assert that u_max is greater than u_min | – | assert(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
Related
- Examples
- Experiments
- Analyses