【#Betaflight4.0】
双向Dshot协议和RPM滤波器,在之后开发者的努力下,有了很多更新,也有了一些调整参数的教程,最大的优化是支持了F7芯片的飞控,并且针对每个单独的飞控提供了片段代码,便于大家直接复制进CLI里面设定,原有的翻译说明书因为代码的更新,步骤上会导致无法启用双向Dshot协议,烦请大家按照最新的这份来操作,后期有更新我们会继续跟进。
双向Dshot协议与RPM滤波器使用说明书更新
Betaflight 4.0 的新Dshot协议
Betaflight4.0 启用了一种全新的双向Dshot协议,这种协议可以让飞控在使用现有的单根信号线的基础上,让飞控读取电调回传的每一个电机的高频转速信号。这种方式不需要增加额外的焊接线路或者追加额外的电调数传回路。每一个来自飞控的Dshot帧都包含一个电调回传上来的转速信息。这种方式需要提前在飞控调参软件中,设定当前的电机磁极数,飞控会将当前的转速信号(磁极数信号),除以设定好的磁极数来获得当前的电机转速。
转速滤波器是由陀螺仪和D值滤波器上的48组陷波器组成,它们利用这种超高频的转速回传信号,以外科手术般准确度来精确移除电机的噪声。默认在俯仰,横滚,方向三个轴上,分别配置了12个陷波器,前3个谐波滤波器用于陀螺仪滤波,然后第一个谐波滤波器用于D值滤波。
最新版本的BLheli32已经支持这两个特性,需要下载最新的32.62(目前已经更新到32.6.7), BLheli32电调驱动 。目前已经有下面这一批电调的测试版固件可供下载。
你需要进行如下配置:
升级到测试版本的BLheli32.6x电调固件
首先你需要刷写你所有的电调固件到最新的测试版本,在刷写固件的时候,启动完BLheli32电调调参软件的时候,
需要点击“flash blheli”按钮
会弹出一个窗口,里面会显示正式版电调固件的名字和版本
然后你需要先下载好32.6x(发稿时是32.67)测试版本电调固件
选择对应你电调的正确的版本。在每一个电调进行刷写的时候,都需要点击选择对应版本的测试版电调固件。记得刷完所有的四个电调。
同时记得一定要关闭任何额外的启动音,因为现在的电调通讯协议变更为双向Dshot,开发者认为标准的启动音已经足够起到它的作用了。
电机磁极数
电调回传上来的数据,必须通过电机磁极数(就是转子上磁铁的数量),来转换成转速数据。通常大部分5寸机使用的电机磁极数是14,所以我们在飞控里面的默认磁极数设定就是14。小一些的电机磁极数少一些,通常来说是12,这个时候你需要仔细的观察一下电机,或者干脆拆一个转子下来数一数上面的磁铁数量,通过在CLI里面输入下面这个命令:
set motor_poles=14
save
来正确配置磁极数这个参数
配置用代码片段
你需要翻到这个页面的最后那张支持列表,看一下你的飞控支不支持转速滤波器。有些飞控需要重新配置计时器或者DMA通道,才能支持转速滤波器。需要多加留意的是,由于转速滤波器能够有效的移除电机的噪声,我们开发了一套快捷设定参数,包括设定Dshot600的电调协议和使用4k的陀螺仪采样率,只要复制这个参数就可以了 ,都在这个表格里面。
如果你的飞控不在这个优化参数的列表里面,千万别气馁。很多飞控的优化参数还在测试中,你可以试试这个默认参数,试试,最好给我们个反馈。
set scheduler_optimize_rate=on
set dshot_burst=off
set dshot_bidir=on
set dyn_notch_width_percent = 0
set dyn_notch_range = medium
set dyn_notch_q = 250
set gyro_lowpass_hz = 150
set dyn_lpf_gyro_min_hz = 150
set dyn_lpf_gyro_max_hz = 575
set dterm_lowpass2_hz = 0
set d_min_pitch=29
set d_min_roll=27
set d_min_boost_gain=35
set debug_mode=rpm_filter
set motor_pwm_protocol=DSHOT600
set gyro_sync_denom = 2
set pid_process_denom = 1
save
确认你的配置是否生效
现在你的飞控已经设定好了双向Dshot电调协议,现在你需要确认一遍他们是否正常工作。首先先给飞控和电调断电,然后,先插上你的电池,再插入USB线缆,打开调参软件的CLI页面,输入status,你现在会看到双向数传回传上来的信息大概是这个样子,
Dshot reads: 145267
Dshot invalid pkts: 36
Dshot irq micros: 5
Dshot RPM Motor 0: 0
Dshot RPM Motor 1: 0
Dshot RPM Motor 2: 0
Dshot RPM Motor 3: 0
其中,invalid pkts的数值,不能大于Dshot reads 数值的1%,所有的电机回传上来的转速应该是0
然后你需要在CLI命令行里面,输入exit以后,离开CLI。切换到电机页面,选中我已了解风险,然后滑动总电机输出滑动块,让所有电机稳定的慢慢旋转。再回到CLI命令行里面,重复输入status这个命令,现在你会发现电机的输出变成了这样:(回传了转速信息上来)
Dshot reads: 505108
Dshot invalid pkts: 8
Dshot irq micros: 4
Dshot RPM Motor 0: 106
Dshot RPM Motor 1: 112
Dshot RPM Motor 2: 107
Dshot RPM Motor 3: 111
如果你和上面的结果一致,那么你已经可以用转速滤波器去飞了!如果方便的话,可以去记录一下bblog,在代码片段里面已经预设了 debug模式为rpm_filterl ,这样你就可以在BBLog里面,看到实时记录下来的电机的转速。
进阶调整
如果你的飞控支持文末的代码片段,那么直接输入这些代码到CLI里面以后,你就非常快速便捷的获得了很好的飞行性能。下面这些注释,主要就是解释这些快捷代码里面的设定到底是什么意思
飞控的循环周期和Dshot协议
双向Dshot数传可以以Dshot300,600 和1200,Proshot1000等速率工作。需要注意的是,由于现在改成了双向数传,所以有一帧信号从飞控发往电调,就有一帧信号从电调回传到飞控。所以在每一次大概有25us的间隔,用来切换上传和下载切换线路,切换Dma和计时器。所以飞控的主程序运算时间需要足够的低,这样才能保证在一个陀螺仪数据周期内,完成双向Dshot协议切换一次线路,大约是50us的时间。
由于双向数传和转速滤波器都已基于准确的CPU运行周期的,并且需要保持数据传输过程中,对于时间点高度的精确一致,才能保证这些滤波器协调在准确的频率上面。开发者建议使用4K/4K的陀螺仪采样/飞控运算周期,所有的Dshot速度都应该工作在这个飞控运算周期上。
对于F4 飞控来说,对于每一个电机线路大概需要 3~4us的时间来进行Dshot上下行传输信号的切换。所以对于所有电机线路来说需要24~32us的时间来完成切换。而且转速滤波器一共有48个陷波器大概可以动态调谐到1000Hz的工作频率上,所以如果运行8k/8k的速率就太紧张了,所以开发者建议使用4k/4k的刷新频率,至少在优化代码的初期先这样设定。
首先需要刷写你的电调到最新的BLheli32测试版固件(发稿时版本为32.6.7),由于现在Dshot是双向传输,所以需要关闭自定义电调启动音防止对电调协议初始化造成干扰,不过默认的电调启动音还是可以正常工作的。
DMA(直接存储器读取)
目前的需要使用普通的DMA读取方式,不支持burst dma功能。需要你自己来确认你的飞控是否支持普通的DMA读取方式,你需要在CLI命令行里面简单的输入下面命令:
set dshot_burst=off
save
然后试试你的飞机是不是还能正常飞行(实际解锁一下看转的是否正常就可以了),如果这一步没问题,就进行下一步:
启用新的同步策略
由于转速滤波器使用的是非常窄的陷波器,这要求陀螺仪的采样率不能频繁 波动,还要工作在一个指定的高度准确的频率上面,便于陷波器同步运行。目前需要使用一个相对低的飞控循环时间,并且对飞控进行超频(提高运行性能)所以我们增加了 一个周期性的同步参数,这样即使在一个相对较高的飞控运行速率下,也可以保持陀螺仪数据的稳定同步,我们建议你在CLI命令下面,启用:
set scheduler_optimize_rate=on
save
启用双向Dshot协议
set dshot_bidir=on
save
然后解锁看看你的电机是不是还能转,如果还可以转,你需要拔掉USB,断开电池(完全给飞控断电),然后再接上电池,接上USB线缆,在CLI命令行里面输入 status,
你会看到每一路电机通过双向Dshot协议回传上来的电机转速,理论上这个时候回传上来的电机转速应该都是“0”,或者后面会显示少许错误包信息。
电机磁极数
电调回传上来的数据,必须通过电机磁极数(就是转子上磁铁的数量),来转换成转速数据。你可以在转子上面找到这些磁铁,注意不是定子上面的线圈数。通常来说5寸穿越机的电机有14个磁极,所以这个就是我们转速滤波器磁极数的默认设置。小电机通常磁极数更少,通常是12,你最好仔细的数一数,或者查阅电机的参数表,然后使用下面的命令来配置。
set motor_poles=14
验证同步时间是否一致
这很重要:
在启用了上述所有功能之后,我们建议你再重复确认一下你的飞控运行周期是否保持连续一致。如果你并没有选择一个相对较低的飞控循环速率,你需要了解并注意观察实际效果,因为对于转速滤波器来说,比较高的运算周期并不能像提高滤波器运行速率一样,高运行速率对于转速滤波器来说并不能明显的提高飞行性能。
你需要在CLI命令行里面,输入 tasks,来确认陀螺仪的采样率是不是真的和你的设定值一致。(记得一定要插上电池,来获得你的飞控真实的运行频率),你输完命令应该是这个样子:
你需要检查的是 GYRO/PID 这一行:
在这个例子里面我们的 Gyro/PID是配置在8k/8k 的,这行代码显示我们的实际执行速率是7999Hz,这个数值已经非常,非常,非常的接近我们设定的8k(8000Hz),这样我们就可以把误差控制的低于1%。
Debug模式
这里有两种Debug模式来核实转速滤波器,一个是rpm_filter,这个用来记录电调回传上来的每个电机的频率,dshot_rpm_telemetry 记录还没有转换之前的磁极数转速。
转速滤波器的优化调试(由Sugar_K整理)
转速滤波器能够在不增加太多延迟的情况下,做很大的提升工作。通常来说,你只需要再使用Dterm低通滤波器和动态陷波器来依次移除背景噪声,帧谐波。你可以一步一步关闭不需要的滤波器,每关闭一个滤波器,你可以通过悬停或者飞一段,来确认一下你的电机不会过热。你也可以留意一下你关闭了几个滤波器,和滤波的延迟,如果桨的状态很好,一架竞速机可以以非常干净的输出,来达到更高的速度。
注意不要关闭所有的Dterm滤波器,这么做不是一个好主意。
第一个可以关闭2阶Dterm低通滤波器
set dterm_lowpass2_hz = 0
然后是收窄动态滤波器的缺口,我们建议把动态滤波器的宽度设定到0,这样就设定成了传统的单个陷波器,而不是二级级联的版本。
set dyn_notch_width_percent = 0
然后你需要设定动态陷波器的最小工作频率,和动态陷波器的工作范围。对于通常的5寸竞速机来说,设定陷波器的范围为medium,设定起始频率为200Hz就可以工作的很好了,一个比较重的穿越机可能需要把起始频率改成150Hz会好一些,对于一些非常大的穿越机,配置在6~7寸的这些,你可能需要把起始频率改成100Hz,并且设定陷波器的范围为Low。通过bblog记录来确认这些频率会比较好,基本上你可以从电机的怠速噪声就可以判断出应该使用哪一档。
set dyn_notch_range = medium
set dyn_notch_min_hz = 200
如果穿越机噪声很小很干净,你可以尝试吧动态陷波器的Q值改成200~250,(默认为120),这样可以收窄陷波器的宽度,减少延迟。
set dyn_notch_q = 200
现在轮到调整陀螺仪低通滤波器,需要留意4.0里面同时存在静态低通滤波器,和动态低通滤波器。如果你关掉了 动态滤波器,那么系统会自动转为使用静态低通滤波器,你需要把这个一起关掉。
set gyro_lowpass_hz = 0
set dyn_lpf_gyro_max_hz = 0
如果你的穿越机现在飞起来不太好,而且电机有点烫,那么你需要重新启用静态陀螺仪低通滤波器,并且把类型改为PT1,至少这样可以减少一点点延迟。
set gyro_lowpass_hz = 150
set gyro_lowpass_type = PT1
最后,你需要把动态Dterm低通滤波器的阈值提高一些,你不需要把它关掉,可以通过提高最小/最高的截止频率,来总体上减少滤波器的延迟。默认设定是min/max,分别为150Hz和250Hz。我们先从最大值开始,你可以尝试着把最大值设定到300Hz或者甚至400Hz。
set dyn_lpf_dterm_max_hz = 300
设定好最大值以后,我们可以试着将最低起始频率设定为200Hz,如果这个值设定的太高,在电机怠速的时候你就会有点摩擦的噪声,如果有这个现象,把这个值设定到150Hz就可以了。
set dyn_lpf_dterm_min_hz = 200
更新:建议直接设定最小值到150Hz就可以了
如果你的Dterm低通滤波器设定的阈值足够低的话,就有可能可以把动态陷波器关掉,但是关掉这些滤波器,有可能导致飞机额外的受到外界干扰的影响,比如说风。我测试的时候由此差点飞机自己飞跑了,由于飞机在风的吹动下面,自己开始飘起来了,速度降的不够低造成不能降落了。
最后,我强烈建议使用只衰减D的TPA(也许应该叫做TDA,这个现在在4.0是默认启用的),使用一个非常强的切断大概设定到60~80%(默认值是50%),设定切断起始点为1750(默认值是1500)。这样来设定,你仍然有足够的D来抑制洗桨(因为调高了触发阈值),但是在满油门的时候,你就可以做出非常漂亮的切弯了。
set tpa_rate = 80
set tpa_breakpoint = 1750
支持该功能的飞控:
已证实以下飞控支持该功能:
烦请大家点击阅读原文,直接跳转至github页面,点击对应飞控后面的snippet代码片段,即可复制对应的优化参数,到CLI命令行内粘贴,就……设定好了。
参考资料
双向数传
转速滤波器
BLheli32.6.7 测试版固件下载地址(注意需要打包下载全部文件)
https://github.com/bitdump/BLHeli/tree/master/BLHeli_32%20ARM
公众号云盘目录下新建了双向Dshot协议和转速滤波器的目录,保护刷机用软件,调参软件和固件,烦请复制链接下载
链接:https://pan.baidu.com/s/1jHMAhT0
提取码:9qde
复制这段内容后打开百度网盘手机App,操作更方便哦
译文篇幅较长,受个人知识水平限制可能有翻译不到位的地方,烦请各位在评论区留言指正。
注意飞行安全,祝大家飞行愉快