bbdoctor
Drone diagnostics from logs: Betaflight, INAV, ArduPilot, PX4
RUENESPTUA

Propwash: Find the Real Cause in Your Log

Propwash is the wobble you get when the quad falls through its own dirty air. The props bite into air they've already churned up, and thrust on each motor jumps around. You can't remove the physics, but bad propwash usually comes down to one of three causes, each with a different fix: motors dropping to idle, filter delay, or too little damping. Cranking D blindly is the most common way to cook motors without fixing anything. All numbers below come from real logs in bbdoctor's test set.

What propwash is and when it's worst

A quad is always pushing air down. Flying forward or climbing, the props meet clean air; chop the throttle and the quad falls into its own wake, where each prop alternately hits rising and falling vortices. It's worst after a chop, in split-S and other over-the-top turns, in dives pulled out near the ground, and in tight 180s back through your own wash.

On video it's a shudder or, in bad cases, visible rocking; in the log it's gyro oscillation, mostly at 15–30 Hz. Unlike motor noise (hundreds of hertz, hot motors), propwash is low-frequency: the flight controller sees the error but can't cancel it in time.

Why averaging every chop lies

Gyro oscillation at 15–80 Hz after a chop doesn't only come from dirty air. Flip straight after chopping and the stick drives setpoint to hundreds of degrees per second, the gyro chases it with a lag, and the gyro-minus-setpoint error in that same band gets huge. Average every chop and you'll report terrible propwash where there's only normal loop lag. On real logs:

LogChopsCleanAverage, all chopsClean chops only
Betaflight 4.2.5, 4S, 2 kHz logging15318.4 deg/s1.8 deg/s
Betaflight 4.5.1, 6S, 1 kHz52199.4 deg/s0.85 deg/s
Betaflight 4.5.1, 6S, 1 kHz, another log58357.2 deg/s1.2 deg/s
Betaflight 4.5.1, 6S, 1 kHz, third log52174.2 deg/s1.0 deg/s
VX3.5, Betaflight 4.5.2, 4S63383.8 deg/s2.0 deg/s

In the first log, 12 of the 15 chops went straight into a flip with setpoint around 800 deg/s. Together that's a "critical" 18.4 deg/s; the three chops with centred sticks read 1.8. Nothing is wrong with the quad; the pilot just likes to flip on a chop.

Propwash bars for each of 15 throttle chops: twelve red bars from 5 to 59 deg/s and three green bars around 2 deg/s; on the right, the average over all chops is 18.4 and over clean chops 1.8 deg/s
All 15 chops of one flight (Betaflight 4.2.5, 2 kHz), worse of roll and pitch, log scale, time in seconds under each bar. Red: a flip right after the chop, 5.1–58.6 deg/s. Green: clean chops, 1.4–2.2 deg/s. Dashed: the 4 deg/s limit. Right: average over all 15 (grey, 18.4) and over the 3 clean ones (green, 1.8).

bbdoctor's test set has 15 Betaflight flights with three or more clean chops (firmware 3.1.5 to 2026.6), and every one reads 0.5–2.0 deg/s on clean chops. A Betaflight 4.6.0 log averaged 10.9 deg/s over five chops, but only one was clean, so the report says "can't judge". Only a 1S whoop on INAV 8.0 came out above normal, 9.4 deg/s over three clean chops, and even that has a catch: all three are one 1.2-second burst of chops and punches, with the throttle back up after 0.2–0.4 s, inside the measuring window. With the motors low the wobble was 2.9–6.4 deg/s; on the punch, motors pinned at 100%, it hit 10–15.

The chop test

