2022年1月29日土曜日

プロペラ用タコメーター(回転数 rpm 計測器)

 ESC信号に対してどれほど正しくモーターが反応しているかを確かめたかった。市販の非接触タコメーターも持っていて、飛行していない時の回転数はそれで計測できたが、飛行中、すなわちPID制御に対するモーターの反応が、信号と並列に捉えられない限り、その辺りが、どうしてもブラックボックスになっていて、精密なシミュレーションをする気にもならなかったが、なんとか自作のプロペラタコメーターをドローンにつなぐことができたので、色々わかってきた。

ここでは、また、もう一度作る時のために、メモがわりにここに書いておく。

反射型光センサーについては、以下のサイトを参考にさせていただいた。

http://nanoappli.com/blog/archives/5051

タコメータは、プロペラ直下に以下のように置かれている。




左側の黒いのが反射型の光センサーRPR220である。右の3ピンコネクタが、上からグラウンド、3.3V電源、信号の順になっている。真ん中の赤いものがLEDで、プロペラが直上に来ると、光る。白いプロペラはカウントできるが、黒いものはカウントできないので、反射シートなどをプロペラに貼る必要がある。

ここでは、小さい基盤に回路を組んで、モーターベースに強力接着テープで貼り付けている。

回路図は、次のようなものである。書き方のルールは特に意識していないが、簡単なので理解いただけると思う。

10Kオームの可変抵抗をつけているが、大事な役割を果たす。というのは、上に来た時の電圧レベルとそうでない時の電圧レベルの絶対水準を変更するもので、プログラム上でその境界電圧を設定するときに、調整して、4つのタコメータが同じになるようにしておかなければ、ややこしくなるからである。

私の場合は、プロペラがない時の信号電圧を1.0V、プロペラがある時のそれを1.9Vに調整し、1.5Vを超えたときにプロペラが通過したと判定するようにしている。この電圧は、RPR220とプロペラの距離によっても変わる。6ミリ程度離れているのが一番感度がいいと書かれていたが、私も、再接近で5mmくらいになるようにタコメーターを設置している。

信号は、SPIのシリアル通信で、ADコンバーター経由で、raspberrypiに送られる。距離センサーの電圧信号をデジタル信号に変換するのは、8チャンネルの、MCP3208を使った(MCP3204は、4チャンネルで、それでもいいのだが)。当初はI2CのADS1115を使っていたが、信号速度の遅さが気になって、圧倒的に早いSPI通信に変えた。

RaspberrypiのSPI通信は、一つのチャンネルが解放されていて、CS0とCS1が使える。CS0が超音波距離センサーのために塞がっているので、CS1にぶら下げた。他のバスは共通に繋いでおけば良い。もし、それ以上のデバイスをぶら下げる場合はRspberryPiは、もう一つSPIチャンネルが潜在的に利用可能になっている(いくつか処理をしなければならないが)。

MCP3208のRaspberryPI用のプログラムは、数多く公開されている。

それらをもとに、基準電圧を超えた回数をカウントするようにすれば、プロペラタコメータになる。

ESC信号とそれに対するモーターの回転数が、例えば次のように捉えられるようになる。

青い線がESCが与えた回転指示で、オレンジの線がそれに対する回転数だ。D制御の細かい揺れは回転数に反映することはできない。

0 件のコメント:

コメントを投稿

立ち上がらないraspberrypiのネットワーク

 raspberrypiのネットワークが立ち上がらなくなってしまっていた。差し当たって必要ないのでほっておいたが、今日、いろいろ調べてみた。 結局、raspi-confgで、network Configure をdhcpcdから、networkmanagerに変更したら立ち上がる...