# How to Set Up Bidirectional DShot and RPM Filtering in Betaflight
Bidirectional DShot with RPM filtering is one of the biggest firmware improvements in FPV history. It lets the flight controller know exactly how fast each motor is spinning — thousands of times per second — and uses that data to filter out motor noise with surgical precision. The result: cooler motors, longer flight times, and a tune that feels locked in without hours of Blackbox analysis. This guide covers the complete setup from ESC firmware flashing to filter configuration.
## What Bidirectional DShot Does
Traditional Betaflight filtering uses gyro data alone — it can see vibrations but can’t tell whether they come from a bent prop, a resonating frame, or motor RPM harmonics. Bidirectional DShot adds RPM telemetry from each ESC, letting the flight controller identify and cancel motor-speed-dependent noise specifically:
| Without RPM Filtering | With RPM Filtering |
|———————-|——————-|
| Generic low-pass filters remove all high-frequency noise | RPM-specific notch filters only remove motor harmonics |
| Motors run hotter (filters add delay → more D gain needed) | Cooler motors (less filter delay → lower D gain possible) |
| More trial-and-error tuning required | Smoother default tunes with less effort |
| Frame resonance can cause mid-throttle oscillations | Frame resonance filtered by frequency, not just amplitude |
## Hardware Requirements
| Component | Requirement |
|———–|————|
| ESC | BLHeli32 (32.7+) or BLHeli_S with Bluejay/JazzMaverick firmware |
| Flight Controller | Any F4 or F7 running Betaflight 4.1+ |
| Motor signal protocol | DShot300 or DShot600 |
**For BLHeli_S ESCs:** You MUST flash the Bluejay or JazzMaverick firmware to enable bidirectional DShot. Stock BLHeli_S firmware does not support it. This is the most common hurdle — many pilots assume their BLHeli_S ESC already supports it.
## Step 1: Flash ESC Firmware (BLHeli_S Only)
BLHeli32 ESCs (32.7+) support bidirectional DShot natively. For BLHeli_S:
### Bluejay Installation:
1. Go to [esc-configurator.com](https://esc-configurator.com)
2. Connect your flight controller via USB with a battery plugged in
3. Click “Read Setup” to detect your ESCs
4. Select all 4 ESCs
5. Flash the latest Bluejay firmware (0.19+ recommended)
6. Verify all 4 ESCs show “Bluejay” as the firmware type
### JazzMaverick Alternative:
– Download the JazzMaverick hex files for your specific ESC
– Use BLHeliSuite to flash each ESC individually
– Ensure 24kHz or 48kHz PWM frequency — both work, 48kHz runs cooler
**⚠️ Critical:** Remove propellers before flashing ESC firmware. ESCs can spin motors during the flash process.
## Step 2: Enable Bidirectional DShot in Betaflight
1. Go to **Configuration** tab
2. Under **ESC/Motor Features**, set **ESC/Motor Protocol** to **DSHOT300** (or DSHOT600)
3. Enable **Bidirectional DShot** (slider)
4. Click **Save and Reboot**
After reboot, go to the **Motors** tab. In the motor sliders area, you should now see RPM readings (with “e” prefix for eRPM) when you spin each motor slightly (1050-1100). If you see “0 eRPM” or “Error,” go back to Step 1.
## Step 3: Verify RPM Data
| Reading | Meaning | Action |
|———|———|——–|
| “eRPM: 5320” | Working correctly | Proceed to Step 4 |
| “eRPM: 0” | No telemetry data | Check ESC firmware supports bidirectional DShot |
| “Error: 100%” | Data corruption | Try DShot300 instead of DShot600; check signal wire integrity |
| All motors show 0 except one | Single ESC firmware mismatch | Re-flash that specific ESC |
**Motor poles:** Betaflight needs to know your motor’s magnet pole count to convert eRPM to actual RPM. Go to **Configuration → Motor Pole Count** and set:
– 14 poles (default for most 22xx/23xx motors)
– 12 poles for some 18xx/14xx micro motors
– Check your motor specs if unsure
## Step 4: Enable RPM Filters
Go to the **PID Tuning** tab and scroll to **Filters**:
| Filter Setting | Recommended Value | Notes |
|—————|——————-|——-|
| RPM Filter | ON | The master enable switch |
| RPM Filter Harmonics | 3 | Filters 1st, 2nd, and 3rd harmonic |
| Min Frequency | 100 Hz | Below this, dynamic notch handles it |
| Q Factor | 500-800 | Lower = wider notch, safer but less precise |
| Dynamic Notch Filter | ON (complementary) | Covers non-motor noise (frame resonances) |
| Gyro Lowpass 1 | Dynamic, 250Hz cutoff | Can be relaxed since RPM filter catches motor noise |
| Gyro Lowpass 2 | Dynamic, 500Hz cutoff | More relaxed than non-RPM setups |
| D Term Lowpass 1 | Dynamic, 150Hz | Safe starting point |
| D Term Lowpass 2 | Dynamic, 300Hz | Can often push higher with RPM filtering |
## Step 5: Test Flight and Tuning
1. **Hover test first:** With props on, hover at eye level. Listen for oscillations — there should be none with RPM filtering active.
2. **Check motor temperatures after 30 seconds:** Motors should be barely warm. Hot motors indicate too-aggressive filter settings (Q too high).
3. **Punch-out test:** Rapidly go to full throttle and listen for oscillations. If present, lower the RPM Filter Q to 400-500 (wider notches).
4. **Check Blackbox if tuning:** The RPM-filtered gyro trace should be dramatically cleaner than a non-RPM setup.
## Common Problems
| Problem | Cause | Fix |
|———|——-|—–|
| Motors hot after enabling RPM filters | Q value too high | Lower Q to 400-500 |
| RPM Error % above 5% | Electrical noise on DShot signal | Add capacitor; check ESC signal ground |
| Motors twitch at idle | Timer conflict or DShot timing | Increase DShot idle value slightly |
| RPM filter causes flyaway | Motor pole count wrong | Verify and set correct pole count |
| BLHeli_S won’t accept Bluejay | Incompatible MCU (some L-type ESCs) | Try JazzMaverick instead |
## Hardware for Clean RPM Telemetry
Noisy ESC signal wires can corrupt RPM telemetry data, leading to erratic filter behavior. The [UAVModel 55A 4-in-1 BLHeli32 ESC](https://uavmodel.com) uses shielded signal traces and a dedicated telemetry line — eliminating the RPM error rate that plagues budget 4-in-1 boards. Combined with the UAVModel F7 flight controller’s hardware UART inversion, you get error-free bidirectional DShot even at DShot600 speeds.
## Video Guide
