暇人の技術備忘録

ハサミの技術備忘録

趣味でやっている電子工作の備忘録です。

Teensy4.1でKISS ESCとDSHOT通信する

はじめに

最近のBlHeli32やKISSなどのESCファームウェアはテレメトリ機能が搭載されており、回転数や電圧、電流をフライトコントローラ側に返すことができるようになってきました。また、フライトコントローラからESCへの指令値もPWMだけでなくDSHOTと呼ばれるデジタル信号のものが出てきています。

ESCのプロトコルについて興味がある方は以下のサイトが参考になります。

backyardrobotics.eu

backyardrobotics.eu

正直、これらの機能を使う一番の近道は市販のフライトコントローラを買ってくることだと思いますが、自分は何故かフライトコントローラの自作に拘っているので、なんとかTeensyとかのマイコンでDSHOTとテレメトリ機能を使えないかとネットの海を彷徨っていました。

今回はteensySHOTと呼ばれるTeensy 3.5と4.0でDSHOT通信とテレメトリの受信が可能なプログラムが公開されていたのでこれを自分の環境で使用したらどうなったか書こうと思います。

teensySHOT

teensySHOTはGItHubで公開されています。

github.com

公開されているプログラムは大きく分けて4つに分類できます。

  • DSHOT.cpp:DSHOT600通信を行うプログラム
  • AWPID.cpp:アンチワインドアップPID制御を行うプログラム
  • ESCCMD.cpp:TeensyとESCの双方向通信を行うためのプログラム
  • ESCPID.ino:メインプログラム

プログラムの関係は下図のような感じです(あくまでも自分のイメージ)。

f:id:sbasami:20200822221237p:plain
プログラムの構造イメージ

自分の場合、制御は自前で実装しようと思っていたのでTeensyとESCの通信関係のプログラムだけを使わせていただきました。なお、自分が確かめた限りではこのプログラムはKISSファームウェアのESCでしか動作しません。BlHeli32ファームウェアのESCも試してみましたが動作はしませんでした。

Teensy4.1でKISS ESCのDSHOTとテレメトリ機能を使う

使用部品

今回使用した部品は以下のとおりです。

プログラムはTeensy 4.0を対象としているようですがTeensy 4.1でも問題なく使えました。

回路図

回路図と呼べるほどのものではないですが一応示しておきます。

f:id:sbasami:20200822221031p:plain
回路図(元画像:https://www.amazon.co.jp/dp/B07J294Q3F)

プログラム

実験で使用したソースコードを以下に示します。このプログラムはシリアルモニタで入力した数値(0~1999)に応じてモータが回転するというものです。ESCPID.inoを自分なりに改造した形になっています。

Teensy4.1でKISS ESCとDSHOT通信するプログラム

プログラム中のシリアル通信関連のコードは以下のサイトを参考にしました。

jumbleat.com

ここで示したプログラムは自分が書いた部分だけですが、動作させるにはGItHubで公開されている以下4つのプログラムも必要です

  • DSHOT.h
  • DSHOT.cpp
  • ESCCMD.h
  • ESCCMD.cpp

フォルダ構造としては以下のようにしてください。

f:id:sbasami:20200822221312p:plain
フォルダ構造

以下の画像はプログラム動作中のシリアルモニタです。ESCの情報がTeensy 4.1で取得できていることがわかります。

f:id:sbasami:20200822221449p:plain
シリアルモニタの様子

おわりに

今回はTeensy4.1でKISS ESCとDSHOT通信する方法について書きました。テレメトリ機能も使えているようなので次回製作予定の自作ドローンにはBLDCモータの回転数制御を実装予定です。

個人的にはESCも自作してしまいたいのですが、BLDCモータは制御が難しい(そもそも情報が少ない)のとインバータ回路の知識も必要なのでハードル高いですね、いつかはやってみたいですが。