【プロトコル】ESCのDshot とBidirectional Dshotの定義ってなぜどこにもないのかな?【専用ChatGPT】

Dshot

ドローンのフライトコントローラーと、ESC(モータドライバ)の通信には、ラジコン界で昔から使われているPWM(1msec~2msecの幅のパルス)が使われていたんですが、最近はDshotやBDshotと呼ばれるものが多く採用されています。

が。。その定義やプロトコルの詳細がよくわからず。。

どうなってるのかな? って思っていました。Bl-heli 32あたりが出てきてからなので、STM32の信号方式なのかな?Bl-heli‗sにもあるからSilabの石についているやつかな?なんて。。 Bidirectional Dshotは1線で双方向なので、GPIOのピンの入出力も変えないといけないから、どうやってるんだろう?って。。

で。。少し詳しい説明を見つけたので、メモしておきます。

DSHOT – the missing Handbook

かなり詳しい。 これを読んで、下のを読むといいですね

双向DSHOT with RPM feedback全指南

実際の実装についても触れられていて、GPIO+DMAでTimerで作られているみたいです。

実装方法

実際の波形は、この下のBetaflightのIssue Commentを見るのがよさそうです。

https://github.com/betaflight/betaflight/pull/8554#issuecomment-512507625

その他

ESP32用のDshot

https://github.com/derdoktor667/DShotRMT

これ見てみると、ESP32のDriver rmt.h で定義されているrmt_write_items()でOutputできるみたいですね。Bitstreamは、dshotrmt.cppで作ってる

https://docs.espressif.com/projects/esp-idf/en/v4.3/esp32/api-reference/peripherals/rmt.html

The RMT (Remote Control) module driver can be used to send and receive infrared remote control signals. ってことは、Ir用のドライバーなんですね。

FCやESCのファームウェア

Bataflight

dshot.cってあるけど。。xDMAというやつで出すみたいだが。。STM32のDMAのライブラリで通信してますね。

Ardupilot

libraries/AP_HAL_ChibiOS/RCOutput_bdshot.cpp ってあって。。その中たどっていくと

ardupilot/libraries/AP_HAL_ChibiOS/shared_dma.cpp でRCoutしているみたいですね。

dmaStreamEnabel() で書き込んで出してる感じ。。 これがどこにあるのかな?

Bl heli

ソースないのでわからん(笑)

AM32

dma_buffer でやり取りしてそうですね。。

なんとなく、DMA転送で、やり取りできるって感じで、石側に機能がついてそうな感じですね。

データシート類

STM32のESC Development-kit

Advanced BLDC controller with embedded STM32 MCU

STM32 Motor Control Software Development Kit

Using the STM32F0/F1/F3/Cx/Gx/Lx Series DMA controller

STM32F070CB STM32F070RB STM32F070C6 STM32F070F6

Silicon Labo ESC用の石のDatasheet

C8051F330/1/2/3/4/5

 

Advanced UAV Tech Expert ChatGPT

ChatGPTに教えたらどうこたえるのかな?と。。

これらの情報とかを入れたChatGPTを作ってみた。

https://chat.openai.com/g/g-njQM9BJBo-advanced-uav-tech-expert

お金払っているうちしか使えないかもしれないけど(笑)

 

いろいろプロトコル一覧表

ICまわりやラジコンまわりって、意外に定義しっかりしていないんですね。通信屋さんやってた僕にとっては、ちょっとびっくり。。ITU-Tに沿わないと(笑)

通信方式名 I2C (Inter-Integrated Circuit) SPI (Serial Peripheral Interface) UART
(Universal Asynchronous Receiver/Transmitter)
UAVCAN
(Uncomplicated Application-level Vehicular Computing and Networking)
DroneCAN
(Drone Computing and Networking)
S.Bus
(Serial Bus)
ラジコンサーボPWM Dshot
(Digital Shot)
信号電圧 1.8/3.3/5 V 1.8/3.3/5 V 5/12 V 物理層に依存 3.3/5 V DroneCAN Micro
JST GH 4-circuit 5 V, 1 A
4.6~6V 4.6~6V サーボ用では7.4V以上もある 通常5V
信号方式  2線式、シリアル、バイディレクショナル  4線式、フルデュプレックス、シリアル  非同期シリアル  CANバスベース、マルチキャスト、非同期シリアル  CANバスベース、マルチキャスト、非同期シリアル  非同期シリアル、逆向き信号 アナログ PWM 50Hz周期
1msec~2msec (中立1.5msec)
デジタル、シリアル
線数  2線 (SDAデータ線,SDL クロック線)  4線 (MISO, MOSI, SCK, SS)  最小2線 (TX、RX)、フロー制御を加えると4線  2線 (CAN_H、CAN_L)  2線 (CAN_H、CAN_L)  3線 (信号、電源、グラウンド)  3線 (信号、電源、グラウンド)
電源線はない場合もある
 3線 (信号、電源、グラウンド)