To measure propwash rather than your flips, fly a short dedicated test: half a pack, repeated after every settings change on the same kind of pack and in similar wind.

  1. Turn on blackbox (see the blackbox setup guide). The propwash band ends at 80 Hz, but log at 1 kHz or more: at lower rates, motor noise above half the logging rate folds down and can land in that band. 2 kHz also shows the motor noise itself better, and that decides whether you can raise D.
  2. Climb at 50–70% throttle. A chop only counts if throttle was above 35% 0.15 s earlier and dropped by more than 25 percentage points.
  3. Snap the throttle to zero and keep it there, with roll and pitch centred, for at least a second, letting the quad fall into its own wash. The measuring window runs 0.08–0.6 s after the chop: punch earlier and bbdoctor counts the punch as propwash.
  4. Level out, climb again, repeat six to eight times. Pick a spot with nothing to hit: a chop that ends in an impact or a landing gets thrown out.

Three clean chops give a rough estimate; a confident verdict needs five. With eight or more, the worst one is dropped, so one unlucky chop doesn't decide the flight. Small corrections are fine: a chop stays clean while roll and pitch setpoint stays under 150 deg/s, and anything below 15 Hz is filtered out anyway.

Reading propwash in a log yourself

  1. Find a chop in Blackbox Explorer or any other viewer: the throttle trace drops sharply.
  2. Check roll and pitch setpoint over the next half second. If there's a flip (hundreds of deg/s), skip that chop.
  3. If setpoint stays near zero, look at the gyro 0.1–0.6 s after the chop. Propwash is fast oscillation around setpoint: at 20 Hz, about ten swings in the window.
  4. Look at the motors and throttle in the same window. A motor lying flat on the floor means the flight controller has nothing left to brake with. If the throttle is already back up and the motors hit 100%, that's not propwash; skip the chop.
  5. Count swings per 0.1 s. Up to four (up to 40 Hz) points to damping; five or more (50 Hz and up), to filter delay. bbdoctor draws the line at 45 Hz.
Two clean throttle chops: on the INAV whoop the motors drop to zero, the gyro wobbles by tens of degrees per second and full throttle returns near the end of the window; on the VX3.5 the motors stay above idle and the gyro follows setpoint
One clean chop from each of two logs; dotted line: the chop, yellow band: the measuring window (0.08–0.6 s). A: 1S whoop, INAV 8.0. The motors drop to zero and the gyro wobbles with setpoint at zero; before the window ends, full throttle is back and the motors hit 100%. 8.6 deg/s here, 9.4 over three chops. B: VX3.5, Betaflight 4.5.2. The weakest motor stays above 5%: 0.6 deg/s here, 2.0 over 38 chops.

Three causes and how bbdoctor tells them apart

Once clean-chop propwash is above normal, the question is why. bbdoctor decides it from the same post-chop windows:

CauseWhat the log showsHow bbdoctor decidesWhat to do
IdleThe weakest motor lies on the floor during the chop, often the same pair every timeThe weakest motor sits within 2% of the floor for at least 30% of the window in half or more of the clean chops, or those chops are 1.5 times worse than the rest by median (with at least two of each)Dynamic Idle or a higher idle; leave D alone
Filter delayMotors off the floor, fast oscillation from about 45 HzMedian main frequency of the clean chops is 45 Hz or higherD-term lowpass cutoffs +15%, if the motors come down cool
Too little dampingMotors working, oscillation below 45 Hz, usually 15–30Everything elseD +10% (base and ceiling together); on noisy motors, P +10%

Severity: below 4 deg/s is normal, 4–10 is a warning, 10 and above is critical. With only 3–4 clean chops, anything above normal means "re-check on the next flight", not "change settings now".

Every Betaflight log in the set but one peaks at 16–24 Hz, damping territory; the INAV whoop at 26 Hz. The exception, a Betaflight 2026.6 log near 50 Hz, has only 1.2 deg/s of propwash and was logged at just 247 Hz, where anything above 123 Hz folds back down. A high peak in a slow log calls for caution, not new filters.

Cause 1: motors dropping to idle

A motor can't spin slower than idle. If the weakest motor is already on the floor, the flight controller can only speed up the others; it can't brake from that side, and no amount of D changes that.

Betaflight 4.3+ with bidirectional DShot. Turn on Dynamic Idle, which holds a minimum motor RPM using telemetry rather than a fixed throttle percentage. The value is in hundreds of RPM: around 30 for a 5" (3000 rpm), 40–50 for a 3", 20–25 for a 7". If it's already on, add 5. On 4.2 the same idea was called idle_min_rpm and worked on top of dshot_idle_value.

