目次
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のファームウェア
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を作ってみた。
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 |
コメントを残していただけるとありがたいです