请输入
菜单

DShot数字电调使用方法

DShot数字电调

DShot是一种数字式电子电调协议,支持高速、高分辨率的数字通信,有助于提升对载具的控制性能,尤其适用于多旋翼和垂直起降固定翼等应用场景。其优势包括:

  • 发送给ESC的数值具备校验和保护
  • ESC与飞控之间的时钟差异不会影响飞行性能
  • 无需进行ESC校准

DShot是BLHeli/AM32 ESC所采用的底层控制协议。许多BLHeli/AM32版本的ESC还提供诸如ESC配置、ESC遥测、LED控制以及双向DShot等更多功能。若选择支持DShot的ESC,建议优先考虑同时支持BLHeli32、AM32或BLHeli_S的产品。

注意
仅在经过确认支持DShot的ESC上尝试使用该协议,否则可能导致不可预测的结果。

注意
目前市面上出现了越来越多支持DShot及其他数字ESC协议的专有或开源16位/32位ESC,但它们未必支持BLHeli32/AM32特有的功能(如直通配置和遥测)。请参阅具体ESC的说明书以了解其支持的功能。

注意
大多数DShot ESC通常也可作为普通PWM ESC工作。


连接ESC

在4.5版本之前的固件中,若飞控带有IOMCU协处理器(如Pixhawk、CubeOrange等),DShot ESC应连接至AUX输出端口,而非IOMCU的MAIN输出端口。在4.5及以上版本的固件中,可通过设置参数BRD_IO_DSHOT,使部分使用F103 IOMCU的飞控在下次启动时加载支持DShot的IOMCU固件。若未出现该参数,则表示该飞控的IOMCU输出不支持DShot。有关限制及更多信息,请参见“IOMCU DShot限制”章节。

在CubeOrange上,所有通道均支持DShot,但AUX1不支持双向DShot,因此仅AUX2至AUX6可用于双向DShot(参见相关问题)。

对于无独立IOMCU协处理器的其他飞控板,任意伺服/电机输出端口均可用于DShot。

更多限制细节请参见下方的“混合ESC协议”章节。


双向DShot

部分飞控板支持双向DShot。


选择DShot波特率

设置参数MOT_PWM_TYPE以选择所需的波特率,并重启飞控:

  • DShot150,150k波特(推荐用于大型飞机或信号线较长的情况)
  • DShot300,300k波特
  • DShot600,600k波特(推荐用于大多数载具)
  • DShot1200,1200k波特

对于使用DShot协议的大型飞机,若信号线较长,建议使用最低波特率DShot150,因为其抗干扰能力最强(较低波特率在长线缆上更不易受噪声影响)。

对于小型飞行器,DShot600是目前使用最广泛的协议,因而也更具可靠性,因其经过了大量测试,优于较新的DShot1200协议。

更高波特率(如DShot600和DShot1200)更易受噪声影响,但其优势在于占用DMA通道时间更短,这在DMA资源紧张的飞控上是有利的。

若使用双向DShot,建议优先选择DShot300或DShot600,因为该功能需要更长的脉冲宽度,以便等待ESC回传数据后再发送下一帧。双向DShot不共享DMA通道,因此不会影响其他外设。双向DShot仅支持BLHeli32/AM32 ESC。


配置伺服输出功能

如前所述,若使用带IOMCU的飞控(如Pixhawk、CubeOrange等),ESC应连接至AUX输出端口,而非默认的MAIN输出端口。因此,需更新对应的servox_function参数,使飞控知晓哪些输出连接至ESC/电机。最简便的方式是使用Mission Planner的“Servo Output”页面进行配置。

注意
一旦某输出被配置为DShot,其对应的servox_min/max/trim参数将被忽略,因为DShot不使用这些参数。可逆输出的中位值为1500,普通输出则为1000,输出范围始终为1000–2000。无需进行ESC校准。

注意
所有基于掩码的配置只能在PWM组级别进行更改,请查阅飞控文档以了解各输出所属的分组。详见下方“混合ESC协议”章节。

警告
请确保ESC支持所选的配置,否则可能造成损坏。包括下文提到的帧率设置。此外,在数字与模拟输出类型之间切换时,若未重新校准ESC,可能导致电机非预期输出。

检查遥控器输入

重启飞控,查看“遥控器状态消息”以确认输出通道配置已生效(参数下载时会自动显示该消息)。


