DTERM_CUT
commit7e3e5649e186599fcdd276b8498e37a4a0a17f13
authorctzsnooze <chris.thompson@sydney.edu.au>
Sun, 13 Jan 2019 04:09:03 +0000 (12 21:09 -0700)
committerctzsnooze <chris.thompson@sydney.edu.au>
Sun, 13 Jan 2019 04:09:03 +0000 (12 21:09 -0700)
tree2d94b32601ba66e40920cb8c814911ddb680cd8d
parent8e54c6711c1b14e3afe30a7c4f7510ad6757d9a3
DTERM_CUT

This code cuts D by a specified percentage durning normal flight.

It lets D smoothly rise up to normal during rapid gyro moves like flips and rolls, and increase during prop wash events.

D should now be tuned to values the 'normal' 30-45 range.

If D is 40, a dterm_cut_percentage of 65 will cut D to 14 in normal flight, but the quad will still get full 40 of D to control bounce-back after flips and about 25 of D during strong prop wash.

The dterm_cut_percentage can be adjusted via the OSD, from the D filtering page.
Adding d_cut results in cooler motors, lower amounts of noise in motor traces and faster reactions to quick stick inputs.

Too high a dterm_cut_percentage may bring out P oscillation from lack of D.  Values of 70% are generally OK.

Input is gyro differential (delta).  Frequencies above 40hz (above propwash) are attenuated with a configurable (dterm_cut_range_hz) biquad filter.  Lower values for range can be used if the quad is very noisy or gets low frequency D resonant oscillation.  Up to 50 or 60hz may suit clean quads where prop wash control is the main priority.  Too high a range value results in D being boosted from noise in normal flight.

The boost signal is 'integrated, smoothed and delayed' with a 7hz PT1 'dterm_cut_lowpass_hz' filter.  The default of 7Hz gives about the right amount of smoothing and delay.  Higher numbers cause the boost to come on faster, with less delay. Lower values delay the boost effect and cause it to last longer.

The dterm_cut_gain amount controls the strength of the boost effect by amplifying the input to the boosting effect.  If the quad is flow gently, a higher gain value may be needed to gain full boost.

Logging with set debug_mode = D_CUT allows recording of realtime D values on roll and pitch into debug 2 and 3.  The reatime D value should reach its set maximum during rapid turns, ideally at about the time D itself peaks.  If it fails to reach the maximum, gain should be increased.

The D_Cut feature is not enabled on LUXV2RACE, OMNIBUS, SPRACINGF3NEO because there isn't enough flash space.
src/main/build/debug.c
src/main/build/debug.h
src/main/cms/cms_menu_imu.c
src/main/flight/pid.c
src/main/flight/pid.h
src/main/interface/settings.c
src/main/target/LUX_RACE/target.h
src/main/target/OMNIBUS/target.h
src/main/target/SPRACINGF3NEO/target.h
src/main/target/common_pre.h