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的通信流程:
从图中可以看到,飞控和电调之间是“一问一答”的模式。飞控发一个油门包,电调回一个遥测包。这个回传过程非常快,通常在几十微秒内完成,不会影响正常的油门控制。
4.4 如何配置双向DShot?
配置双向DShot,需要在飞控的固件(比如Betaflight、INAV)里开启相应功能。以Betaflight为例,步骤如下:
- 在CLI(命令行界面)中输入
set dshot_bidir = ON。 - 输入
save保存并重启。 - 在配置页面中,将“电机协议”设置为DShot300或DShot600。
- 在“电机”页面中,检查每个电机的“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滤波,这些内容都是你进阶为资深飞手和工程师的必修课。记住,技术是为飞行服务的,理解原理才能更好地调校你的爱机。