電源線はない場合もある
クロック周波数  標準モードで100kHz、ファストモードで400kHz、ファストモードプラスで1MHz、ハイスピードモードで3.4MHz  通常数MHzから数十MHz  信号伝送速度に依存  物理層に依存(一般的には125kbpsから1Mbps)  物理層に依存(一般的には125kbpsから1Mbps) 10μs(1bit) 100kHz クロックとしてはなし。 Dshot150、Dshot300、Dshot600、Dshot1200があり、数字は伝送速度(kbps)
Bi-Directional Dshotもある
信号伝送速度  100kbps〜3.4Mbps  デバイスと設定に依存するが、一般的には数MHzから数十MHz  通常は300bpsから4Mbps  125kbpsから1Mbps  125kbpsから1Mbps  100kbps
データ全体の長さ:25 Byte
データの構成:1スタートビット、8データビット、1偶数(Even)パリティビット、2ストップビット[8E2]
150kbps,300kbps,600kbps,1200kbps
参考URL  NXP Semiconductors I2C Manual
https://www.nxp.com/docs/en/user-guide/UM10204.pdf
 SPIは公式な規格書がなく、一般的な実装に基づく例
Analog Devices
https://www.analog.com/media/en/analog-dialogue/volume-52/number-3/introduction-to-spi-interface.pdf
 UARTは特定の規格書に基づかない
Analog Devices
https://www.analog.com/jp/analog-dialogue/articles/uart-a-hardware-communication-protocol.html
 UAVCAN Specification

クリックしてCyphal_Specification.pdfにアクセス

https://uavcan.org/specification/

https://ardupilot.org/copter/docs/common-uavcan-peripherals.html

https://github.com/ArduPilot/ardupilot/tree/2e5af08a102d10b8b7d54414c7aa4f12f4a80ab9/libraries/AP_CANManager

DroneCAN Specification
https://dronecan.github.io/Specification/1._Introduction/
https://dronecan.github.io/Specification/8._Hardware_design_recommendations/
https://docs.cubepilot.org/user-guides/here-3/here-3-manual

https://github.com/ArduPilot/ardupilot/tree/2e5af08a102d10b8b7d54414c7aa4f12f4a80ab9/libraries/AP_DroneCAN

 S.Busはフタバが開発した規格
基本はUARTと同様 H/L信号は反転している。
https://github.com/bolderflight/sbus/blob/main/README.md
https://rikei-tawamure.com/entry/2020/03/17/120606
古くから用いられているラジコンサーボ用の通信方式 https://brushlesswhoop.com/dshot-and-bidirectional-dshot/

https://elmagnifico.tech/2023/04/07/bi-directional-DSHOT/

Ch数 固有IDによる識別 SS(High Lowによるチップセレクト) 1対1 UAVCAN IDによる DroneCAN IDによる 16ch ID方式
送信周期:14ms(analog mode) or 7ms(highspeed mode)
1対1
受信機フライトコントローラー間のみ 16ch
1対1
用例  IMUセンサ類、コンパス等   IMUセンサ類、コンパス等、SDカード  シリアル通信、PCとマイクロコントローラ間通信、GPSモジュール 主にGPS 主にGPS  RCサーボ制御、ドローンのフライトコントローラ、受信機  RCサーボ制御、ドローンのフライトコントローラ、受信機、ESC ESC テレメトリ付きESC

投稿者 tom2rd

コメントを残していただけるとありがたいです

Loading Facebook Comments ...

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください