4、DShot协议详解:数字协议的优势、DShot150/300/600速率区别、双向DShot与遥测

各位同学,今天我们来聊聊DShot。说实话,这个协议的出现,算是彻底改变了飞控和电调之间的通信方式。我入行那会儿,大家还在用PWM信号,每次校准电调都得听那烦人的“哔哔”声,而且不同厂家的电调,油门行程还不一样,真是头疼。

DShot就不一样了。它是个纯数字协议,没有模拟信号那些模棱两可的东西。说白了,飞控发给电调的就是一串数字,0就是0,1就是1,不存在什么中间态。这就意味着,你不需要再像以前那样,每次换电调都得做油门行程校准了。

核心优势:DShot协议从根本上解决了传统PWM信号存在的“信号抖动”和“校准不一致”问题。它通过数字编码,将油门值、方向、甚至遥测数据打包在一个数据包中,一次性发送给电调。

4.1 数字协议的优势:为什么我们抛弃了PWM?

我记得刚做飞控开发那会儿,最怕的就是PWM信号的干扰。电机转动时产生的电磁噪声,经常会让PWM信号出现毛刺,导致电机转速忽快忽慢。你想想看,飞控明明想输出1500us的脉宽,结果电调收到的是1480us,这飞机能稳才怪。

DShot的优势,我总结了几点:

  • 无需校准:数字信号不存在“中点”和“行程”的概念,飞控发什么值,电调就执行什么值。换电调、换飞控,都不用重新校准。
  • 抗干扰强:数字信号有校验位(CRC),如果数据包在传输过程中被干扰,电调会直接丢弃这个包,保持上一帧的状态,而不是像PWM那样执行一个错误的值。
  • 传输效率高:一个DShot数据包可以同时包含油门值和方向指令,而PWM需要单独的通道来控制正反转。
  • 支持双向通信:这是DShot最革命性的地方。传统PWM只能飞控发指令给电调,电调没法回传数据。而DShot的“双向模式”允许电调把转速、温度、电流等信息实时回传给飞控。

我的经验:在早期做竞速无人机时,我遇到过PWM信号在高速急转弯时丢帧的情况,导致电机瞬间停转炸机。换成DShot600后,同样的飞行轨迹,信号稳如老狗。所以,如果你还在用PWM,我建议你尽快升级。

4.2 DShot150/300/600速率区别:快慢之间的取舍

DShot协议有几种不同的速率,最常见的就是DShot150、DShot300和DShot600。这个数字代表的是数据包的传输速率,单位是kbps(千比特每秒)。

你可能会问,是不是速率越高越好?嗯,理论上是的,但实际应用中,你得考虑飞控和电调的处理能力。

协议类型 传输速率 数据包间隔 适用场景 注意事项
DShot150 150 kbps ~6.7 μs 长距离、低延迟要求不高的机型 兼容性最好,几乎所有电调都支持
DShot300 300 kbps ~3.3 μs 大多数穿越机、航拍机 平衡了速度和稳定性,我常用的选择
DShot600 600 kbps ~1.7 μs 高速竞速机、需要极快响应的机型 对飞控和电调的时钟精度要求高

从表格里能看出来,速率越高,数据包之间的间隔就越短。这意味着飞控可以更频繁地更新油门指令,电调的响应也就更快。

但是,这里有个坑。我曾经在调试一架5寸竞速机时,把电调设成了DShot600,结果发现电机在低油门时偶尔会卡顿。排查了半天,发现是飞控的定时器精度不够,导致数据包发送时序出现了偏差。后来换回DShot300,问题就解决了。

避坑指南:不要盲目追求高速率。如果你的飞控主频不高(比如F4系列),或者电调比较老,建议从DShot300开始测试。如果出现电机抖动、卡顿或丢转,降一档速率试试。

4.3 双向DShot与遥测:让电调开口说话

