2017年2月16日木曜日

超音波風速計 時間を測りたい



 青のRAWがADCから受け取った値をFIRに通してAC結合した値、赤のETSが等価時間サンプリングで時間分解能を14倍にした値です。2枚目と3枚目は1枚目の一部を拡大した図になります。
 横軸はマイクロ秒単位です。縦軸にも数字がありますが、高さを示すラベル以上の意味はありません。

 実時間サンプリングの青に比べ、等価時間サンプリングの赤は横方向の分解能が高いのがわかると思います。
 縦軸はFIRの処理の関係で1bitあたりの分解能が決まりますが、結果をS16bitの変数に入れてるので、まだ5bitの余裕があります。32倍くらい分解能を上げられます。


 超音波がマイクに届くまでの時間は、RAWの値が500を超えるくらいを閾値にして検出すると、おおよそそれっぽい値が取れそうな気がします。波形の振幅幅によって閾値に達する時間が変わりますが、正確な数字はETSのゼロクロスで補正できると思います。


 遅まきながら、先人たちが超音波風速計を作ったときの方法を確認してみたところ、アナログ回路で増幅とAM復調を行い、閾値を超えるタイミングをタイマで検出しているようです。
 タイマでパルス幅を検出するのであれば、ADCよりケタ違いに時間分解能が高いので、AM復調でも充分な分解能が有るようです。
 しかし、今回はすべての処理をデジタルで行っているので、ADCの時間分解能がそのまま分解能になってしまいます。ETSは正弦波の立ち上がりには使えないので、単純なAM復調では処理できません。ハードウェア楽な分、ソフトウェアで苦労しているといえます。
 某社が作っている自衛隊向け無線機もソフトウェア無線化されており、機材の低価格化等を行っているようですが、ソフトウェア開発は大変だろうなぁ。ま、超音波はRFとくらべて周波数が5,6桁低いので、こっちは比べるまでもなくかなり楽なんでしょうが。

***追記
 

 3枚目の図の階段グラフを作ってみた。こっちのほうが実時間サンプリング(RTS)と等価時間サンプリング(ETS)の差がわかりやすい。
 RTSの分解能は1.556...マイクロ秒、ETSの分解能は0.111...マイクロ秒。風速換算でRTSが1.3m/s、ETSが0.088m/s程度となる。

*** 追記


 今更になってデータのとり間違いに気がつくなど。。。
 一番上の画像の波形の立ち上がりは、マイクの立ち上がりじゃなくて、FIRフィルタの立ち上がりである。ETSを行う上で波形が安定するまで(1.5msecくらい)待ってからADCを開始していたのを忘れていた。
 ということで、正しいマイクの立ち上がりはこの画像。青がADCの値で右軸のが電圧。赤がFIRを通した後。FIRの遅れは補正済み。
 ADC直後の生データは小さなノイズが乗っていて、FIRでだいぶ消えている。図らずもバンドパスフィルタの動作確認をしてしまった。

 FIRを通した後の波形は安定時で30000くらいだが、立ち上がりでは1フェーズあたり2000くらいのペースで15-20フェーズくらいかけてゆっくりと立ち上がってる。しかし風が当たれば波の高さが変わるから、特定の閾値で到達時間を測るのは無理そう。


 前回も少し触れたが、気温が30℃ほど変化すると1位相変化する。例えば25℃と-7℃では1位相変化し、25℃と-35℃では2位相変化する(センサ間150mmの場合)。北海道においては、-35℃というのはほぼないが、-7℃くらいはよくあるし、-21℃あたりも無くはない。位相差のみで音速を計算しようとすると大きな気温の変化に対応できないため、位相差以外で音速の変化を計測できないかと思ったわけだが、波形の立ち上がりを見る限り、結構大変そうだ。
 とりあえず、STMのADCにサーミスタでもつないで外部の温度を測って、その上で細かいところは位相差で計測、という感じになるかな。外部の温度を5℃程度の精度で計測できれば、位相差から音速を測り、音速から気温を求めることで、もう少し細かい気温が把握できるはず。どうせ風速計を作るなら温度センサを内蔵した気圧センサとか付けたほうが良いかも。でもそうすると湿度も測りたくなるという罠。まぁ多機能化はのちのち。

0 件のコメント:

コメントを投稿