Limiter
3 minute read
The limiter turns each axis’s setpoint into one that stays between the position limits and never moves faster, accelerates harder or jerks more than you allow. It looks ahead. When the setpoint heads for a position limit, it brakes in time to stop on the limit, not past it.
Warning
The limiter limits the setpoint, not the machine. The axis follows the setpoint with a small tracking error, so it can pass a position limit by that much. Keep the position limits at least that far inside the mechanical end stops.
Set the limits
Each axis has its own set under root/AxesControl/axesLimiters/LimitsNN/, where NN is the axis number. The units are those of the axis: rad or m, per second.
| Parameter | What it limits | Default |
|---|---|---|
positionLowerLimit, positionUpperLimit |
The position range | -1, 1 |
velocityLimit |
The velocity, in both directions | 1 |
accelerationLimit |
The acceleration, in both directions | 10 |
jerkLimit |
How fast the acceleration may change | 100 |
maxAccelerationBraking, maxJerkBraking |
Extra braking the limiter may use to stop on a position limit; 0 means the same as the normal limit |
0, 0 |
- In Desk, open
root/AxesControl/axesLimiters/Limits01for axis 1. - Set the position limits to the range the axis may use.
- Set
velocityLimit,accelerationLimitandjerkLimitto what the axis and its load can handle. - Repeat for every axis, then save the parameter tree.
A change takes effect in the next cycle, even while the axis moves. A value that makes no sense, such as a negative velocity or a lower limit above the upper limit, is ignored and the limiter keeps the last valid set.
Warning
Do not lower accelerationLimit or jerkLimit while the axis moves fast near a position limit: with less braking it may no longer stop in time. Set maxAccelerationBraking and maxJerkBraking to the braking the axis can deliver first; they do not follow when you lower the normal limits.
Check that the limits fit
A full stop from velocityLimit needs room. If the position range is too short for it, the limiter sets LimitsNN/warningSettingsMayCausePositionLimitOvershoot. Lower velocityLimit, or raise the braking limits, until it clears.
Setting LimitsNN/autoAdjustBraking to 1 makes the limiter raise the braking limits itself until the warning cannot occur. Read maxAccelerationBraking and maxJerkBraking back afterwards: the values it chose may be more than the drive can deliver.
What the limiter reports
| Output | True when |
|---|---|
LimitsNN/isLimiting |
Any limit changed the setpoint this cycle |
LimitsNN/positionLimitActive, velocityLimitActive, accelerationLimitActive, jerkLimitActive |
That limit is active |
LimitsNN/warningNotAbleToStopBeforeLimit |
The axis can no longer stop before the position limit |
StateNN/active |
Same as isLimiting. The robot application shows it as warning WA_PVA_LIMITER_ACTIVE (211) |
Turn it off
axesLimiters/enable turns the limiter off for all axes, LimitsNN/enable for one axis. A limiter that is off passes the setpoint through unchanged.
Axes with a velocity setpoint
An axis that gets a velocity setpoint through axesVelocitiesInput has no position setpoint for the limiter to follow. Tell the limiter to take the velocity as its command instead:
Parameter under LimitsNN/ |
Set to | Why |
|---|---|---|
enableInput |
0 |
There is no position setpoint |
enableInputDot |
1 |
Use the velocity setpoint |
enablePositionLimit |
0 for a wheel, 1 otherwise |
With 1, the axis still stops on its position limits |
Info
The limiter was replaced in control3 3.30. Configurations written before then set velocityLowerLimit, velocityUpperLimit, accelerationLowerLimit, accelerationUpperLimit, mode and Settings/…: the current limiter does not read them. Set velocityLimit, accelerationLimit and jerkLimit instead. positionLowerLimit and positionUpperLimit keep their names.
Next: Set the window detectors.