什麼是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