当前位置: 首页 > news >正文

dshot协议数据帧格式

非常好 👍
我们来系统讲一下 DShot(Digital Shot)协议数据帧格式 —— 这是一个专门为 无刷电机(Brushless Motor)电子调速器(ESC) 设计的数字通信协议,用来替代早期的 PWM、OneShot、MultiShot 等模拟信号。


🧩 一、DShot 简介

DShot = Digital + Shot,由 KISS/Betaflight 团队推出,目的:

  • 让电机控制更精准、低延迟
  • 避免模拟 PWM 信号存在的误差、漂移
  • 提供CRC 校验来防止信号误触发。

DShot 是一种**单线、单向(也可双向)**的 数字协议,通过 MCU 的 GPIO 直接输出定时波形(通常使用 DMA + 定时器输出)。


⚙️ 二、数据帧结构(DShot150/300/600/1200 均相同)

每一帧固定为 16 位(bit)

|<---- 11 bits ---->|<- 1 bit ->|<- 4 bits ->|
|     Throttle      | Telemetry |   CRC(4bit) |

1️⃣ Throttle(油门值 / 命令码)[11 bits]

  • 范围:0 ~ 2047

  • 含义:

    • 0 表示电机停止
    • 1 ~ 47:保留,用作命令(非油门)
    • 48 ~ 2047:有效油门值(线性控制电机输出)
值范围含义
0电机关闭
1–47特殊命令(例如反转、保存设置、蜂鸣器等)
48–2047油门值(48=最低油门)

2️⃣ Telemetry(遥测标志)[1 bit]

  • 0 = 不请求遥测
  • 1 = 请求 ESC 返回遥测数据(电流、电压、转速、温度等)

⚠️ 双向 DShot 模式(如 DShot600 bidir)时才会用到此位。


3️⃣ CRC(校验)[4 bits]

  • CRC = 对前 12 位(Throttle + Telemetry)进行 4-bit 校验。
  • 算法是简单的异或混合校验:
uint8_t dshot_crc(uint16_t value)
{uint8_t crc = 0;for (int i = 0; i < 3; i++) {crc ^= (value >> (i * 4)) & 0xF;  // 每4位异或}return crc & 0xF;
}

📶 三、信号波形编码方式

DShot 的每个 bit 都是通过不同的高电平时间表示的(数字编码方式):

Bit高电平时间占比低电平时间占比
1约 75% 高电平25% 低电平
0约 37.5% 高电平62.5% 低电平

例如(以 DShot600 为例):

  • 每 bit 总时长 = 1.67 µs;

    • Bit1:高电平 ≈ 1.25 µs
    • Bit0:高电平 ≈ 0.625 µs

这就要求输出定时非常精准,因此 MCU 通常使用 定时器 + DMA 自动输出。


🔢 四、完整帧示例

假设发送油门值 = 100,Telemetry = 1:

Throttle: 000001100100 (100)
Telemetry: 1
组合12位: 0000011001001
CRC(4bit): 0110
最终帧16位: 00000110010010110

发送顺序:MSB 先发


⚡ 五、不同速率版本

版本Bitrate (bps)每帧周期 (µs)典型用途
DShot150150k~106慢,兼容性好
DShot300300k~53平衡性能
DShot600600k~26常用
DShot12001200k~13高速,需硬件支持

🧠 六、DShot 命令示例(油门值 < 48)

命令值含义
1电机反转方向
2反转方向永久保存
3蜂鸣器启用
4停止蜂鸣器
5保存设置
6启用 3D 模式
7禁用 3D 模式

📡 七、双向 DShot(Bidirectional DShot)

在常规单向 DShot 中,信号仅从 MCU → ESC。
双向模式下,MCU 在发送一帧后,会在指定时隙切换为输入模式接收 ESC 返回的遥测数据(RPM、电流、电压等)。

  • 常见:Bidirectional DShot300 / DShot600
  • 用于实时转速反馈,实现闭环控制(如 RPM 过滤器)。

✅ 总结

字段位宽说明
Throttle / Command11 bits油门值或命令码
Telemetry1 bit遥测请求标志
CRC4 bits校验
合计16 bits一帧固定长度

是否希望我帮你画一张 DShot16 位帧结构图 + 波形时序图(带高低电平比例标注)?这样更直观。




是的 ✅,
在 DShot 协议中——

低 4 bit(最低 4 位)确实是 CRC 校验位。


具体结构如下(从高位到低位发送):

|<----- 高位在前 MSB ----->|
[15:5]   [4]       [3:0]
Throttle Telemetry  CRC

也就是说:

位区间位数含义
bit15–bit511 bits油门值 / 命令码(Throttle / Command)
bit41 bitTelemetry 请求位
bit3–bit04 bitsCRC 校验位(对前 12 位计算)

🧮 CRC 计算方式(4-bit)
CRC 对前 12 位(Throttle + Telemetry)进行计算:

uint8_t dshot_crc(uint16_t value)
{uint8_t crc = 0;for (int i = 0; i < 3; i++) {crc ^= (value >> (i * 4)) & 0xF;  // 每4位异或}return crc & 0xF;  // 保留低4bit
}

例如:

假设要发送的 12 位数据(Throttle + Telemetry)是:

0b0000011001001

分为三组:

0000 0110 0100 1xxx   (补齐为 12 位)

异或后得到 4bit CRC,比如 0110
则最终 16bit 帧为:

0000 0110 0100 1 0110

→ 低 4 bit 0110 就是 CRC 校验码。


所以总结一句:

✅ DShot 帧的 最低 4 位CRC 校验位,用于检测前 12 位(油门 + 遥测位)是否正确。

http://www.dtcms.com/a/486914.html

相关文章:

  • 华清远见25072班QT学习day1
  • 一个网站多个子域名优化网站系统建设与管理
  • SpringBoot使用LocalDate接收参数解析问题
  • 推荐系统学习笔记(十八)SECR-快手-用户留存建模
  • 自助网站建设技术支持建商城网站需要什么
  • 物联网设备安全接入管理系统的设计与核心功能
  • 在React中使用函数式编程的优点和缺点是什么?
  • UE5 Windows平台下打包Linux
  • UE5 建模专题 - 2:地形模式里的工具栏里的按钮的使用,以及样条点制作道路
  • 基于PHP+Mysql的旅游介绍网
  • HOW - prefetch 二级页面实践
  • OCR:开启档案管理的智能新时代
  • 设计网站官网入口广州做一个网站多少钱
  • 比较好的平面设计网站群晖nas安装wordpress安装
  • 重生之我在大学自学鸿蒙开发第六天-《组件导航》
  • Fragment如何实现Activity栈的压栈和出栈
  • 【组合数学题目】宇宙分解
  • 产品网站开发流程图多店铺开源商城系统
  • 百度收录好的网站免费h5网站制作平台
  • 包头微网站开发wordpress打赏作者插件
  • Rust数据库与工具的选择
  • 淮滨网站制作字体排版网站
  • Spring Boot 3.0 的架构革新:为何弃用 spring.factories 并转向 imports 文件
  • 网站访问密码python报班一般多少钱
  • 渗透测试所需域名和IP信息收集方法
  • TensorFlow2 Python深度学习 - 卷积神经网络示例-使用MNIST识别数字示例
  • LKT4305GM多功能安全芯片
  • 大连网站建设蛇皮果服装设计公司排行
  • 淄博网站建设公司乐达站长工具综合查询官网
  • 7. 从0到上线:.NET 8 + ML.NET LTR 智能类目匹配实战--反馈存储与数据治理:MongoDB 设计与运维