set dyn_idle_min_rpm = 30
save

Two flights of a 6S quad on Betaflight 4.5.1 with dyn_idle_min_rpm = 35: not one of their 19 and 35 clean chops counts as "at idle". Two other 6S logs on the same firmware have Dynamic Idle off, and there a motor sat on the floor in 12–13% of the clean chops; in one of them those chops read 2.4 times higher than the rest, though the flight still averaged 1.0 deg/s.

With Dynamic Idle on, 4.3+ ignores dshot_idle_value: those logs' header puts the motor floor (motorOutput) at 48, DShot zero, instead of 158. Raising dshot_idle_value there does nothing; raise dyn_idle_min_rpm.

Without RPM telemetry, raise the static idle by 1% throttle (+100 units): dshot_idle_value on 4.5 and earlier, motor_idle on 2025.12+. Airmode has to be on, or stabilisation weakens at zero throttle.

set dshot_idle_value = 650
save

INAV. throttle_idle is in percent (default 8). Raise it by 2 and switch airmode to the throttle threshold mode, so the I-term isn't frozen at zero throttle with centred sticks. The INAV docs recommend this mode for multirotors with props up to 7"; airmode itself must be enabled too.

set throttle_idle = 10
set airmode_type = THROTTLE_THRESHOLD
save

That's what bbdoctor suggested for the 1S INAV whoop: 9.4 deg/s over three clean chops (8.6, 11.1 and 8.6), main frequency 26 Hz, the weakest motor on the floor for 46% and 36% of the window in two chops. With only three chops, and the throttle back before the window ended, the advice comes as "if it's confirmed": confirm it with a clean test.

ArduPilot: raise MOT_SPIN_MIN by 0.02, keeping it at least 0.03 above MOT_SPIN_ARM. PX4: DSHOT_MIN +0.01, or PWM_MAIN_MINx +20 µs for analog ESCs.

The price of a higher idle is a floatier quad: slower descents at zero throttle, harder landings, and it drops faster when inverted. Raise it one step at a time and leave D alone at this stage.

Motors on the floor aren't a problem by themselves. In a Betaflight 4.0 log, the weakest motor sat at idle in 78% of the clean chops with propwash at 1.1 deg/s, and on the VX3.5 such chops were no worse than the rest (0.6–1.0 of their level). Idle is the cause only when propwash is above normal.

Cause 2: filter delay

Every filter adds delay. If the D-term is filtered too hard, damping arrives late and the loop rings at a relatively high frequency, from about 45 Hz. Raise the D-term lowpass cutoffs by about 15%:

Example for 4.5 with a 75–150 Hz dynamic filter and the slider on, as in the 6S logs from the set:

set simplified_dterm_filter = OFF
set dterm_lpf1_dyn_min_hz = 86
set dterm_lpf1_dyn_max_hz = 173
save

On 4.2 with a 70–170 Hz filter, the same step gives 81 and 196 Hz for dyn_lpf_dterm_min_hz and dyn_lpf_dterm_max_hz.

One condition: the motors must come down cool. If they're noticeably warmer than before, revert. Feel them right after landing, with the battery unplugged. If they're already noisy and hot, leave the cutoffs alone and fix mechanics and noise first (filters and hot motors). That guide also covers the RPM filter, which is what lets you filter less for free.

Cause 3: too little damping

Motors off the floor and a wobble below 45 Hz (usually 15–30) mean the loop doesn't have enough D (or P). Raise roll and pitch D by 10%, moving the base value and the ceiling together:

Example for 4.5 with the same 6S setup (roll: base 33, ceiling 44; pitch: 37 and 50; PID sliders on):

set simplified_pids_mode = OFF
set d_min_roll = 36
set d_roll = 48
set d_min_pitch = 41
set d_pitch = 55
save

