DSHOT协议要点简介

2019-04-13 21:07发布

什么是DSHOT?
DSHOT是无人机里边,一种新型的驱动电调(ESC,无刷直流电机电子调速器)的方式。
常规的电机驱动都是采用PWM模式,不管是无刷也好,有刷也好,都是一样。也就是固定频率,控制端通过调节占空比的方式来发送电机油门的控制信号,接收端(ESC)通过测量PWM的占空比,然后量化出油门值,并转换为对电机的驱动,这个也就是ESC的工作。PWM是一种方波,表面来看是数字信号的传输,但本质上是一种模拟值,为什么说是模拟值?如控制端产生400HZ的一组PWM,周期是1/400=0.0025s=2.5ms,油门信号范围是0-100%,对应波形高电平长度范围是1000-2000us,也就是这段PWM波形的高电平的时间长度就是对应的油门值,然后接收端(ESC),通过测量这段信号高电平的时间来量化成油门值,模拟值就是在于“测量”这里,通常测量一个PWM脉宽都是通过硬件捕获信号的上升沿和下降沿然后算出时间差,这就会出现时间误差问题,控制端发出的脉宽可能是1008us,但可能会由于接收端控制器的时钟精度不高,导致测量的时钟基准和控制端出现一定偏差,测量出来可能是1006,或者1009,1010都是正常的,PWM信号甚至很容易收到干扰导致信号出现畸形,虽然接收端可以通过软件滤除方式,但终归是存在这么一个缺陷。所以这里说PWM控制是一个模拟值,因为通信两端发送和接收的信息,会受时钟精度的不同产生信息不一致的情况。
ok上面哆嗦那么半天就是为了DSHOT出场的,DSHOT是真正意义的数字信号协议,也是一种波形,这个协议其实很简单,一帧信号就是一串完整的数据,包含3部分,1是油门值,2是请求数据回传标志,3是校验位。
下图是示波器抓取的一帧信号
示波器波形
简要介绍下一帧信号的3部分组成:
1.油门值(Throttle) 11位
由11位组成,按二进制计算可表示的数值范围是0-2047,共2048个油门值,可以表示非常精细的油门信号。
2.请求数据回传标志(Tlm request) 1位
这个位是向ESC请求数据回传的标志位,为0时表示不请求,为1表示请求,若发送请求,支持数据回传功能的ESC会回传ESC的各种状态信息给控制端。
3.校验位(CRC) 4位
校验位很重要,是验证一帧数据是否有效合法,是否未遭到破坏的一种校验方式,确保数据的正确性。这4个校验位是对前面11个油门值+1个回传标志这12个位按每组4位分3组,也就是三组4位的数据进行异或计算(C语言运算符就是^),计算结果取低4位作为这串数据的校验码插入。
以上是组成的位数,每个位不是0就是1,这两种信号是如何通过波形表示呢?如下图:
波形
DSHOT600为例(周期=1/600=1667ns):
位长度(一个数据周期)为1667纳秒(T0H + T0L或T1H + T1L)。
对于某位为0,脉冲宽度为625纳秒(T0H - 当位值为0时,脉冲为高电平的时间)
一位为1时,脉冲宽度为1250纳秒(T1H - 当位值为1时,脉冲为高电平的时间)
(也就是T1H = 2T0H)
位0和位1值的脉冲长度允许一定的容差,所以这些时间可以稍微减少或者延长,结果仍然是一样的。
DSHOT信号有DSHOT100,DSHOT300,DSHOT600,DSHOT1200,每种代表了不同的通信速率,因为不同的速率,决定了上面0和1数据的T0H TOL T1H T1L的脉冲周期,当然,DSHOTxxx后面的数值越高,速率就越高,数据的时间宽度就越窄,对处理器要求就越高,纳秒级,实际使用DSHOT600足矣。
以上16位数据发送时高位在前,逐位发送,理解好这点,对软件开发非常重要。
软件实现的方式可以通过DMA方式,因为DSHOT还是比较占资源的,放任DMA去帮处理器lu最合适,非常高效,解放下处理器的双手,包括数据解析也是一样的思路。 2018-04-04 By nyway