双向DShot,也叫Bidirectional DShot,是DShot协议的一个扩展。传统DShot是单向的,飞控发数据给电调,电调只管执行。而双向DShot允许电调在收到数据包后,立刻回传一个数据包给飞控。

这个回传的数据包里,包含了电调的状态信息,比如:

  • 实时转速(eRPM):电机每分钟的实际转数,单位是“电气转速”。飞控可以根据这个值做更精确的闭环控制。
  • 温度:电调MOS管的温度,防止过热烧毁。
  • 电流:流过电调的电流,用于估算功耗和电池剩余容量。
  • 故障信息:比如堵转、过流、欠压等。

我举个例子。以前做定高飞行时,飞控只能通过估算油门值来猜测电机转速,误差很大。用了双向DShot后,飞控能直接读到电机的真实转速,然后通过PID算法实时调整油门,定高精度直接提升了一个量级。

下面这张图,展示了双向DShot的通信流程:

双向DShot通信流程 双向DShot通信流程 飞控 (FC) 电调 (ESC) 电机 (Motor) 油门指令 (DShot数据包) 遥测数据 (eRPM/温度/电流) 驱动信号 说明: 1. 飞控发送油门指令给电调。 2. 电调在收到指令后,立即回传遥测数据。 3. 电调同时驱动电机运转。

从图中可以看到,飞控和电调之间是“一问一答”的模式。飞控发一个油门包,电调回一个遥测包。这个回传过程非常快,通常在几十微秒内完成,不会影响正常的油门控制。

4.4 如何配置双向DShot?

配置双向DShot,需要在飞控的固件(比如Betaflight、INAV)里开启相应功能。以Betaflight为例,步骤如下:

  1. 在CLI(命令行界面)中输入 set dshot_bidir = ON。
  2. 输入 save 保存并重启。
  3. 在配置页面中,将“电机协议”设置为DShot300或DShot600。
  4. 在“电机”页面中,检查每个电机的“eRPM”值是否正常显示。

我的习惯:开启双向DShot后,我通常会先在地面站里观察电机的eRPM值。如果数值跳动很大,或者某个电机显示为0,说明通信有问题。这时候我会检查电调固件是否支持双向DShot,或者降低DShot速率试试。

另外,不是所有电调都支持双向DShot。你需要确保电调的固件版本支持这个功能。比如BLHeli_S和BLHeli_32系列电调,需要刷写特定版本的固件才能开启。

我曾经踩过的坑:有一次,我刷了最新版的BLHeli_32固件,结果发现双向DShot死活不工作。折腾了半天,才发现是电调的“PWM输入频率”设置不对。有些电调默认是PWM模式,需要手动切换到DShot模式。所以,刷完固件后,记得检查电调的配置参数。

4.5 双向DShot的实际应用:RPM滤波

双向DShot带来的最大好处,就是RPM滤波。传统飞控的滤波,都是基于陀螺仪数据的,属于“被动滤波”。而RPM滤波,是飞控直接读取电机的真实转速,然后根据这个转速,动态调整滤波器的频率。

这样做的好处是:

  • 滤波更精准:飞控知道电机在什么转速下会产生多大的振动,从而精确地滤除这些振动频率。
  • 延迟更低:传统滤波为了滤除所有可能的振动,会把滤波器设置得很保守,导致信号延迟大。RPM滤波只针对特定频率,延迟可以做到非常低。
  • 手感更好:低延迟意味着飞控响应更快,飞机操控起来更跟手。

我个人的感受是,开启RPM滤波后,飞机在悬停时的抖动明显减少,而且做快速翻滚动作时,机身姿态的恢复也更干脆。如果你还没试过,我强烈建议你体验一下。

好了,关于DShot协议,我们就聊到这里。从数字协议的优势,到不同速率的取舍,再到双向DShot的遥测和RPM滤波,这些内容都是你进阶为资深飞手和工程师的必修课。记住,技术是为飞行服务的,理解原理才能更好地调校你的爱机。