附加配置

DShot更新频率

可通过参数servo_dshot_rate配置DShot脉冲的发送频率。默认情况下,ArduPilot会在每次IMU采样准备好时以及固定1kHz间隔发送DShot数据脉冲。对于标准400Hz调度循环的多旋翼飞行器,这相当于约1.4kHz的输出频率。然而,该输出并不规律——为获得更规律的输出,可设置servo_dshot_rate为调度循环的倍数。例如,设为2则脉冲以800Hz发送,设为3则为1.2kHz,以此类推。更规律的输出有助于对电机控制要求更高的飞行器(如小型竞速机)。不建议低于1kHz,因有报告称部分BLHeli32在低速率下可能丢帧;而更高频率则可提升可靠性并加快丢帧恢复速度,代价是占用更多CPU资源。理论上,DShot150支持的最高频率为4kHz。


DShot指令

部分ESC支持DShot指令,可用于控制ESC的LED、蜂鸣器及电机转向等功能。使用方法如下:

  • 设置参数servo_dshot_esc为所使用ESC的类型(若启用双向DShot遥测或扩展遥测,此项必须设置)
  • 在参数ntf_led_types中勾选“DShot”以启用ESC LED控制
  • 在参数ntf_buzz_types中勾选“DShot”以启用电机蜂鸣功能

当前支持的指令包括:

  • DShot LED开关
  • DShot蜂鸣器开关
  • 电机反转(参见参数servo_blh_rvmask
  • 可逆DShot(即3D模式,参见“可逆DShot ESC”章节)

警告
当前ArduPilot仅支持常用的指令集(servo_dshot_esc = 1),但其他指令集可能不兼容,导致未定义行为。在确认ESC支持类型为1之前,请务必拆除桨叶进行测试!


可反向的DShot电调

可反向的DShot(即3D模式)允许电机正反转,这对无人车、船只及需要反推的固定翼尤为重要。

当前仅支持BLHeli32、AM32及BLHeli_S的可逆DShot ESC。使用时,需通过参数servo_blh_3dmask的位掩码指定对应输出通道。该设置将1000–1500–2000的输出值映射为ESC的全速反转–怠速–全速正转。

若已启用DShot指令,ArduPilot将在启动时自动根据servo_blh_3dmask配置ESC为可逆模式(3D模式)。启用后,其他DShot指令也可发送至任意已配置为DShot的ESC。

若未启用指令,则需手动在ESC配置中将“Motor Direction”设为“Bidirectional 3D”。

注意
当前ArduPilot仅支持在固定翼和无人车上使用可逆ESC,不支持多旋翼。


混合ESC协议

尽管ArduPilot的所有伺服/电机输出均支持50Hz及以上的普通PWM输出,但并非所有输出都支持其他ESC协议配置。通常,这些配置必须应用于预设的输出组,即使该组中并非所有通道都连接了ESC。因此请注意以下几点:

  1. 使用IOMCU的飞控(如PixHawk、Cube)其8个MAIN输出不支持DShot。仅AUX输出支持。若尝试将MAIN输出设为DShot,实际仍为普通PWM输出。
  2. Pixracer等无独立IOMCU的飞控板,其所有伺服/电机输出均可使用。
  3. 共享同一计时器的输出组必须采用相同的高级配置。具体分组请参见“选择飞控”页面中的硬件描述。例如,若某组中一个输出设为DShot,则该组内其他输出不可设为普通PWM ESC或伺服输出。

注意
每次飞控启动时,都会向地面站发送一条消息,显示各输出为PWM/Oneshot或DShot。剩余编号较高的输出将被分配为GPIO。


IOMCU DShot限制

若已加载支持DShot的IOMCU固件(参见上文“连接ESC”章节),则存在以下限制:

  • RCin引脚无法再检测PPM信号
  • MAIN输出可支持PWM及普通DShot,其协议分组如下:
    • MAIN 1、2:第1组
    • MAIN 3、4:第2组
    • MAIN 5–8:第3组

所有DShot输出的常规设置步骤依然适用。


参考文档:https://ardupilot.org/copter/docs/common-dshot-escs.html#bidirectional-dshot

上一个
好盈电调DroneCAN通信设置
下一个
机载计算机或其它外部设备控制飞控
最近修改: 2025-11-17Powered by