动态怠速
简介
动态怠速(Dynamic Idle)改善了 Betaflight 在低转速区间对电机的控制方式。
它要求 ESC 支持双向 DShot 遥测,即支持通过 DShot 向飞控回传 RPM 数据的 ESC。
飞控利用这些 RPM 数据动态调整电机驱动,防止任一电机低于设定的最低 RPM。这能改善操控并降低电机不同步(desync)的风险;同时还可降低固定怠速设置,改善直线制动与倒挂滞空时间。此外,在正向气流条件下,动态怠速允许更强的电机制动,从而提升零油门时 PID 控制器的性能。
注意 1:动态怠速要求完整可用的双向 DShot 遥测。
注意 2:动态怠速默认关闭。要启用它,请启用 DShot Telemetry,并在 CLI 中将 dyn_idle_min_rpm 设为合适的值。典型 5 英寸四轴飞行器可从 30 至 40(3000 至 4000 RPM)开始。请阅读下方调校部分。
注意 3:动态怠速不能与 3D 模式一起使用。
注意 4:使用动态怠速时应关闭瞬态油门限制(set transient_throttle_limit = 0)。
动态怠速的工作原理
先说明未启用动态怠速时如何管理怠速
未启用动态怠速时,任何条件下电机驱动的下限均由 dshot_idle_value 决定,默认值为 5.5%。油门摇杆处于零位时,电机始终获得 5.5% 的驱动;PID 也无法将电机驱动降至 5.5% 以下。
设想四轴飞行器正在平落,或者刚从较高前速下快速完成 180 度反转。在这两种情况下,气流会从四轴飞行器下方冲入螺旋桨(反向来流),可能大幅降低电机转速。电机可能转得过慢而无法在需要时迅速加速,也可能完全停转,甚至反转。其结果可能是操控变差或完全失控(电机不同步),通常在快速翻滚或横滚结束时最明显。为避免这些问题,通常必须把 dshot_idle_value 设得较高。
此外,即使并不需要,电机仍持续获得相对较高的驱动信号。这会限制倒挂滞空时间,使四轴飞行器显得偏飘;在停止翻滚、执行快速动作或快速收油时,也无法获得所需的强电机制动。
若要迅速停止一次高速横滚,必须降低正在驱动的电机转速。发出停止指令时,四轴飞行器仍在空气中高速前进,强烈的正向来流会让这些电机保持比所需更高的转速。PID 实际上希望给电机发送零驱动以获得最大制动,但即使电机毫无停转风险,也无法低于 5.5%。因此电机无法充分减速,停止转动的能力也会受限。
再考虑倒挂下落并在倒挂状态下偏航的情况。平稳下落时,电机以 5.5% 驱动向下推力;下落气流进入螺旋桨,电机很可能转得比所需更快。我们希望它们转得更慢,或更强地抵抗旋转,以改善倒挂滞空时间,但为防止不同步,DShot 怠速必须维持在足够高的数值。此外,倒挂偏航时,PID 只能让电机比怠速更快;倒挂时加速电机会明显缩短滞空时间。
动态怠速带来的变化
启用动态怠速后,只要电机转速不会过低,PID 就可以向电机发送零驱动。系统通过双向 DShot 遥测持续监测实际 RPM,并动态调整怠速电机驱动,使最慢的电机始终高于配置的最低 RPM,即使该电机的驱动信号为零也是如此。
因此,动态怠速会显著降低不同步的概率,并允许降低整体怠速设置。电机在强反向来流下不会过度减速,因而可以快速重新加速。这会改善零油门转向响应、快速停止翻滚时的跨轴摆动稳定性,以及平落时的零油门稳定性。
在强正向来流条件下,电机转速会高于预期。现在可对其施加更强制动,因为 PID 可以发送低至零的驱动,而不再受强制 5.5% 下限的限制。这有利于快速停止高速翻滚或横滚,以及在倒挂下落中执行动作。
以下是 4.2 中动态怠速的三个关键要素;4.3 仅保留前两项:
-
通过双向 DShot 遥测取得实际电机 RPM,并用其防止任一电机低于设定的
dyn_idle_min_rpm值。 -
只要 RPM 正常,允许 PID 将电机驱动降至零。
-
在 4.2 中,
dshot_idle_value会成为最小油门值;在 4.3 中,dshot_idle_value会被忽略。
设置:启用动态怠速
- 启用 DShot Telemetry。
- 将
dyn_idle_min_rpm设为大于零的值,例如 30 至 40,即可启用动态怠速。
在 Betaflight 4.3 中,完成上述设置即可。4.3 用户应遵循 4.3 调校指南,而不是下方说明。
在 4.2 中,动态怠速控制代码的效果不如后续版本,推荐采用以下较复杂的设置流程:
- 拆下螺旋桨!
- 在地面站的 Configuration 页面设置常用 DShot Idle 值。
- 进入 Motors 页面。
- 再次确认已拆下螺旋桨!:-)
- 接入电压约为 3.8 至 3.9 V 的 LiPo 电池。
- 启用电机。
- 使用主滑块调整电机驱动。例如,若 DShot Idle 值为 5%,则把电机驱动设为 1050。
- 读取该怠速下的 RPM。
- 将动态怠速最低 RPM 设为略低于怠速 RPM 的值。注意,20 表示 2000 RPM。
例如,若 1050 驱动下的怠速 RPM 为 2000,则去掉两个零得到 20,再降低 20% 得到 16;在 CLI 中将动态怠速下限 dyn_idle_min_rpm 设为 16。
这种设置方法会在最低 RPM 之上形成约 5.5% 的油门余量,作为下限的“缓冲挡位”。
如果已经使用了验证可靠的 DShot 怠速值,可以从该值开始,并按上述方法把 dyn_idle_min_rpm 设为低 20%。
调校
只要以正确 RPM 值启用动态怠速,大多数收益无需额外调节即可获得。转向响应、下落稳定性和防不同步效果应立即改善。
较高的最低 RPM 值(30 至 40)配合较低的 DShot Idle 百分比,会使电机在收油或强正向来流时保持较高转速。需要加速时,电机响应更快,零油门稳定性更好,翻滚也更利落;代价是制动效果较弱、机感更飘,并缩短倒挂滞空时间。
同时降低两个怠速值则可延长倒挂滞空时间,但会提高不同步风险,并降低大油门冲刺后猛收油、从怠速突然加速,以及翻滚中段、平落等任何怠速工况下的稳定性。由于电机怠速更低,在被命令回到怠速后(例如翻滚结束时)可能难以重新加速,从而造成不稳定和反弹。
每台四轴飞行器的构型和用途都不同。除非需求或装机较为特殊,默认怠速值通常已经合适。
控制余量较低的四轴飞行器(更大螺旋桨、较弱电机、带桨保护圈的 cinewhoop、长航时机型)通常更适合较高的怠速值。
控制余量较高的四轴飞行器通常在约 4 至 4.5% 的怠速值下飞行最佳。
我在 4.2 中追求更长的倒挂滞空时间
要延长倒挂滞空时间,请同时把 DShot 怠速百分比和 dyn_idle_min_rpm 降至尽可能低的值。仍须按前文所述让 dyn_idle_min_rpm 相对于 DShot 怠速 RPM 低 20%。
请记住:两个值都必须降低!
可以持续降低,最终会在猛收油时出现令人困扰的不稳定,或发生不同步。
如果 DShot 怠速为 5%,且 dyn_idle_min_rpm 为 20(即比 5% 时的 RPM 低 20%),可尝试 DShot 怠速 4% 和 dyn_idle_min_rpm 16;若运行良好,可进一步尝试 3.5% 和 14,甚至 3% 和 12。
当急停翻滚或猛收油开始变得粗糙,或因不同步在反向来流下从空中翻落时,说明设置过低。通常可以把设置降至远低于默认 DShot 怠速。
极低怠速设置可能最大化倒挂滞空时间,但会如上所述损害稳定性。
这对 whoop 有用吗?
是的。4.3 的效果更好。Whoop 在怠速时的控制余量较低,推力线性化(Thrust Linear)与动态怠速组合使用,通常能显著改善这一点。
Whoop 可能需要高于默认值的怠速,才能让电机可靠旋转。
我是超高转向速率的 Acro LOS 飞行员
若目标最大转向速率极高,例如 1800 deg/s,与目标速率较低的四轴飞行器相比,不同步会更容易成为问题。
对于高推重比的 LOS 特技四轴飞行器,想取得最佳特技与倒挂滞空表现,目标是使用不引发不同步或翻滚后启动过慢等不良影响的最低怠速值。
注意,若 dyn_idle_min_rpm 对应的 RPM 高于 DShot 怠速的 RPM,悬停可能不平顺,因为动态怠速控制器可能会轻微来回调整;但不同步的概率会更低。
我是竞速飞行员
大多数情况下,3500 至 4000 的较高最低 RPM 效果最佳。DShot Idle 可以设得较低,例如 2 至 3%。
竞速飞行员很少长时间使用低油门,因此可能会疑惑为何要调整一个只影响怠速行为的功能。
原因有两个。
第一是制动。我们既要加速,也要减速。若可将怠速设得比平常更低,就能更强地制动,动态怠速使这成为可能。可以全油门加速,随后收油时更快地消耗速度,让下一次转弯更轻松;收油时也可以更激进地切入俯冲门。
第二是高速转向性能。高速时通常存在强正向来流。动态怠速启用后,正向来流条件下可把电机制动至零驱动,有助于更快地切入转向。
在包含高速进入动作的赛道上,例如 Split-S 或紧凑发卡弯,动态怠速可带来更一致的“反向甩入”,并改善控制及桨洗流管理,从而让基于节奏的转向入弯和垂直机动(例如重复的俯冲/反重力门或倒挂俯冲入门)更精确。
对大部分时间保持油门的经验竞速飞行员,最佳动态怠速可能是略微降低后的怠速值。例如,把 DShot Idle 降至约 4 至 4.5%,并把 dyn_idle_min_rpm 再降低约 20%。较低怠速的缺点是:若出现失误并进行零油门反转,飞行器的状态可能更难处理。
技术细节
首次解锁后,Airmode 激活前,出于安全原因,动态怠速的电机驱动最大增量被限制为固定的 4%。若把 DShot Idle 设得极低,例如 1%,则在 Airmode 激活前可能看到略低但非常稳定的 RPM,且该 RPM 可能低于配置的最低 RPM。Airmode 激活后,该限制被解除,动态怠速完全生效;飞行中 RPM 不应低于目标 RPM。
动态怠速的调整不是瞬时完成的。校正因子使用一种特殊的 PID 控制器,调整量与所需和实际电机加速度之间的差异成比例。使用极端数值时,反馈延迟可能带来不稳定风险。
可在极低动态怠速下悬停,测试动态怠速控制器的稳定性。此时四轴飞行器完全依赖动态怠速维持稳定的悬停 RPM。某些特殊构型可能不稳定,务必谨慎。此类测试仅用于确认动态怠速系统工作正常,通常没有必要进行。
建议保留辅助设置的默认值。
idle_adjustment_speed 是实际 RPM 与目标 RPM 的粗略差值所用的增益乘数,默认值为 50。
idle_p 设定控制器增益。值越高,校正越激进。
多数情况下无需调整这两个参数。要确认它们是否适合自己的四轴飞行器,请启用 RPM Debug,以较高速度垂直爬升,快速将油门收至零,然后在零油门下垂直平直下落。若电机曲线与 RPM 曲线平滑,则设置正常;若曲线摆动,则可能需要稍作调整。作者的竞速四轴飞行器在 idle_p 稍高的 80 时效果很好,但同时提高 idle_adjustment_speed 会使 RPM 曲线略呈锯齿状。
idle_pid_limit 限制允许的最大误差校正量。若设得过低,反向来流仍可能导致不同步,因为校正量可能不足。
idle_max_increase 限制怠速在零驱动之上允许增加的最大百分比,以百分比乘以 10 表示。默认值 150 表示为防止不同步,最多可额外施加 15% 的电机驱动。若发生持续不同步,较高数值可能使其他电机被强力驱动。
动态怠速 Debug 返回:
0:motorRangeMinIncrease _ 1000 1:targetRpsChangeRate(简单 RPM 误差 _ idle_adjustment_speed) 2:error(待修正的误差量) 3:minRps(当前最低电机 RPM,以每秒转数 * 10 表示)
例如,minRps 为 500 对应 50.0 * 60 = 3000rpm。