Teensy4.1でKISS ESCとDSHOT通信する
はじめに
最近のBlHeli32やKISSなどのESCファームウェアはテレメトリ機能が搭載されており、回転数や電圧、電流をフライトコントローラ側に返すことができるようになってきました。また、フライトコントローラからESCへの指令値もPWMだけでなくDSHOTと呼ばれるデジタル信号のものが出てきています。
ESCのプロトコルについて興味がある方は以下のサイトが参考になります。
正直、これらの機能を使う一番の近道は市販のフライトコントローラを買ってくることだと思いますが、自分は何故かフライトコントローラの自作に拘っているので、なんとかTeensyとかのマイコンでDSHOTとテレメトリ機能を使えないかとネットの海を彷徨っていました。
今回はteensySHOTと呼ばれるTeensy 3.5と4.0でDSHOT通信とテレメトリの受信が可能なプログラムが公開されていたのでこれを自分の環境で使用したらどうなったか書こうと思います。
teensySHOT
teensySHOTはGItHubで公開されています。
公開されているプログラムは大きく分けて4つに分類できます。
- DSHOT.cpp:DSHOT600通信を行うプログラム
- AWPID.cpp:アンチワインドアップPID制御を行うプログラム
- ESCCMD.cpp:TeensyとESCの双方向通信を行うためのプログラム
- ESCPID.ino:メインプログラム
プログラムの関係は下図のような感じです(あくまでも自分のイメージ)。
自分の場合、制御は自前で実装しようと思っていたのでTeensyとESCの通信関係のプログラムだけを使わせていただきました。なお、自分が確かめた限りではこのプログラムはKISSファームウェアのESCでしか動作しません。BlHeli32ファームウェアのESCも試してみましたが動作はしませんでした。
Teensy4.1でKISS ESCのDSHOTとテレメトリ機能を使う
使用部品
今回使用した部品は以下のとおりです。
プログラムはTeensy 4.0を対象としているようですがTeensy 4.1でも問題なく使えました。
回路図
回路図と呼べるほどのものではないですが一応示しておきます。
プログラム
実験で使用したソースコードを以下に示します。このプログラムはシリアルモニタで入力した数値(0~1999)に応じてモータが回転するというものです。ESCPID.inoを自分なりに改造した形になっています。
Teensy4.1でKISS ESCとDSHOT通信するプログラム
プログラム中のシリアル通信関連のコードは以下のサイトを参考にしました。
ここで示したプログラムは自分が書いた部分だけですが、動作させるにはGItHubで公開されている以下4つのプログラムも必要です
- DSHOT.h
- DSHOT.cpp
- ESCCMD.h
- ESCCMD.cpp
フォルダ構造としては以下のようにしてください。
以下の画像はプログラム動作中のシリアルモニタです。ESCの情報がTeensy 4.1で取得できていることがわかります。
おわりに
今回はTeensy4.1でKISS ESCとDSHOT通信する方法について書きました。テレメトリ機能も使えているようなので次回製作予定の自作ドローンにはBLDCモータの回転数制御を実装予定です。
個人的にはESCも自作してしまいたいのですが、BLDCモータは制御が難しい(そもそも情報が少ない)のとインバータ回路の知識も必要なのでハードル高いですね、いつかはやってみたいですが。