目次
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を見るのがよさそうです。
その他
ESP32用のDshot
これ見てみると、ESP32のDriver rmt.h で定義されているrmt_write_items()でOutputできるみたいですね。Bitstreamは、dshotrmt.cppで作ってる
The RMT (Remote Control) module driver can be used to send and receive infrared remote control signals. ってことは、Ir用のドライバーなんですね。
FCやESCのファームウェア
dshot.cってあるけど。。xDMAというやつで出すみたいだが。。STM32のDMAのライブラリで通信してますね。
libraries/AP_HAL_ChibiOS/RCOutput_bdshot.cpp ってあって。。その中たどっていくと
ardupilot/libraries/AP_HAL_ChibiOS/shared_dma.cpp でRCoutしているみたいですね。
dmaStreamEnabel() で書き込んで出してる感じ。。 これがどこにあるのかな?
ソースないのでわからん(笑)
dma_buffer でやり取りしてそうですね。。
なんとなく、DMA転送で、やり取りできるって感じで、石側に機能がついてそうな感じですね。
データシート類
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
Advanced UAV Tech Expert ChatGPT
ChatGPTに教えたらどうこたえるのかな?と。。
これらの情報とかを入れたChatGPTを作ってみた。
お金払っているうちしか使えないかもしれないけど(笑)
いろいろプロトコル一覧表
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://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 |
コメントを残していただけるとありがたいです