Article

Betaflight RPM filtering: bidirectional DShot, motor poles and how to check it works

Motor noise is most of what your filters fight. Props and bells put energy into the gyro at the motor RPM and at harmonics of that RPM, and those peaks move when you change throttle. A lowpass filter can blunt them, but it also slows the PID loop. RPM filtering parks narrow notch filters on the frequencies the motors are actually producing, so you cut that noise with far less delay.

What follows is the hardware you need, the Configurator steps, how to confirm telemetry is clean, and what to leave alone on the first flights after you enable it. Numbers and defaults come from the Betaflight wiki pages on DShot RPM Filtering and ESC firmware. On newer firmware, check the defaults in your own Configurator.

What it actually does

Bidirectional DShot lets each ESC report eRPM back to the flight controller on the same signal wire that carries the motor command. No extra telemetry UART is required. The flight controller converts eRPM to RPM using the motor pole count you set, then places a bank of notch filters on gyro (and optionally on D term) at those frequencies and their harmonics.

By default that bank is large: 12 notches on each of pitch, roll and yaw, covering the first three harmonics of each motor, for 36 notches in total. The dynamic notch can then focus on frame resonances instead of chasing motor peaks. On Betaflight 4.3 and later, Configurator narrows the dynamic notch automatically when you enable RPM filtering.

The same RPM stream also feeds Dynamic Idle, which holds a minimum motor RPM and helps against desync. That is a separate feature from the filter bank, but it rides on the same bidirectional link.

Hardware and firmware you need

Three pieces have to line up:

  1. A flight controller on Betaflight 4.1 or newer (4.0 is unsupported for this).
  2. ESCs that speak DShot and support bidirectional DShot telemetry.
  3. Correct ESC firmware for your ESC type.

For 32-bit ESCs, Betaflight currently recommends AM32. It is open source, supports RPM filtering and Extended DShot Telemetry (EDT), and flashes through esc-configurator.com. BLHeli_32 added full bidirectional DShot support in 32.7.0. The ESC firmware wiki warns against newer BLHeli_32 releases after 32.7 because of reports of stuck or hot motors and DShot errors; treat 32.7 as the stable BLHeli_32 target until a later release is marked recommended again.

For 8-bit BLHeli-S ESCs, flash BlueJay. It is free, supports RPM filtering and EDT, and is the firmware Betaflight recommends for that hardware. Stock BLHeli-S and JazzMaverick forks are not the path for new installs.

Remove the props before any motor test or ESC flash. Connect a LiPo when you need real telemetry; USB alone often shows 100% error until the ESC is powered.

Match DShot speed to the PID loop

With RPM filtering on, Betaflight's Configuration tab documentation lists these combinations:

PID loop DShot protocol
2 kHz DShot150
4 kHz DShot300
8 kHz DShot600

BMI270 gyros are the exception: use 3.2 kHz / 1.6 kHz with the matching DShot rate rather than the 8 kHz / 4 kHz pairs above.

For 4 kHz PID loops (including 8k4k), DShot300 is the reliability choice. DShot600 works but adds no benefit at that loop rate and is more sensitive to noise. At 8k8k you need DShot600, because DShot300 only updates the motors every second PID loop. Older L-type (BB1) BLHeli-S ESCs should stay on DShot150 with a 2 kHz PID loop.

Watch CPU load. If errors climb or the craft refuses to arm after you enable bidirectional DShot, drop the loop rate or the DShot speed one step and check again.

Enable it in Configurator

In a current Configurator the steps are short:

  1. Open the Motors tab.
  2. Set the ESC protocol to the DShot speed that matches your PID loop.
  3. Enable Bidirectional DShot.
  4. Set Motor Poles to the number of magnets on the motor bell (not the stator windings).
  5. Save and reboot.

Typical pole counts: 14 for most 5-inch motors (2207, 2306 and similar), 12 for many smaller motors (roughly 08xx through mid-14xx). Count the magnets yourself or check the motor datasheet. A wrong pole count puts the notches at the wrong frequencies even when telemetry looks alive.

On 4.3 and later you usually do not need CLI snippets. Enabling bidirectional DShot turns on gyro RPM filtering and adjusts the dynamic notch for you. Still open the PID Tuning / Filter Settings view and confirm that Gyro RPM Filter is on. Leave harmonics at the default of three unless you have blackbox evidence to change it.

Prove telemetry before you fly

Power the ESC with a LiPo, then connect USB. Open Motors again:

  • Idle motors should show 0 RPM.
  • Error percentage per motor should stay under about 1%. A red error line means the link is not clean.
  • Spin a motor gently with the slider (props off). You should see a live RPM reading under the throttle value.

USB without a battery often shows E:100%. That is normal until the ESC initialises on battery power. After a successful battery connection, errors should fall to near zero and stay there when you reconnect.

If RPM filtering is enabled but one or more ESCs stop sending valid telemetry, Betaflight blocks arming and the OSD can show RPMFILTER. Fix the ESC firmware, wiring, DShot rate or pole count before you force the issue. Do not disable the arming check to "just fly" - that check exists to stop hot motors and flyaways from a half-working setup.

Save a diff all before you change filter sliders later. It is the fastest way back if a lift in filtering overheats motors.

First flights, then lighter filtering

For builds that already fly well, leave the rest of the filter stack alone for the first packs after enabling RPM filtering. Confirm cool motors and a clean sound under freestyle loads. The RPM notches remove most motor-related noise; lowpass filters still deal with bearing noise, wind and turbulence, and the dynamic notch still covers frame resonances. Betaflight's guide says to keep the dynamic notch on.

Once that baseline is solid, you can reduce filter delay carefully:

  • Move the gyro and D-term filter multiplier sliders toward less filtering, one step at a time.
  • You may be able to turn off Gyro Lowpass 1 on a clean build; do not strip both gyro lowpasses without blackbox confirmation that the airframe is quiet.
  • Do not gut D-term filtering. Betaflight warns that cutting D filters too far is an easy way to smoke motors.

After each change: short hover, short flight, land and feel the bells. If motors are hot or the hover sounds harsh, put the last change back. Blackbox plus a spectrum tool such as PID Toolbox helps when you want to push further; it is not required for a first enable.

Quick checklist

  • Props off for every motor and ESC bench step.
  • ESC firmware that actually supports bidirectional DShot (AM32, BlueJay, or BLHeli_32 32.7).
  • DShot rate matched to PID loop (2K/150, 4K/300, 8K/600; BMI270 variants as above).
  • Motor poles counted on the bell.
  • Motors tab: ~0% errors on battery, real RPM when spun, 0 RPM at idle.
  • Gyro RPM Filter confirmed on; dynamic notch left enabled.
  • First flights on existing filter settings; only then ease lowpass filtering if motors stay cool.

Get the telemetry clean first. Leave the other filters alone for a pack or two, then take delay out only as far as cool motors and, if you use it, blackbox allow.