【プロトコル】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を見るのがよさそうです。

Dshot bidir blhelis support by joelucid · Pull Request #8554 · betaflight/betaflight
This PR adds support for a modified dshot bidir protocol which can be supported by blheli_s hw. The main changes are (a) erpm periods instead of frequencies are...
スポンサーリンク
広告

その他

ESP32用のDshot

GitHub - derdoktor667/DShotRMT: This library for the ESP32 can control a BlHeli_S by using encoded DShot commands
This library for the ESP32 can control a BlHeli_S by using encoded DShot commands - GitHub - derdoktor667/DShotRMT: This library for the ESP32 can control a BlH...

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

RMT - ESP32 - — ESP-IDF Programming Guide v4.3 documentation

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を作ってみた。

ChatGPT - Advanced UAV Tech Expert
Expert in RC & UAV communication technologies

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

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

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
UART――多様な非同期通信に対応可能なハードウェア通信プロトコル | アナログ・デバイセズ
UART(Universal Asynchronous Receiver/Transmitter)は、デバイス間の通信に広く使われているプロトコルです。本稿では、標準的な手順に従い、UARTをハードウェア通信プロトコルとして使用する方法について説明します。UARTについては、通信の仕様を適切に定めて適切な構成を行うこと...
 UAVCAN Specification

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

https://uavcan.org/specification/
DroneCAN Peripherals — Copter documentation

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

DroneCAN Specification
1. Introduction - DroneCAN
DroneCAN is the primary CAN protocol used by the ArduPilot and PX4 projects for communication with CAN peripherals. It is an open protocol with open communicati...
8. Hardware design recommendations - DroneCAN
DroneCAN is the primary CAN protocol used by the ArduPilot and PX4 projects for communication with CAN peripherals. It is an open protocol with open communicati...
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
S.BUSプロトコル - 理系的な戯れ
ドローンを含めロボットを遠隔操作に広く普及しているS.BUS通信ですが、S.BUS信号のデコードやエンコードの必要が出るためS.BUSプロトコルについてまとめました.
古くから用いられているラジコンサーボ用の通信方式 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

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

Loading Facebook Comments ...
%d人のブロガーが「いいね」をつけました。