Skip to content

pwm-receivers: update for ExpressLRS 4.x behavior - #547

Draft
MUSTARDTIGERFPV wants to merge 3 commits into
ExpressLRS:masterfrom
MUSTARDTIGERFPV:pwm-receivers-4x
Draft

pwm-receivers: update for ExpressLRS 4.x behavior#547
MUSTARDTIGERFPV wants to merge 3 commits into
ExpressLRS:masterfrom
MUSTARDTIGERFPV:pwm-receivers-4x

Conversation

@MUSTARDTIGERFPV

@MUSTARDTIGERFPV MUSTARDTIGERFPV commented Jul 27, 2026

Copy link
Copy Markdown
Member

The PWM receivers page still described ExpressLRS 3.x behavior in several places, and some of the numbers conflict with the current firmware.

Corrections

Statement Was Now Source
Failsafe range 988-2012us 476-2523us US_CHANNEL_VALUE_MIN/MAX in crsf_protocol.h; clamped in connections-panel.js; stored as failsafe:11 relative to 476 in config.h
Output 3 default failsafe 988us 880us config.cpp, comment reads "ch2 is throttle, failsafe it to 880"
Wide mode resolution 7-bit (128 pos) at TLM ratios 1:8 and slower 6-bit (64 pos) at all ratios 3.x selected 64/128 bins from telemInEveryPacket = (tlmDenom > 1) && (tlmDenom < 8); 4.x HybridWideSwitchToOta is hardcoded to 64 and the seventh bit now carries stubbornAck
TLM ratio range up to 1:256 1:128 is the maximum tlmRatios in TXModuleParameters.cpp
Extended pulse width 885-2115us 880-2120us US_CHANNEL_VALUE_EXT_MIN/MAX

The Wide mode correction brings this page into agreement with the note already on the Switch Configuration page, which the PWM page contradicted.

The same 3.x holdover appears in the Switch Mode summary on the Lua page, which said Wide is "7x 64 or 128-position", so that is corrected here too. The Hybrid half of that sentence is correct per the Switch Configuration page and is unchanged.

Additions

  • Servo Stretch had no documentation anywhere in the manual. It replaced the half pulse width servo mode, which was removed in 4.0. Adds the range, a servo travel warning, and the note that a Set Position failsafe ignores the flag.
  • DShot 3D was not documented. It has been a separate output mode since 4.0. Adds a throttle mapping table for both DShot modes.
  • Output-only PWM pins. Receivers that drive PWM through a buffer or Schmitt trigger cannot use those pins for serial or I2C. The page said outputs could be remapped to "any available pin", which is not correct on those receivers.

DShot and Schmitt are added to .wordlist.txt for the spellcheck. wordlist.dic is left alone since it is generated.

Several statements on this page still described 3.x behavior and
conflicted with the current firmware.

- Failsafe range is 476-2523us, not 988-2012us. The WebUI clamps
  entered values to these limits and the config stores the failsafe
  relative to 476us.
- Output 3 defaults to 880us, not 988us.
- Wide mode is 6-bit (64 pos) at every telemetry ratio. The 7-bit
  (128 pos) behavior belongs to 3.x, and a 1:256 ratio does not exist.
- Extended pulse width is 880-2120us.
- Half pulse width servo mode was removed in 4.0 and replaced by Servo
  Stretch, which had no documentation. Add a section for it, including
  the servo travel warning and the failsafe interaction.
- DShot and DShot 3D are separate output modes. Only DShot was listed.
  Add the throttle mapping for both.
- PWM pins behind an output-only buffer cannot be used for serial or
  I2C, so "any available pin" was not correct.
The previous wording said 3.x gave 7-bit resolution at "the slower
telemetry ratios", which is vague and reads backwards.

The 3.x encoder selected 64 or 128 bins from telemInEveryPacket, which
was (tlmDenom > 1) && (tlmDenom < 8). So it was 7-bit at every ratio
except 1:2 and 1:4. The packet rate was not a factor: every Std default
is 1:8 or slower, so Std never selected the 6-bit path.

This now matches the note already on the Switch Configuration page.
The Switch Mode summary still said Wide is "7x 64 or 128-position".
The 128-position case was removed in 4.0 along with the telemetry ratio
branch in the Wide encoder, so only 64-position remains.

The Hybrid half of the sentence is correct and is unchanged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant