Betaflight4.2のRPMフィルタをあらためて

知ってる人は知ってたんだろうけど。
STM32F411とSTM32F405って動作クロック違うのか。

Betaflight4.2になって、いよいよRPMフィルタもいよいよ普通に使える感じになった。
なにが普通になったかというと、搭載されているマイコンによって PID Loop が自動で設定されるようになったりした。
4.1までは STM32F4系は、演算性能が足りない(通常時負荷が50%超過)のもあり、Dshot300/Gyro4k/PIDloop4k で設定するべしとされていた。
STM32F7系は迷わず DShot600/8k/8k でイケと。
なお4.2では改善が行われ、Gyroは全種8k決め打ち。
PID Loop は搭載チップによって安全なところが選ばれるようになった。
よって新しいデフォルトは、STM32F4系だと、Dshot300/Gyro8k/PIDloop4k。
STM32F7系は同じく DShot600/8k/8k でよいということらしい。

ところで、この DShot300 はホントに適正なのだろうか。
という考えるだけでめんどくさい分析を D-Mania さんで行われている。ありがたい。

オシロスコープ持ち込んでの3回シリーズの最終が上記動画。
たいへん勉強になるので全部見ておいたほうがよい。
この長大なシリーズで、最終的には DShot600 にしておかないと PID Loop が入り切らないのではないか、ということだった。
でも我らがSTM32F4系は Dshot600 回しきらないじゃないか。
ということで、オーバークロックの検討することにしたのだが、そこで肝心なことを見落としていたことに気づいた。

ここでウダウダと STM32マイコンの簡単な説明。
ドローンのFCに使われるマイコンはSTマイクロエレクトロニクスってところの STM32 っていうシリーズ。
32bitで Arm Cortex-M4 ベース。8bitベースの STM8 は VTX の制御とかに使われている。
いくつかランクがあって、STM32F103とかは 3Dプリンタの制御基板とか、プロポとかマルチモジュールとかで使われている。
US65ぐらいまで使われていたのは STM32F3 ってヤツで、Betaflight4系に移行した時にサポート対象から外れた。
用途を絞り込んでメモリを空け、クロックアップし延命をする人もいる。
そういう経緯もあって、現在の主流は STM32F4系とSTM32F7系になる。

Tinyクラスでよくみるのが、STM32F411。おなじF4系にも STM32F405 もよく使われる。
よーくしらべると、このシリーズは動作クロックが違う。
STM32F411は100MHz。
https://www.st.com/ja/microcontrollers-microprocessors/stm32f411.html
STM32F405は168MHz。
https://www.st.com/ja/microcontrollers-microprocessors/stm32f405-415.html
なおSTM32F7系は216MHzだ。
STM32F405系だと Dshot300/Gyro8k/PIDloop8k でも負荷が低く十分使えることを確認した。
STM32F411をオーバークロック(set cpu_overclock = 108MHZ)できるが、標準状態ですでにオーバークロックされていることも多い。
ドローンのFCに限定しなければ、STM32F411を250MHzぐらいまで上げてる例もあるようだけど、まあそこは後日検証してみる。

ということでRPMフィルタを使う時の設定はこちら。
 STM32F411は、Dshot300/Gyro8k/PIDloop4k。
 STM32F405は、Dshot600/Gyro8k/PIDloop8k。
 STM32F7系は、Dshot600/Gyro8k/PIDloop8k。
F4系とひとくくりにせず、ちゃんと細かいところ見ろってことですね。
今後はパフォーマンスを得たい場合はSTM32F405以上を買うのがよいようだ。

おまけでESC側の対応もまとめたみた。
BLHELI_32 は基本的にRPMフィルタに対応しているので、そのままで利用可能。
安いのとか小さいのによく使われるおなじみの BLHeli_S は JESC の有料ファームを使うのが推奨とされている。
https://jflight.net/
都度カネ払うのもなー。そこまでやる気はないというか。
なお「L」のヤツは無償でもよいとのこと。どれが「L」?
という向きのために、無償版の開発が進められている。
それが jazzmaverik。
https://github.com/JazzMaverick/BLHeli/tree/JazzMaverick-patch-1/BLHeli_S%20SiLabs
どうやって使うかというと、BLHeli_S を立ち上げた時に、ESCのファーム番号を確認。

その型番(画像の場合は「O-H-5」)の Hex を上記 Git から Raw でファイルに保存。(名前をつけてリンク先を保存)

BLHeli_S から「FlASH FIRMWARE」各ESCに個別に焼き込む。
各バージョンに加え「48」とか「96」とか入っているのは、通信周波数を示すもので数字が高いほど性能がよくなったりするが安全性も減る。
とりあえず現状は 16.73 にしときなされ、とある。
https://github.com/betaflight/betaflight/wiki/Bidirectional-DSHOT-and-RPM-Filter
16.73 は「48」とか「96」とかはないので悩まないでよし。
あとはこのページあるとおり、Dynamic Notch Fiter とかを絞りこむ。
双方向通信をオンにし、磁石の数を適正化(5インチクラスだと14、小さいのは12が多い)し、モータータブで動いているか確認する。

Meteor65の場合はこんな感じ。

電源投入時の「ピポパプーペー」の「プーペー」の音が高くなる。
飛ばすとなにか芯が揃ったようなモーター音になり大変良い感じ。
レシプロエンジンでいうと、ピストン重量のバランス取りされた感じだ。
電池の持ちもよくなるので、これからはデフォルトだろう。(イマサラかよ)