Deadzone
Deadzone blanks a band around zero and passes everything outside it.5 minute read
Deadzone blanks a band around zero and passes everything outside it. Use it
to stop a machine reacting to a signal that is close to but not exactly zero —
a noisy force reading, a joystick at rest — or to simulate backlash in a
mechanism.
Outside the band the output is shifted inward by the band’s width, not passed through unchanged. That keeps the output continuous at the band edge: the signal leaves zero smoothly instead of jumping.
flowchart LR
i1(["input — signal to blank"]) --> B["Deadzone"]
B --> o1(["output — blanked and shifted signal"])
Inside ±
amplitudethe output is 0. Outside it, the output is the input minusamplitudein the direction of travel — so an input of twice the amplitude gives an output of one amplitude, not two. The output is continuous at the band edge and passes through zero without a step.
This block has no enable, no disable and no isEnabled. It is always
running. Set amplitude to 0 to pass the signal through untouched, which is
the default. It is single channel.
Signals
Inputs
| Path | Unit | Range | Description |
|---|---|---|---|
input |
signal unit | unbounded | The signal to blank. A single value, not an array. |
Outputs
| Path | Unit | Description |
|---|---|---|
output |
signal unit | Zero while the input is inside the band; outside it, the input shifted toward zero by amplitude. A single value. It never lags — the output depends only on this cycle’s input. |
Parameters
| Path | Unit | Default | Range | Effect |
|---|---|---|---|---|
amplitude |
signal unit | 0.0 | any; used as its magnitude | Half the width of the band. 0 passes the signal through unchanged. A negative value behaves as its positive equivalent. Not checked. |
amplitude is persistent and survives a controller restart. No parameters
exist below this block.
Setup
-
Trace
inputwith the machine at rest and note how far it wanders from zero. That wander is what you are blanking. -
Set
amplitudea little above that. Confirmoutputsits at exactly zero with the machine at rest. -
Move the machine slowly and confirm
outputleaves zero smoothly, with no jump at the moment it starts moving.Step 3 is what distinguishes this from a threshold. If the output jumps, you are looking at the wrong block — this one is continuous at the band edge by construction.
-
Move the machine to a known value well outside the band and check the output. It should read the input minus
amplitude, not the input. That offset is normal.
Tuning
- Set
amplitudefrom the measurement in Setup step 1, not by feel. It is the noise floor of your signal. - Raise it until the machine stops reacting at rest, and no further. Every increase also shifts the signal outside the band by the same amount.
- Check the offset at your normal working amplitude. If the dead zone is a large fraction of the signal you care about, the shift is a real gain error — reduce the dead zone or compensate downstream.
- If you need the signal outside the band passed through unshifted, this block cannot do it. Use a comparison and a switch instead.
- Nothing here needs re-checking after a task-rate change.
Read the band width off the flat section, and the shift off the horizontal offset of either sloped branch.
| Symptom | Cause | Action |
|---|---|---|
| The machine still creeps at rest | amplitude below the signal’s noise floor |
Raise it, per Setup steps 1 and 2 |
| The output is smaller than the input by a constant | Expected: the output is shifted inward by amplitude |
Compensate downstream, or reduce the dead zone |
| The output jumps as the signal leaves the band | Not possible — this block is continuous at the band edge | Check you are looking at this block’s output |
| The output stays at zero no matter what | amplitude is larger than the signal ever gets |
Lower it |
| Nothing is blanked at all | Expected: amplitude defaults to 0 |
Set an amplitude |
A negative amplitude behaved like a positive one |
Expected: the magnitude is used | Write a positive value for clarity |
| The output reads zero when the input is not a number | Expected: a non-numeric input falls inside the band and gives zero | Fix the source — note this block will hide such a value from anything downstream |
| You cannot switch the block off | Expected: there is no enable | Set amplitude to 0, which is an exact pass-through |
| You need this on several channels | Not possible — this block is single channel | Use one instance per channel |
| The gain of the signal changed after adding the dead zone | Expected: the shift is a constant offset, which looks like a gain change on a small signal | Size the dead zone against your working range |
A starting point for blanking a force reading whose noise floor is about 0.3 N:
amplitude = 0.5
Limits and errors
| Limit | Set by | What happens | Reported |
|---|---|---|---|
amplitude |
Nothing | Not checked. Any finite value is accepted and used as its magnitude. 0 is an exact pass-through | Not reported |
output |
Nothing | Unbounded — whatever the input carries, less the band width, reaches the output. Limit it downstream if the consumer needs a bound | Not reported |
| Output continuity | Fixed | Continuous at both band edges by construction. The slope changes there, but the value does not jump | Not applicable |
| Signal offset | Fixed | Everything outside the band is shifted toward zero by amplitude. This is the design, not a fault |
Not reported |
| Non-numeric input | Fixed | Falls inside the band and produces zero, so this block silently hides a non-numeric value from anything downstream | Not reported |
| Block state | None | The block has no memory. Nothing survives a stop and there is nothing to reset | Not applicable |
| Channel count | Fixed | One channel per instance, always | Not reported |
The block raises no errors or warnings and logs nothing. Every failure above shows as a value on a trace, not as a message.
Verified against motorcortex-control3 3.30.0 (bc348fd).