• 正文
    • 01、Dshot的版本
    • 02、Dshot数据帧结构
    • 03、Dshot电平特性
    • 04、BateFlight中的Dshot协议
  • 相关推荐
申请入驻 产业图谱

Dshot协议 | 飞控与电调的数字通信协议

02/12 08:37 来源:穹宇逐光
4891
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

阅读本文后,您将了解到DShot协议的基础知识,以及它在Betaflight固件中是如何与电调进行通信的具体内容。

DShot是一种用于电子速度控制器(ESC)的数字协议,专为多旋翼飞行器如穿越机设计。它由Felix(KISS团队的一员)开发,并在betaflight和其他开源飞控固件的支持下得到了广泛应用。DShot的特点是高可靠性、扩展性和性能,相比传统的PWM协议,它提供了更精确的控制和更高的数据传输速率。

优势在不需要像模拟信号那样进行电调校准。提供比模拟信号更高的分辨率,允许更精细的电机控制。由于采用数字信号CRC校验,具有更好的抗干扰能力。支持遥测功能,能够获取ESC的状态信息,比如RPM(每分钟转速)。

除了标准的从飞行控制器到ESC的单向通信外,还有双向的DShot协议,支持ESC向飞行控制器发送电机电调的实时数据。

01、Dshot的版本

DShot协议主要包括四个版本:DShot150、DShot300、DShot600以及DShot1200。这些版本主要通过传输速率来区分:

● DShot150:每秒传输150,000位数据。

● DShot300:每秒传输300,000位数据。

● DShot600:每秒传输600,000位数据。

● DShot1200:每秒传输1,200,000位数据。

尽管这些版本都基于相同的底层技术,但它们的数据传输速率不同,这意味着更高的版本能够提供更快的响应时间和更精细的控制。

较低版本如DShot150适合那些不需要极高反应速度的应用场景;而较高版本如DShot600或DShot1200,则更适合于高性能飞行器,它们需要快速响应和精确控制来完成复杂的飞行动作。

但是,随着传输速率的增加,对连接稳定性的要求也随之提高。因此,在选择更高版本的DShot时,确保所有相关硬件(包括飞行控制器、接收机和ESC)都能支持所选版本,并且连线尽可能短且避免干扰是非常重要的。

DShot的不同版本提供了从基础到高级的各种选项,满足了从小型玩具无人机到专业级竞速飞行器等广泛的应用需求。理解和正确选择适合自己项目的DShot版本,不仅能提升设备的整体性能,还能确保更加流畅和可靠的飞行体验。同时,记住在DShot协议中,尽管波特率比特率是两个不同的概念,但在数值上它们是相等的这一特点,有助于更好地把握该协议的技术细节。

02、Dshot数据帧结构

每个DShot数据帧包含16位,其中前11位用于油门信号,接下来的1位用于请求电调回传信息(遥测),接下就是最后4位用于循环冗余校验(CRC),以确保数据完整性。

● 数据:

最小值 00000000000(二进制)、0(十进制)

最大值 11111111111(二进制)、2047(十进制)

● 方向:

0(二进制)、0(十进制):飞控→电调

1(二进制)、1(十进制):飞控←电调

● CRC校验:

这4个校验位是对数据的11个油门值+1个方向问这12个位按每组4位分3组,然后把三组4位的数据进行异或计算(C语言运算符就是^),计算结果取低4位作为这串数据的校验码插入。

假设有12位数据为 1101 1010 1110 (即二进制表示),我们可以按照上面的方法来计算CRC

①分组:G1 = 1101, G2 = 1010, G3 = 1110

②异或:R1 = G1 XOR G2 = 0111, R2 = G2 XOR G3 = 0100

③最终CRC:CRC = R1 XOR R2 = 0011

因此,在发送时,完整的16位数据帧将是原始的12位数据加上计算出的4位CRC值 1101 1010 1110 0011

至于程序的实现方法就很各自各样了。

03、Dshot电平特性

DShot使用单线双向通信,通过改变高低电平的时间来表示二进制的0和1。用DShot600举例,一位时间大约为1.67微秒(1667纳秒),其中0表示高电平时间为625纳秒,1表示高电平时间为1250纳秒。

一位Dshot信号的波形图

一帧Dshot信息的波形图

04、BateFlight中的Dshot协议

DShot-output

从介绍(https://betaflight.com/docs/development/dshot)中我们可以看出Batefilght中的Dshot协议有别与一般的Dshot协议用法,Batefilght在0 到47 设定了一些列的指令,从48 到 2047是留给油门的,一共2000个分辨率。进一步通过查看Batefilght源代码我们可以知道 0 到47分别代表什么指令。

dshot_command.h中对0到47的命令定义

DShot-capture

通常情况下,帧之间会有至少2微秒的暂停来指示帧重置。重置仅仅表示一个帧的结束,因此任何未来的位都是新帧的开始。由于DShot发生在PID循环的末尾,这个暂停实际上要长得多。如果DShot被设置为连续输出信号,则需要这种延迟。

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录