# Betaflight 4.0

## Betaflight 4.0带来了

* 由双向Dshot的RPM回传控制的RPM滤波器组，显著改善对于电机噪声的抑制，降低因滤波带来的延迟。
* 弹射起飞模式，允许飞行员精准的保持指定的角度，以完美的姿态弹射进入赛道。
* D\_Min，根据摇杆的运动状态调整PID的D项系数。
* [动态低通滤波器](https://app.gitbook.com/s/-M4XZa_Xo8uuKqMMASip/tuning-notes/betaflight-4.0.md#dong-tai-di-tong-lv-bo-qi)，可以在低油门时降低噪声，并在高转速时降低延迟。
* [改进的动态陷波器代码](https://app.gitbook.com/s/-M4XZa_Xo8uuKqMMASip/tuning-notes/betaflight-4.0.md#gai-jin-de-dong-tai-xian-bo-lv-bo-qi-dai-ma)，具有更好的噪声跟踪能力和抑制能力，降低延迟。还可使用两个间隔较近、槽口较窄的陷波器，以更低的延迟更好地追踪和抑制电机噪声。
* [仅衰减D的TPA](https://app.gitbook.com/s/-M4XZa_Xo8uuKqMMASip/tuning-notes/betaflight-4.0.md#zhi-shuai-jiandde-tpa)，用于在高油门时降低D的增益以降低Dterm噪音，使P能够保持正常的响应。
* 整合式偏航控制，实验性功能，在数学上对偏航的PID进行积分，可以用于简化调整偏航参数的过程。
* [改进的I值释放设定点模式](https://app.gitbook.com/s/-M4XZa_Xo8uuKqMMASip/tuning-notes/betaflight-4.0.md#gai-jin-le-deizhi-shi-fang-de-she-ding-dian-mo-shi)，旨在提高过弯和躲避障碍时的准确性。适用于赛道飞手。
* [瞬态油门限制](https://app.gitbook.com/s/-M4XZa_Xo8uuKqMMASip/tuning-notes/betaflight-4.0.md#shun-tai-you-men-xian-zhi)，通过防止使噪声重复加倍导致曲解原信号，改善高油门和低油门时的响应性能。
* [改进了偏航的PID](https://app.gitbook.com/s/-M4XZa_Xo8uuKqMMASip/tuning-notes/betaflight-4.0.md#gai-jin-de-pian-hang-pid)，因为我们更好的理解了应该如何调整偏航。

其他的与飞行性能相关的变化还包括：

* 绝对控制代码已经得到改进，但现在默认关闭。因为如果没有正确调整参数，绝对控制会导致晃动
* 默认情况下禁用I值旋转
* PID默认值略有改动

**重要提示：请从头开始设置4.0！请勿将旧DUMP直接粘贴到CLI中！**

**警告：4.0对高P和D值敏感！ 对于正常的4S 2400-2600kV 5寸飞机来说，默认值是非常合适的。对于高推重比的飞机（例如6S或超轻型飞机），首次飞行时应该将所有PID值至少减少1/3。**

### 如果我飞默认值，我应该注意什么？

* 电机更凉了
* 在低油门下会有和以前一样的洗桨情况，但在高油门下飞控对于洗桨的控制显著改善
* 默认参数范围通用性更强，适用于各种类型的穿越机
* 电机听起来感觉更精准、更“平滑”。

### 我是一个自由花飞飞手，我应该往CLI里面粘贴什么？

花飞的目标是流畅。使用你的旧PID就可以了，将D\_Min设置为旧D值的75%，并稍稍降低你的旧P和D值。

**警告：默认PID是针对略重的经典4s花飞飞机（有一个较重的GoPro，电池也比较中）配置的。如果使用6s或比较轻的花飞飞机，请在起飞前将PID降低1/3。否则的话飞机可能会有严重的抖动，甚至直接抖上月球！**

若以默认值为基础，对于一个普通的4s花飞飞机，请尝试：

```
set dterm_lowpass2_type = PT1
set dterm_lowpass2_hz = 200
set feedforward_transition = 30
set iterm_relax_type = gyro
set iterm_relax_cutoff = 10
set transient_throttle_limit = 15
set i_pitch = 85
set i_roll = 80
set d_min_roll = 25
set d_min_pitch = 28
set d_min_boost_gain = 30
set d_min_advance = 50
set d_pitch = 38
set d_roll = 30
set tpa_rate = 50
set tpa_breakpoint = 1500
set tpa_mode = D
set p_yaw = 35
set i_yaw = 100
set d_yaw = 0
set f_yaw = 35
set iterm_rotation = OFF
```

### 我的飞机在翻滚之后有一个缓慢的回弹…

这通常是由于`iterm_relax_cutoff`值过高引起的。请在CLI中将其值拉高，以确认更高的值的确会是他变得更糟，然后请逐步尝试将此值降低，直到回弹现象不再困扰你为止。最佳值应该是不再会给您造成回弹情况下的最高值。 如果它是自由式四边形，则还要`set iterm_relax_type = gyro`，这样可以延长I值的抑制时间，并且对于具有此特定问题的花飞飞机更好。 上面的代码段对于大多数花飞飞机来说应该足够了。

使用陀螺仪类型iterm\_relax和较低截止值的缺点是，在非常快速的持续转弯（例如围绕树木进行刷锅）等情况下，飞机的转弯半径会趋向于变大，且不能完美保持转弯半径。这对花式飞行来说问题不大，但对于竞赛飞行员或刚入门自由式花飞的飞行员来说是个大问题。 竞赛飞行员通常更喜欢设定点为30-35的临界值，并接受一些反弹。

默认值则有些妥协；请以代码段作为调参起点。

### 我是一个竞速飞手…或者我正在飞6s/超轻高灵敏飞机

竞速的目标是获得最佳响应能力。所以需要更多的I，尽可能少的D。但这样可能会导致洗桨情况变糟糕，翻滚过后的过冲变大。

```
set dterm_lowpass2_type = BIQUAD
set dterm_lowpass2_hz = 150
set feedforward_transition = 0
set iterm_relax_type = setpoint
set iterm_relax_cutoff = 35
set transient_throttle_limit = 10
set p_pitch = 30
set p_roll = 28
set i_pitch = 90
set i_roll = 84
set d_pitch = 27
set d_min_pitch = 18
set d_roll = 25
set d_min_roll = 16
set d_min_boost_gain = 27
set d_min_advance = 0
set f_pitch = 90
set f_roll = 84
set tpa_rate = 75
set tpa_breakpoint = 1400
set tpa_mode = D
set p_yaw = 30
set i_yaw = 90
set d_yaw = 0
set f_yaw = 30
set iterm_rotation = OFF
set thrust_linear = 0
```

### 救命！我一解锁它就飞起来了！

这是由于D的敏感性所导致的，潜在原因可能是机臂过软、推重比很高、陀螺仪设置错误或者是桨/机架响应问题。

对于6s飞机来说，您首先应将PID降低1/3。

下面的设置**稍稍降低了P和D，并将Dterm滤波稍微下调以增强其滤波强度**，这可以使你的飞机不再那么癫狂地起飞。从某个角度来讲它可以解决潜在的问题：

```
set d_min_roll = 14
set d_roll = 20
set d_min_pitch = 15
set d_pitch = 22
set d_min_boost_gain = 20
set tpa_rate = 75
set tpa_breakpoint = 1400
set tpa_mode = D
set p_roll = 30
set p_pitch = 30
set d_yaw = 0
set dterm_lowpass2_type = PT1
set dterm_lowpass2_hz = 100
```

### 我正在飞大轴距的飞机 - 7寸或者更大的X-Class

对于具有较大螺旋桨的四轴来说，Betaflight 4.0的默认滤波设置通常太高。请尝试以下操作，允许动态陷波和低通滤波的截止频率变得足够低，以适应这些低转速的怪兽：

```
set dyn_lpf_gyro_min_hz = 70
set dyn_lpf_gyro_max_hz = 350
set dyn_notch_range = LOW
set iterm_relax_type = gyro
set iterm_relax_cutoff = 7
set dyn_notch_min_hz = 100
set dyn_lpf_dterm_min_hz = 70
set dyn_lpf_dterm_max_hz = 150
set dterm_lowpass2_hz = 120
set d_yaw = 0
```

有些时候，桨/机臂共振会需要一个静态Dterm陷波滤波器，但通常来说并不需要。基于RPM的多组滤波器应该能很好地适应这些机器。

### 我的3.5参数调校得令我非常满意，我只想要飞起来像以前一样

以下代码段可以将4.0的滤波器设置为与3.5完全一致。 如果您在3.5中的参数调整得非常好，那么这些设置应使您的飞机在4.0中得到几乎完全相同的飞行体验。 在较高的rpm下，延迟会稍有减少，并且电机可能会稍微更凉一些，但总体而言应该相同。 如果无法在4.0中获得良好的结果，并且您清楚这些参数3.5中工作量好，请尝试这些设置。

请不要将3.5的diff/dump直接粘贴到4.0中！

在4.0中，偏航的I值放大了2.5倍。要完全匹配3.5的PID的话，请将3.5中的Yaw的I值除以2.5。

```
set gyro_lowpass_type = PT1
set gyro_lowpass_hz = 300
set gyro_lowpass2_type = PT1
set gyro_lowpass2_hz = 100

set dyn_lpf_gyro_min_hz = 300
set dyn_lpf_gyro_max_hz = 450

set gyro_notch1_hz = 0
set gyro_notch1_cutoff = 0
set gyro_notch2_hz = 0
set gyro_notch2_cutoff = 0

set dyn_notch_range = AUTO
set dyn_notch_width_percent = 0
set dyn_notch_q = 70
set dyn_notch_min_hz = 130

set dterm_lowpass_type = PT1
set dterm_lowpass_hz = 200
set dterm_lowpass2_type = PT1
set dterm_lowpass2_hz = 100

set dyn_lpf_dterm_min_hz = 200
set dyn_lpf_dterm_max_hz = 250

set dterm_notch_hz = 0
set dterm_notch_cutoff = 0

set d_min_roll = 0
set d_min_pitch = 0
set d_min_yaw = 0

set abs_control_gain = 0
set use_integrated_yaw = OFF
set d_yaw = 0
```

### 4.0最小化洗桨调参指南

简短的回答：

* 在弧线中飞行
* 在转弯时保持油门
* 调大D（增加D本身、D\_Min或者d\_min\_gain）
* 降低滤波器延迟
* 将响应能力/洗桨抑制能力调得强一些
* 某些情况下增大一点P

又长又复杂的回答：

当降低油门，进行快速转弯，然后飞行员再次推高油门，这时飞机会发现它正在向后/向下坠入乱流，洗桨便在这时发生了。当处于反向气流中时，任何螺旋桨都会在尖端产生涡流，从而大大减少推力，而“乱流”本身就有可能非常混乱，当我们飞经它时，它会把飞机推来推去。

当我们在180°翻转情况下将油门快速降低时，将会有几个电机开始以低于其他电机转速启动，导致推力增加得并不均匀，从而导致轴与轴之间产生串扰、二次PID响应，使得稳定性变得更差。因此需要在发生洗桨时尽量保持油门，并尽可能避免将油门降低至零。

最终结果是产生高度非线性的电机响应，使得正常的PID控制变得相对无效。

洗桨的最佳解决方案是飞行风格。一个优秀的飞行员可以十分平滑地驾驶一个有着非常糟糕的洗桨状况的飞机，并且还会使它看起来不错。这其中重要的飞行因素有：

* 保持螺旋桨在干净的空气中前进
* 避免剧烈的180°转弯飞行
* 转弯时保持油门
* 不要将油门快速降低到零（快速翻滚、倒飞期间除外）
* 在弧线上流畅飞行

在洗桨过程中，飞机会以相对较低的频率震动，例如20-30Hz，这在视频中能很容易观察到。这些震动无法通过滤波消除。对洗桨能有更好抑制能力的穿越机通常具有以下特质：

* 能根据需要快速改变推力：
  * 更高的电池s数，例如6s优于4s；
  * 更轻，更易于转动的螺旋桨（不要过轻）
* 较重的飞机（更稳定）
* 电池上置（更低的转动惯量）

从软件角度来看：

* **滤波器延迟越多越少**（尽管滤波器延迟低=噪声滤除得少=电机更热）
* **D系数越高好**（过多的D将会导致电机更热)）
* 对于P来说，有一个“甜蜜点”，P过低或者过高都不是理想的 - 需要进一步实验
* 在低转速下提高PID响应性（推力线性化）对某些飞机来说非常好用
* **D\_Min只会使洗桨变得更糟糕，而不是更好**

4.0一直专注于更强的低转速滤波，以避免在高清视频中造成果冻，同时还保持电机较凉。4.0中高转速时滤波器的延迟低于3.5，但低转速时延迟将增大。

**在4.0中，大多数时间D将会以一个更低的值运行 - D\_Min的值**。这将是你在正常飞行时使用的D值。当有摇杆命令输入时，`D_Min`仅会上升到正常的D值。在发生洗桨时，D也会向着D的正常值增大，但不会完全增大到D的正常值。从洗桨的角度来看，`D_Min`值比D值更重要。

请注意，4.0默认的D的“最大值”比D\_Min高，但此值仅会在快速快速翻滚期间被激活。因此，对于通常发生在低油门段的洗桨来说，D\_Min是最重要的。

总体而言，在4.0中，如果能一直保持油门，尤其是在1/3油门到半油门的区间内，洗桨一般会发生得更少；但是当从更低的油门开始推油门时，洗桨可能会更糟。将油门降至零然后180°急转飞行的飞手可能会收到比3.5更多的洗桨，但如果在转弯期间保持油门，您可能会发现它比之前表现得更好。

如果你发现4.0相比之前版本有更多的洗桨，以下修改可能会有所帮助：

* 将旧参数的D值上调20%
* 将D\_Min值设置为低于旧D值的20%（这将使D的最大值和最小值之间的差异减小）
* 将d\_min\_boost\_gain增加到30

如果这样的D表现还不错，

* 尝试增大或降低P值以找到最佳P值
* 尝试将thrust\_linear增大一些（对于5寸穿越机，建议值是10-20，并请注意悬停时的晃动情况）
* 为降低滤波器延迟，请小心地将滤波器最小值稍稍增大一些

默认的滤波器最小值为150Hz左右。例如

* `dyn_lpf_gyro_min_hz`，陀螺仪动态低通滤波器最低截止频率&#x20;
* `dyn_notch_min_hz`，陀螺仪动态陷波器最低截止频率&#x20;
* `dyn_lpf_dterm_min_hz`，Dterm动态低通滤波器最小截止频率&#x20;
* `dterm_lowpass_hz`，Dterm低通滤波器2截止频率(不是动态滤波器，但是此值也会在飞行过程中上升)

**如果电机很凉，请立刻尝试增加所有这些值，比如170，然后再次试飞**。当再次增大这些值时，应减少增大量并逐步进行测试。请注意，在典型的5寸飞机上，250Hz大概是中油门时的转速。还请注意，如果你使用弯曲的螺旋桨进行飞行或者电机没有固定得很牢靠的话，则有很大的可能性会烧毁电机。当更改这些滤波器值时，请仔细检查。您可能还会发现，当您增加这些值是，果冻效应会突然变得更糟，或者电机温度会突然恶化。

基于RPM的滤波器可能会降低延迟，应予以考虑。但请注意，此功能目前仍然是实验性功能。

请谨记，洗桨的根本原因是飞行风格。在技术原因中，迄今为止最大的影响因素是电机/螺旋桨的产生推力的延迟而引起的延迟（这由物理因素决定，因为在现实世界中物体的能量无法发生跃变）。只有10%的问题与滤波器延迟有关。及时滤波器延迟为0，仍然会有洗桨状况发生。大多数人都会注意到，通过增大D、D\_Min，并将滤波器截止频率设到更高，或者关闭一些滤波器就能够改善洗桨状况。然而在某些情况下，“回报”会越来越少，燃烧电机的风险，以及功率、效率和飞行时间的损失也会越来越大。每个人的情况都会略有不同，最佳的折中方案很大程度上取决于那些对我们而言最重要的东西，以及我们真正想要飞机实现的东西。

### 动态低通滤波器

#### 介绍

对于四轴飞行器来说，摇杆命令输入和所对应的电机响应都发生在低频区，响应次数通常小于每秒50次(50hz)。然而，电机因转动产生的噪音一直延展到500hz，并且可以比我们的摇杆命令输入还要“响”。这种噪声由陀螺仪检测到，通过PID被放大，最终返还给电机。由于电机不能以这么高的频率快速改变转速，所以，电力受到到噪声影响不断上升下降，而不能产生实际升力，但会产生热量。滤波的目的则是消除这些高频噪声，确保仅向电机发送无噪声的干净的输入信号。

所有的数字滤波器都会产生一些延迟，延迟越大，四轴震荡的幅度就越大，这会导致洗桨变得更糟糕，操作也变得迟钝。

设计与调整滤波器的挑战是在截止频率之上尽可能多地消除噪声，在截止频率以下尽可能多地保留信号，兼顾以上两点同时尽可能地使延迟降到最低。但是所有的滤波器都将带来延迟，并且滤波强度越高延迟就越大。

大多数噪声的直接来源是电机的转动：电机的基频（rpm\*60，单位hz）和该频率的整数倍频率（高次谐波）。所有的螺旋桨叶片也都具有固定的共振频率，并且，当它与电机转动频率相匹配时，可能突然会在共振频率的影响下产生不良震荡。上述所有噪音都和电机转速直接相关。虽然在空气湍流和轴承的震动中存在一些与转速不相关的随机噪声带，但穿越机上绝大多数的噪声都与电机转速直接直接或间接相关。

对于那些不能使用RPM滤波器的来说，动态陷波器和低通滤波器都得到了改进，因此他们的工作效果更好，延迟更低。

#### 4.0中噪声滤波的改动

Betaflight 4.0提供了一种可以将低通滤波器的截止频率快速切换到更高值的方法。分配给第一级陀螺仪和Dterm的低通滤波器的截止频率现在可以随着油门的增加，沿着模拟电机转速的曲线(油门-截止频率曲线)而动态增加。这可以减少高油门时的延迟，并且允许动态陷波滤波器更好的跟踪电机噪声峰值。

现在，动态陷波滤波器的中心频率可以在低油门时更低，以帮助消除有时在花飞穿越机上出现的果冻效应。新的动态低通滤波器的默认设置将允许动态陷波器在更宽的频率范围内更好的跟踪电机噪声峰值。并且会比以前更强力的清除电机噪声基频以上的噪声信号。

这意味着在低油门下的延迟和洗桨情况并不会比3.4更好或者更差，但是在较高的油门时延迟和洗桨情况将会改善。显著改善对于全频谱的噪声的抑制能力。

低通滤波器的截止频率会随着油门而移动。这将使动态陷波器能更精准的追踪到电机噪声，同时还能降低延迟。 动态陷波器的代码也得到巨幅提升，能够更强力清除电机噪声。

#### 启用/禁用动态低通滤波器

动态低通滤波器的最小值和最大值配置选项独立于传统的静态低通滤波器1和2。当动态低通滤波器激活时，其设置将会覆盖掉静态低通滤波器1的值。静态低通滤波器2的值和静态陷波滤波器仍然可以正常使用，并会像之前一样工作。

并非所有飞控的闪存大小都足以支持动态低通滤波器。如果你的飞控在CLI内没有显示`dyn_lpf_gyro_max_hz`等参数，则不支持启用动态低通滤波器。

当动态最小值(指截止频率，下同)大于最大值且动态最小值为0时，第一级低通滤波器的值将被忽略，动态低通滤波器将激活。

例如，以下设置将忽略gyro\_lowpass\_hz的值，并启用动态低通滤波器，最小值为150hz，最大值为600hz：

```
set dyn_lpf_gyro_min_hz = 150
set dyn_lpf_gyro_max_hz = 600
```

以下设置将禁用动态低通滤波器，并将返回到静态低通，也会忽略`gyro_lowpass_hz`的值：

```
set dyn_lpf_gyro_min_hz = 0
set dyn_lpf_gyro_max_hz = 600
```

当低通滤波器类型配置为biquad时，动态低通滤波的效果最佳。单个动态biquad将达到3.5中的静态PT1所达到的全部滤波效果。通常需要一个陀螺仪静态低通滤波作为辅助，不需要静态陷波器。强烈建议在4.0中使用默认值进行低通滤波。

#### 动态低通滤波器设置

dyn\_lpf\_gyro\_min\_hz设置的是动态低通滤波器的最低截止频率。它并不能将 油门-截止频率的曲线向上提升，而是为其放置一个“地板”。当截止频率随着油门-截止频率曲线下降到一定程度时，截止频率将不再下降。

dyn\_lpf\_gyro\_max\_hz设置的是动态低通滤波器的截止频率可以达到的最高频率，它还定义了从零油门移动至此截止频率的油门-截止频率曲线。在理想状况下，dyn\_lpf\_gyro\_max\_hz应该被设置为接近穿越机实际的最大电机转速(hz)。对于典型的5寸机来说，大约是450-500hz，就是27000-30000rpm；较小的穿越机通常转速更快，对于3-4寸穿越机来说约为600-650hz；大轴距的飞机转速将更慢，大约为300-350hz。最大频率可以通过在OSD中显示RPM的调试数据来帮助你确定，或者记录日志进行黑盒分析，或者使用PID-analyzer进行分析。可以通过`set osd_stat_max_fft = ON`，来使上锁后在OSD的stats屏幕中显示峰值最大值，请确保将`dyn_lpf_gyro_max_hz`设置为至少610，否则动态陷波滤波器将不能升得很高，并且FFT最高峰值频率读数将是无效的。

如果在全油门时低通滤波器的截止频率不够高，电机噪声有可能会被低通滤波器衰减，导致动态陷波滤波器的FFT无法正常追踪到电机噪声，这会使得整体噪声更严重。同样地，如果低通滤波截止频率不够低，则FFT则有可能去追踪电机噪声的第一级谐波，导致电机噪声的基频噪声漏过。使用`set debug_mode = DEBUG_DYN_LPF`会将动态陷波滤波器的中心频率记录到debug0通道中。FFT值将随着油门升高平滑追踪电机噪声峰值。如果在高油门时，FFT值无法在电机噪声峰值频率上保持稳定，就需要略微提升`dyn_lpf_gyro_max_hz`的值。如果在低油门时，FFT值非常跳跃，你可以微调`dyn_lpf_min_hz`来帮助其稳定追踪电机噪声的主峰值。

Betaflight 4.0默认在陀螺仪信号上使用单个动态Biquad，而不是像3.5一样使用两个静态PT1。这是因为Biquad具有更清晰的带通范围，并且在截止频率以上（对信号）有更陡峭的切割幅度。这可以是非有效的衰减高于预期电机峰值的其他所有噪声，并允许动态陷波消除噪声。最终应该会得到一张非常干净的噪声频谱图，电机噪声的基频、高次谐波和大多数普通噪声都将被消除。低油门时的延迟与3.5大抵相同，但中油门时延迟将减少。对比3.5来说，默认设置将使更多的低于截止频率的信号通过，通常将带来更敏锐的响应。

#### 动态Dterm滤波

在Dterm上使用与陀螺仪相同的动态低通滤波方法，但策略略有不同。

D项将主动放大高频率的噪声，但我们需要尽可能多的D来帮助我们抑制超调和洗桨等不受控的事件。在一个调整良好的飞机上，洗桨发生在30-80hz频率范围内。所以在低于100hz的范围内，我们需要尽可能多的D；高于100hz就希望有尽可能少的D。与此同时，Dterm的延迟确实降低了它的效率，因此我们希望尽可能的减少D项延迟。这几乎是一个不可能的挑战！

经大量仿真之后，我们发现4.0默认的动态biquad设置提供了最佳效果。通过将动态biquad范围设置为150-250hz，静态低通设置为高于250hz，我们狠狠地对D项进行了过滤。这样的设置使得D项在在洗桨频率附近(40-80hz)被放大，同时使高于此频率的D项都被大幅度衰减掉。这是使Betaflight 4.0尽管只做了很少的陀螺仪滤波但却使电机变得更凉的主要原因。

我们使用一个动态Biquad滤波器和第二级截止频率稍稍提高的静态滤波器来增强对Dterm的过滤。这是为了强力抑制Dterm噪声，因为D项充当着与频率大小正相关的噪声放大器。这样安排的原因，一是为了使D项在洗桨频率附近（40-80hz）之间被放大，同时将高于截止频率的噪声狠狠的衰减掉。正是于此，才使得Betaflight 4.0的电机温度更低。第二个Dterm静态滤波器不一定必须是Biquad，如果飞机相当干净（新装，噪声低，机架硬），PT1就会有很好的效果了。但第一级动态滤波器类型应该保持为Biquad。

所以，将Dterm滤波保持默认设置即可。

#### 调整动态低通滤波器

调整这些动态低通滤波器并非易事。通过`set debug_mode = FFT_FREQ`并在黑盒中观察分析是唯一实用的方法。原则上应与标准陷波滤波器同时使用：

* 将dyn\_lpf\_gyro\_max\_hz设置为以hz表示的最大电机转速的预估值
* 在试飞中，根据低油门时的电机温度，将dyn\_lpf\_gyro\_min\_hz上调至最高不高于200hz
* 如果电机温度比较高而且轴承不太好，请至少添加一个陀螺仪静态PT1滤波器
* 永远开启Dterm的动态Biquad，并且需要小心地将最小值调高。在此过程中你有可能会突然在某个频率下使电机变得非常烫手，这是因为螺旋桨无法那么快地响应指令中的噪声。
* Dterm的低通滤波器2十分有用；如果黑盒日志显示Dterm的噪声并不高，则可以将其截止频率调高

在试飞中：只需要保留默认值；如果电机都很凉，则可以按相同的百分比提升所有的滤波器的截止频率，并使陀螺仪动态低通的最大值保持在最大转速附近。

### 改进的动态陷波滤波器代码

我们使用基于FFT的动态陷波滤波器无法单独追踪每个电机。即使是电机分布在多个略微不同的频率上制造噪声，FFT算法也只能计算出一个中心频率传递给陷波器来抑制噪音。3.5的动态陷波器的Q因子为0.7（CLI中为70），它使得槽口变得很宽，在低转速（低油门）时导致十分明显的滤波延迟。

在4.0的开发期间，我们发现，如果使用两个间隔较近、槽口较窄的陷波器，与一个较宽的陷波器相比，可以获得更好的滤波效果，同时也能降低延迟。

`dyn_notch_width_percent`设置的是中心频率两侧的百分比，决定了这两个成对的陷波器间隔有多远。dyn\_notch\_q默认值为120，使得陷波器的槽口宽度几乎为3.5中的一半。

对于干净的飞机、亦或是视延迟十分重要的飞机来说，将`dyn_notch_width_percent`设置为0将仅运行一个非常窄的陷波器。电机温度有可能会变得更高，但滤波延迟将降低，洗桨情况将会不那么糟糕。这并不适用于普通穿越机，但对于那些使用新桨新电机顺畅飞行的高性能穿越机来说可能会有所帮助。使干净的穿越机平滑飞行的另一种方法是减小百分比宽度并增加Q因子。例如，将宽度设置为4%并将Q设置为200将会使陷波器槽口变得非常窄，并且带来更低的延迟。

相反，如果要在任何情况下都能愉快地飞飞机，并且如果机器不是很吵（指信号噪声）的话，就需要增加宽度百分比和降低Q因子。任何对于宽度或者Q因子的改变都应该是成对做出的，例如，如果宽度提高了50%那Q因子也应该降低50%，以免在两个陷波器中间产生一个较大的“中间间隙”。

动态陷波滤波器有三个频率范围可供选择，“ LOW”，“ MEDIUM”和“ HIGH”。 将其设置为“AUTO”，则会根据`dyn_lpf_gyro_max_hz`的值选择范围，如下所示：

* 当`dyn_lpf_gyro_max_hz`设置为0（关闭），或低于334hz，将选择“LOW”。
* 当`dyn_lpf_gyro_max_hz`设置为334 - 610hz，将选择“MEDIUM”。
* 当`dyn_lpf_gyro_max_hz`设置为高于610hz，将选择“HIGH”。

这些模式在真实世界中的近似频率范围为：

* LOW：80 - 330hz（适用于电机转速较低的飞机，或当低频共振成为主要困扰）
* MEDIUM：140 - 550hz（非常适用于5寸飞机）
* HIGH：230 - 880hz（适用于电机转速较高的2.5 - 3寸飞机）

另外，4.0提供了`dyn_not_min_hz`用于设置动态陷波器的最低中心频率，而可忽略已选择的频率范围。默认值是150hz。若要去除100hz的共振尖峰，必须将频率范围设为“LOW”，且`dyn_notch_min_hz`值必须低于100hz，例如80hz。对于某些飞机来说，这可能有助于消除果冻效果。若目标噪声峰值低于80hz，则几乎不可能通过动态陷波滤波方式将其去除，需要使用静态陷波滤波器。

如果没有开启RPM滤波，则应将`dyn_lpf_gyro_max_hz`设置为以hz表示的频率，如果将模式保留为`AUTO`，则会自动选择适当的范围。 用户可以通过手动选择范围来覆盖它。 它应该设置得足够高，以包含电机最大RPM频率。 默认设置适用于大多数四轴飞行器。

启用RPM滤波后，动态陷波滤波器和动态低通滤波器无需跟踪和消除电机噪声。 通常，一旦通过RPM滤波器消除了电机噪声，就只需要一个静态的250hz PT1陀螺仪低通滤波器即可消除少量残留的高频噪声。 要禁用第一个陀螺低通，需要将`gyro_lowpass_hz`设置为0，且`dyn_lpf_gyro_max_hz`也必须为0。 如前所述，如果动态低通模式为`AUTO`，且`dyn_lpf_gyro_max_hz`为0，则动态陷波滤波器将自动被强制为`LOW`模式。 如果动态陷波范围需要高于`LOW`模式的330hz上限，则必须将动态陷波模式手动设置为`MEDIUM`或`HIGH`。

通常来说，当开启RPM回传之后，RPM滤波可以非常有效的移除电机信号，让动态滤波器来解决正常使用的飞机并不是共有的机架共振问题。

非常干净的飞机通常不会产生明显的共振噪声峰值，也不会从动态陷波中受益。关闭动态陷波可以节省CPU使用率并减少总体滤波器延迟。

知道您是否存在共振噪声峰值的唯一方法，是使用PIDtoolbox或等效工具对黑盒日志进行频谱分析。将动态陷波滤波器关闭，并`set debug_mode = gyro_scaled`来记录日志，以便可以清楚地看到传入的陀螺噪声的图像，包括共振噪声和所有噪声。

如果确实存在共振峰，并且您想要使用动态陷波滤波器来处理它们，但同时要防止使其频率变得太低而增加延迟，请选择包含共振峰线的最高范围，并将`dyn_notch_min_hz`设置为低于最小峰值10%左右。例如：

* 300hz处有一个共振峰：范围为`LOW`，`dyn_notch_min_hz`设置为270hz。
* 400hz处有一个共振峰：范围为`MEDIUM`，`dyn_notch_min_hz`设置为370hz。
* 100hz附近有低频共振峰：范围为`LOW`，`dyn_notch_min_hz`设置为80hz。

如果共振峰较窄，将Q设置为尽可能高的值（120 - 200）并将宽度设置为0，可以最小化延迟。

当动态陷波跟随电机转速到非常低的频率时，延迟将变得非常大。一些花飞穿越机会在低频下产生明显的共振，从而导致果冻效应。允许动态陷波器运行在更低的中心频率上，虽然会导致明显的延迟，产生洗桨震颤，但是对于这类低共振频率的穿越机来说是比较有效的。

3.4中的动态陷波是一个Q=0.7的单槽口陷波器，在220hz和300hz之间的相对频带中移动。如果需要的话，可以按照配置4.0的动态陷波器来配置3.4的动态陷波器，但它并不能像4.0中正确配置的动态陷波器那样工作。

要调整动态陷波器，最好通过记录一些大动作的黑盒数据来进行分析调整。

### 只衰减D的TPA

按油门衰减PID（Throttle PID Attenuation，即TPA）已经存在了很长时间了。它在阈值以上区域随油门按线性衰减PID，在全油门时将达到预设的衰减百分比。最初，TPA的作用是，减少精调的穿越机在全油门时的震荡幅度。从2.9开始TPA不再衰减I，仅衰减P和D。在3.5中，D被解耦成D和FF，然后我们便开始思考TPA应如何作用于这些独立的因素。我们注意到由D项导致的噪声在高油门时更糟糕，并且令我们惊讶的是，我们可以在不导致Pterm震荡的前提下在全油门时将D衰减70-80%。通过不随油门衰减P或FF，仅衰减D便可以在高油门时保持系统对摇杆命令的瞬态响应性，并且显著降低全油门时的信号噪音和电机温度。

因此，默认情况下，在4.0中TPA已被配置为仅衰减D。以下是ctzsnooze推荐的设置：

```
set tpa_rate = 75
set tpa_breakpoint = 1400
set tpa_mode = D
```

要将TPA返回到原来的衰减PD，比如3.5或更早版本，请在CLI内粘贴以下命令：

```
set tpa_rate = 10
set tpa_breakpoint = 1650
set tpa_mode = PD
```

通常情况下，花飞飞机可能使用较低的“TPA-only-D”；对于竞速机来说，可以将起始点设置为1400并将衰减幅度设置为75%。

### 改进了的I值释放的设定点模式

I值释放在快速翻滚期间削弱I的增益量，以最小化快速翻滚之后的回弹或过冲。如果为了能提高在大风天气下的稳定性而在Pitch和Roll上提高I值，那么就需要使用一点I值释放了。

I值释放的设定值模式（竞速专用）已经改进为在急转和绕桩避障时能更好的保持转动角速度。代码已经略有更改，只有真正的快速打杆才会衰减I。这意味着I可以在更急的转弯期间更快和更强烈地积累。

`iterm_relax_cutoff`频率决定释放开始时的启动速率以及释放速率。对于竞速我推荐`set iterm_relax_cutoff = 35`。这样I可以更快的积累，并在急转弯时更快地释放。不利的一面是，I值可能会导致快速翻滚之后产生一些过冲，但对于竞速来说这并不是什么大问题。

适用于花飞和目视飞行的I值释放陀螺仪模式并没有改变。在此模式下，`iterm_relax_cutoff`应该保持为20hz。I值释放陀螺仪模式在大多数的遥感命令输入过程中强烈的衰减了iterm的积累，从而实现非常干净的翻滚。它不适合比赛或在刀旗或者门旗附近进行非常急的螺旋转弯，因为对于I值来说有一个值来控制它是否衰减，如果这个值与转弯过程中的摇杆输入相匹配，飞机就会以超过输入指令所预期的角速度进行转弯。这种问题通常来说仅仅存在于紧凑的高速竞速机上。

### 瞬态油门限制

当AIRMODE激活时，如果有任何电机的转速需要超过0或100%，AIRMODE都将自动在Mixer中调节油门以保持正常的电机差速。例如飞控需要电机以40%的速度差进行转动，但其中一个电机的转速将降到-10%，AIRMODE会将Mixer中的油门调整为50%。这就是AIRMODE在非常低或非常高的油门下使飞机响应保持正常的方式。

AIRMODE的效果非常好，但是如果任何一个电机轨迹上都叠加了噪声尖峰，大到足以使电机超过100%的话，那么AIRMODE会将峰值切断为100%并将“切断”的尖峰“反射”到其他三个电机中，形状相反。这导致所有的电机信号都将出现尖锐的尖峰，并导致“过冲”的电机产生严重的数字信号缺损。

这是存在于高油门和低油门附近的问题，并导致全油门段内电机发热，以及不良的噪声和解锁初期的不稳定。

通过测量电机信号中的噪声量，可以动态地提供额外的油门升高（或降低）量，仅根据需要，以避免噪声反射的问题。

有一个有关于此的CLI参数：`transient_throttle_limit`用于设置允许的最大油门增加量或减少量的百分比。15%是十分通用的一个百分比，虽然在大多数穿越机中很少需要这么大的量，但在正常条件下将它设置的如此之高没有任何不利因素。然而，将百分比设置得更高，可以帮助你使用炸弯了的桨飞回家而不用担心电机烧毁。

### 改进的偏航PID

**以下指南只适用于传统偏航控制策略！如果你正在使用整合式偏航控制，则调整过程完全不同！**

偏航主要由电机的加速度驱动，特别是在较低转速下。当电机加速时，电机对飞机本身施加反向作用力(反扭矩)。这提供了即时而无延迟的偏航加速度。转速变化率越大，这种由加速度驱动的偏航力就越大。对于更重的电机和桨来说，偏航力也更大。因为电机加速度可以几乎瞬时改变，偏航力可以以非常快的速率进行改变。

在较高的转速下，单个电机的rpm受偏航上的空气阻力因素影响，这可以使飞机以稳定的角速度进行偏航转动。

在俯仰和横滚中，推力基本上与RPM呈线性相关。并且，由于改变转速需要一段时间，因此在这两个轴向上总有一点延迟。我们的标准PID控制器所假设的是转速和推力之间呈线性关系，但在偏航上这完全不一样。

因此，调整偏航的经典PID与调整俯仰和横滚的PID完全不同。这就是JoeLucid开发实验性的整合式偏航控制的主要原因，该方法允许我们以传统方式调整偏航的PID。

若对偏航使用经典PID，请在调整时记住以下事项：

* D必须始终为0。任何不是0的值都将带来无益的震荡。
* I值释放不要应用到偏航。set iterm\_relax = RP P使得电机信号能够快速变化，但其很少会超调。
* P能够可快速响应摇杆指令，也可以快速响应过冲、横风、碰撞等事件。偏航的P的主要问题是它容易在偏航轴上产生噪声，并且很容易在偏航上产生Pterm震荡。以上两个问题决定了P的可以取得的最大值。通常来说，不建议在标准穿越机上将偏航的P调至高于35。
* FF的作用与P非常相似，因为它是一个摇杆输入命令的增益项。但仅仅如此。它并不会给电机信号增加噪声，并且不会使四轴稳定在未输入的命令上。添加FF可以降低飞机在偏航旋转期间对P和I的依赖程度。太多的FF会在快速输入大杆量命令（迅速把摇杆打到满舵）时迅速导致过冲，并且会在摇杆迅速归中时导致输出量不足。这是3.5黑盒日志中偏航的典型性能表现。 改变YawI仅仅会改变其积累速度。
* I项的系数并不会改变I在PID输出函数函数中的大小 ，仅仅会改变Iterm积累到那个大小的速度。I项大小仅取决于有多少稳态误差需要修正。我们发现，要使偏航效果表现优异，则需要一个非常高的I。因此，Betaflight 4.0现在在内部自动将偏航的I乘以2.5倍。如果你将YawI设置为100，那么实际得到的YawI则是250。这大大提高了偏航性能，减少了过冲，因为在此情况下只需要更少的FF。

4.0偏航的默认值（P35 I100 D0 FF0）适用于大多数飞机，可以平滑准确无噪音的对输入命令做出响应。

对于更高速率的偏航动作，可能需要一些调整。

如果P和I的量不足以在转动时使飞机的偏航角速度达到预期值，稳态误差将会使I信号被积累到更大值，这将导致一些过冲。在此情况下，如果四个电机没有任何一个达到转速最大值，则需要调高YawI和YawFF，以帮助飞控更紧密的跟踪偏航命令输入，减少转动期间的午茶凉，从而减少I带来的过冲。如果在旋转期间某个电机转速已经达到最大值，最好的解决方案是稍稍降低偏航的rate，或者是在做出这个命令时稍稍降低打杆的速度。另一种解决方案是将I值释放也应用到偏航上，这将导致I仅能积累到一个比较低的水平上，增大FF用以推动偏航旋转。然而，通常来说这并不会为较慢的偏航旋转动作提供良好的控制性能。

除非你对偏航性能有特殊要求，例如你的摄像头上仰角高于60°，否则不建议擅自调整偏航的PIDF。

### 额外部分：关于OpenTX ADC滤波器的相关注意事项

OpenTx有一种专门用于过滤摇杆输入信号的算法，它只传输超过一定大小的变化，这就是ADC滤波器。当摇杆缓慢移动时，它不会向RX发送新的杆位数据，直到摇杆移动量足够大时才会发送新值。这有助于减少摇杆抖动带来的影响。

不幸的是，当没有新数据发送时，FF项将会跳变到0。结果就是，在轻微移动摇杆时有可能造成非常陡峭的FF轨迹，并且控制精度将降低。禁用ADC滤波器将强制遥控器传输它检测到的任何数据，这将使每个数据包都有新数据，而无论杆位变化有多小。这意味着遥控器将会传输一些抖动信号，但会显著改善控制精度，并且FF的轨迹将会干净很多。霍尔摇杆的抖动非常小，可以毫无问题地关闭ADC滤波器。

如果你有一个使用霍尔摇杆的FrSky遥控器：

* 在遥控器的配置菜单中内的硬件页面中，取消ADC fliter复选框。注意，特殊版本的遥控器通常在出厂固件中就已经关闭了ADC滤波器。
* 在Betaflight配置器的接收机选项卡中，将RC死区和Yaw死区设置为0。当您的摇杆穿过该区域时，这将使飞机的控制输出保持平滑。

### 额外部分：对于滤波菜鸟

BF4.0中的滤波器已经变得非常复杂，因此，对于一些经验不足的用户而言，很难真正区分所有可用选项。以下是有关可用滤波器以及如何/在何处配置它们的一些摘要，包括新的动态RPM陷波滤波器：

* Betaflight配置程序（BFC）图形页面中的动态陷波滤波功能可打开或关闭，可通过CLI命令`dyn_notch...`来设置。尚无可用的配置程序图形界面选项以供编辑参数。
* 动态低通滤波器不需要进一步的功能切换，可通过在配置器滤波页面中的相关配置选项中输入参数来设置，或通过CLI命令 `dyn_lpf ...`来设置。
* RPM滤波器（具有36个滤波器组）完全独立于动态陷波和动态低通滤波器，并通过CLI命令`rpm_notch ...`来设置。尚无可用的配置程序图形界面选项以供编辑参数。
* 静态陀螺仪低通滤波器和Dterm低通滤波器以及静态陀螺和dterm陷波滤波器：可以通过配置程序相关页面中的选项设置参数，或使用CLI命令`dterm_lowpass / notch ...，gyro_lowpass / notch ...`等来设置。

注意：陀螺仪或Dterm的低通滤波器1可以是动态的，或静态的；低通滤波器2始终是静态的（这在配置程序图形界面中有所反应）。

## 感谢所有提出惊人想法的天才、测试员和程序员，是你们一起创造出了这个伟大的版本！
