• 正文
    • 01、Dshot的版本
    • 02、Dshot數(shù)據(jù)幀結構
    • 03、Dshot電平特性
    • 04、BateFlight中的Dshot協(xié)議
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

Dshot協(xié)議 | 飛控與電調的數(shù)字通信協(xié)議

02/12 08:37 來源:穹宇逐光
3669
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

閱讀本文后,您將了解到DShot協(xié)議的基礎知識,以及它在Betaflight固件中是如何與電調進行通信的具體內容。

DShot是一種用于電子速度控制器(ESC)的數(shù)字協(xié)議,專為多旋翼飛行器如穿越機設計。它由Felix(KISS團隊的一員)開發(fā),并在betaflight和其他開源飛控固件的支持下得到了廣泛應用。DShot的特點是高可靠性、擴展性和性能,相比傳統(tǒng)的PWM協(xié)議,它提供了更精確的控制和更高的數(shù)據(jù)傳輸速率。

優(yōu)勢在不需要像模擬信號那樣進行電調校準。提供比模擬信號更高的分辨率,允許更精細的電機控制。由于采用數(shù)字信號CRC校驗,具有更好的抗干擾能力。支持遙測功能,能夠獲取ESC的狀態(tài)信息,比如RPM(每分鐘轉速)。

除了標準的從飛行控制器到ESC的單向通信外,還有雙向的DShot協(xié)議,支持ESC向飛行控制器發(fā)送電機電調的實時數(shù)據(jù)。

01、Dshot的版本

DShot協(xié)議主要包括四個版本:DShot150、DShot300、DShot600以及DShot1200。這些版本主要通過傳輸速率來區(qū)分:

● DShot150:每秒傳輸150,000位數(shù)據(jù)。

● DShot300:每秒傳輸300,000位數(shù)據(jù)。

● DShot600:每秒傳輸600,000位數(shù)據(jù)。

● DShot1200:每秒傳輸1,200,000位數(shù)據(jù)。

盡管這些版本都基于相同的底層技術,但它們的數(shù)據(jù)傳輸速率不同,這意味著更高的版本能夠提供更快的響應時間和更精細的控制。

較低版本如DShot150適合那些不需要極高反應速度的應用場景;而較高版本如DShot600或DShot1200,則更適合于高性能飛行器,它們需要快速響應和精確控制來完成復雜的飛行動作。

但是,隨著傳輸速率的增加,對連接穩(wěn)定性的要求也隨之提高。因此,在選擇更高版本的DShot時,確保所有相關硬件(包括飛行控制器、接收機和ESC)都能支持所選版本,并且連線盡可能短且避免干擾是非常重要的。

DShot的不同版本提供了從基礎到高級的各種選項,滿足了從小型玩具無人機到專業(yè)級競速飛行器等廣泛的應用需求。理解和正確選擇適合自己項目的DShot版本,不僅能提升設備的整體性能,還能確保更加流暢和可靠的飛行體驗。同時,記住在DShot協(xié)議中,盡管波特率比特率是兩個不同的概念,但在數(shù)值上它們是相等的這一特點,有助于更好地把握該協(xié)議的技術細節(jié)。

02、Dshot數(shù)據(jù)幀結構

每個DShot數(shù)據(jù)幀包含16位,其中前11位用于油門信號,接下來的1位用于請求電調回傳信息(遙測),接下就是最后4位用于循環(huán)冗余校驗(CRC),以確保數(shù)據(jù)完整性。

● 數(shù)據(jù):

最小值?00000000000(二進制)、0(十進制)

最大值?11111111111(二進制)、2047(十進制)

● 方向:

0(二進制)、0(十進制):飛控→電調

1(二進制)、1(十進制):飛控←電調

● CRC校驗:

這4個校驗位是對數(shù)據(jù)的11個油門值+1個方向問這12個位按每組4位分3組,然后把三組4位的數(shù)據(jù)進行異或計算(C語言運算符就是^),計算結果取低4位作為這串數(shù)據(jù)的校驗碼插入。

假設有12位數(shù)據(jù)為 1101 1010 1110 (即二進制表示),我們可以按照上面的方法來計算CRC

①分組:G1 = 1101, G2 = 1010, G3 = 1110

②異或:R1 = G1 XOR G2 = 0111, R2 = G2 XOR G3 = 0100

③最終CRC:CRC = R1 XOR R2 = 0011

因此,在發(fā)送時,完整的16位數(shù)據(jù)幀將是原始的12位數(shù)據(jù)加上計算出的4位CRC值 1101 1010 1110 0011

至于程序的實現(xiàn)方法就很各自各樣了。

03、Dshot電平特性

DShot使用單線雙向通信,通過改變高低電平的時間來表示二進制的0和1。用DShot600舉例,一位時間大約為1.67微秒(1667納秒),其中0表示高電平時間為625納秒,1表示高電平時間為1250納秒。

一位Dshot信號的波形圖

一幀Dshot信息的波形圖

04、BateFlight中的Dshot協(xié)議

DShot-output

從介紹(https://betaflight.com/docs/development/dshot)中我們可以看出Batefilght中的Dshot協(xié)議有別與一般的Dshot協(xié)議用法,Batefilght在0 到47 設定了一些列的指令,從48 到 2047是留給油門的,一共2000個分辨率。進一步通過查看Batefilght源代碼我們可以知道 0 到47分別代表什么指令。

dshot_command.h中對0到47的命令定義

DShot-capture

通常情況下,幀之間會有至少2微秒的暫停來指示幀重置。重置僅僅表示一個幀的結束,因此任何未來的位都是新幀的開始。由于DShot發(fā)生在PID循環(huán)的末尾,這個暫停實際上要長得多。如果DShot被設置為連續(xù)輸出信號,則需要這種延遲。

相關推薦