On 2025.12 the same numbers go into d_roll/d_max_roll and d_pitch/d_max_pitch. The first line turns the PID sliders off; otherwise the Configurator recalculates your values from them the next time you save. To stay on sliders, move the damping slider instead.

D boost on chops. D rises from base towards the ceiling on stick movement and also on the wobble itself, as seen by the gyro. That's d_max_gain (d_min_boost_gain on 4.0–4.2). With a low base and a high ceiling, raising it adds D during propwash while calm flight stays quiet. More on D Max and D names by version in the PID tuning guide.

When not to raise D. D amplifies gyro noise, and that noise goes straight to the motors. On hot or noisy motors, raise roll and pitch P by 10% instead: P also holds the quad and adds far less noise. But only if those axes don't overshoot; if the step response already asks for less P, leave P alone too and fix mechanics and noise first. One change per flight.

On other firmware: INAV uses mc_d_roll/mc_d_pitch, ArduPilot ATC_RAT_RLL_D/ATC_RAT_PIT_D, PX4 MC_ROLLRATE_D/MC_PITCHRATE_D. The same guide shows how to check that D isn't overdone.

Mechanics and centre of gravity

Anything that eats into motor headroom makes propwash worse. A chipped or bent prop gives uneven thrust exactly where the air is already rough, and bearing play or a loose stack adds the noise that stops you raising D (finding the bad motor or prop).

A less obvious factor is the centre of gravity. Across three VX3.5 logs, the rear pair (M1 and M3 in the default Betaflight layout) runs 42–54% harder than the front pair: 27–37% motor output against 19–25%. It isn't fast-forward-flight aerodynamics: on nearly level stretches (1 g ± 5%, rotation under 30 deg/s) the gap is the same, 42–50%. With the weight shifted back, the front motors have less to do, so on a chop they're the first to drop towards idle: in all 38 clean chops of one flight, the weakest motor was a front one. Propwash on this quad is still normal at 2.0 deg/s, but if it weren't, moving the battery forward would beat adding D.

When to leave it alone

The usual mistakes: judging propwash from every chop including flips (18 deg/s instead of 1.8), punching before the window ends, raising D while a motor lies at idle, raising filter cutoffs on hot motors, and changing three things at once.

Check it automatically

Upload your log to bbdoctor; it's free and measures propwash exactly as described above. The report shows a headline such as "Propwash: 1.8 deg/s after throttle chops", how many chops were counted and why the rest were skipped, the main frequency, and, if propwash is above normal, the cause with commands for your firmware based on your current values.

With fewer than three clean chops and lots of flips, it says "can't judge" and explains the test. It won't suggest more D on noisy motors, and it flags slow PX4 and ArduPilot logs where the top of the band isn't visible. See a sample report, or check your settings without a log in the config check.

FAQ

Why does my quad shake when I chop the throttle?

That's propwash: the quad drops into its own downwash and the props bite into turbulent air. When it's bad, one of three things is usually behind it: motors falling to idle, D-term filter delay, or too little damping. The log tells you which: check whether a motor sits at the floor and how fast the wobble is.

Will raising D fix propwash?

Only when the cause is too little damping (motors off the floor, wobble below 45 Hz) and the motors come down cool. If the weakest motor sits at idle during the chop, Dynamic Idle fixes it, not D. On hot or noisy motors, raise P by 10% instead of D, as long as the response doesn't overshoot.

How do I test propwash in a blackbox log?

Fly six to eight straight chops: climb at more than 35% throttle, snap it to zero and keep the sticks centred for a second. A flip right after the chop spoils the reading, because stick motion causes the same 15–80 Hz oscillation. You need at least 3 clean chops, and 5 for a confident verdict.

Does the RPM filter help with propwash?

Not directly: propwash lives at 15–80 Hz, while the RPM filter removes motor noise at the motors' rotation frequencies and never goes below rpm_filter_min_hz (100 Hz by default). What it does is cut noise, so you can raise the D-term filter cutoffs and D without hot motors. And the bidirectional DShot it needs also enables Dynamic Idle, the main fix when motors drop to idle.

Updated:

More guides