2022年9月19日月曜日

WIFIからプロポへ

 新しい二号機の機体は、ほぼアルミパイプで組まれているせいか、 ラズパイのWIFIに繋がりにくい。因果関係はもう一つわからないが、アンテナの中にラズパイがあるようなものなので、そう考えてします。基本、wifiで制御するシステムなので、これは致命的な問題になる。そこで、ラジコンのようにプロポで制御することを目指す。

プロポはOpenTXで組まれたJumper T-Liteというのを持っているので、それとフタバ互換の受信機を組み合わせることにした。受信機は、「Corona 受信機 S.BUS 2.4G S-FHSS フタバ 互換 (R8SF(8CH))」だ。送受信機ともに8チャンネルだ。

この受信機は、プロポの信号によって、直接サーボモータも回すことができる。送信信号の詳細はわからないが、受信信号は、従ってPWM(パルス幅変調)されたものだ。PWMは、パワーを1周期内のパルスの幅によって信号の強度を表現する。この強度をデューティー比という。

今回の目的は、サーボモータを回すのではなく、プロポの操作をフライトコントローラーの制御信号と読み取らなければならないので、なんらかの形でデューティー比をアナログのデータに変換しなければならない。

どうやってそれを実現するかが問題だ。

最初は、安易に、フライトコントローラーで、アナログ信号をPWM信号に変えて、ESC(モータースピードコントローラー)に渡すのが、pca9685というチップなので、これを逆に、出力側にPWM信号を与えて、readさせれば、元に戻るのではないかと考えたが、これは全くダメだった。

次に、矩形波をサンプリングして、mcp3208というおなじみのADコンバーターで読み取り、そこのビットの切り替えタイミングをとらえてデューティー比を計算する方法を考えた。考え方に大きな間違いはなかったが、mcp3208のサンプリング速度が100KHz程度で、これでは、安定した信号を捉えることができない。最低1MHzくらい必要な感じで、一応、それくらいのサンプリングができるADコンバーターを発注したが、いろいろ難しい。

その辺りで、ふとネットを調べていたら、PWM信号をローパスフィルタに通して、デューティー比の信号をアナログ電圧にするという裏技が紹介してあった。

https://www.macnica.co.jp/business/semiconductor/articles/cypress/107577/

これはいいと思った。ただ、私が欲しいのは直流電圧で、RCのローパスフィルタでは、リップルというノイズが大きい。これを小さくするためにはCの容量を大きくしなければならない。しかしそれをやると、Cに電荷が貯まるまでの時間が長くなり、コントローラーの反応に機敏に追随しなくなる。

そこで、次のサイトに書いてある、オペアンプを使ったローパスフィルタを試みた。

https://geek.tacoskingdom.com/blog/88

これでももう一つ満足いく結果を得られなかった。しかし、次のサイトに、複数のオペアンプを通して信号を平滑化する試みが描かれていて、それを試みて、結構満足のいく結果になった。


オペアンプLM358には、同じオペアンプが二つ組み込まれていて、同じ回路を構成し、直列に繋げば、2段のローパスフィルタになる。これをやってみたら、結構いい感じになったのだ。






また、この信号をラズパイに繋いだAD変換LSIのMCP3208を通すと、次のようになった。

これで使える。



0 件のコメント:

コメントを投稿

DJI MAVIC MINIのFPVライブ動画をiOSのVisionframeworkで顔認識させるという話

 iOSでは、他の方法もあるが、Visionframeworkは、いろんなことができるので、これでなんとか顔認識させようとここ2,3日没頭していた。ようやく、 こんな感じで、緑の枠で認識画像をリアルタイムで表示できるようになった。 (プログラムの全体は、最下段に掲げてある) 途中...