DShot是一种数字式电子电调协议,支持高速、高分辨率的数字通信,有助于提升对载具的控制性能,尤其适用于多旋翼和垂直起降固定翼等应用场景。其优势包括:
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工作。
在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。
设置参数MOT_PWM_TYPE以选择所需的波特率,并重启飞控:
对于使用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,可能导致电机非预期输出。
重启飞控,查看“遥控器状态消息”以确认输出通道配置已生效(参数下载时会自动显示该消息)。

可通过参数servo_dshot_rate配置DShot脉冲的发送频率。默认情况下,ArduPilot会在每次IMU采样准备好时以及固定1kHz间隔发送DShot数据脉冲。对于标准400Hz调度循环的多旋翼飞行器,这相当于约1.4kHz的输出频率。然而,该输出并不规律——为获得更规律的输出,可设置servo_dshot_rate为调度循环的倍数。例如,设为2则脉冲以800Hz发送,设为3则为1.2kHz,以此类推。更规律的输出有助于对电机控制要求更高的飞行器(如小型竞速机)。不建议低于1kHz,因有报告称部分BLHeli32在低速率下可能丢帧;而更高频率则可提升可靠性并加快丢帧恢复速度,代价是占用更多CPU资源。理论上,DShot150支持的最高频率为4kHz。
部分ESC支持DShot指令,可用于控制ESC的LED、蜂鸣器及电机转向等功能。使用方法如下:
servo_dshot_esc为所使用ESC的类型(若启用双向DShot遥测或扩展遥测,此项必须设置)ntf_led_types中勾选“DShot”以启用ESC LED控制ntf_buzz_types中勾选“DShot”以启用电机蜂鸣功能当前支持的指令包括:
servo_blh_rvmask)警告
当前ArduPilot仅支持常用的指令集(servo_dshot_esc = 1),但其他指令集可能不兼容,导致未定义行为。在确认ESC支持类型为1之前,请务必拆除桨叶进行测试!
可反向的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,不支持多旋翼。
尽管ArduPilot的所有伺服/电机输出均支持50Hz及以上的普通PWM输出,但并非所有输出都支持其他ESC协议配置。通常,这些配置必须应用于预设的输出组,即使该组中并非所有通道都连接了ESC。因此请注意以下几点:
注意
每次飞控启动时,都会向地面站发送一条消息,显示各输出为PWM/Oneshot或DShot。剩余编号较高的输出将被分配为GPIO。
若已加载支持DShot的IOMCU固件(参见上文“连接ESC”章节),则存在以下限制:
所有DShot输出的常规设置步骤依然适用。
参考文档:https://ardupilot.org/copter/docs/common-dshot-escs.html#bidirectional-dshot