2018年12月12日水曜日

超音波風向風速計

 風向風速の計測はある程度メドがついたので、初期化周りに手を出してる。

 とりあえず、4種類の周波数をだして位相を計測してみた。

***
ch: 1
  0 39.772727 kHz  +48.38 deg -14.0 dB
  1 40.384617 kHz +109.09 deg -12.7 dB
  2 41.015625 kHz +168.91 deg -12.2 dB
  3 41.666668 kHz -125.06 deg -12.8 dB
ch: 2
  0 39.772727 kHz  +69.02 deg -16.5 dB
  1 40.384617 kHz +137.11 deg -15.3 dB
  2 41.015625 kHz -161.83 deg -14.8 dB
  3 41.666668 kHz  -84.12 deg -14.8 dB
ch: 3
  0 39.772727 kHz  +22.40 deg -14.4 dB
  1 40.384617 kHz  +77.55 deg -13.3 dB
  2 41.015625 kHz +141.26 deg -12.8 dB
  3 41.666668 kHz -158.72 deg -13.8 dB
ch: 4
  0 39.772727 kHz  -90.43 deg -13.5 dB
  1 40.384617 kHz  -35.55 deg -12.0 dB
  2 41.015625 kHz  +19.98 deg -11.4 dB
  3 41.666668 kHz  +67.97 deg -12.2 dB
ch: 5
  0 39.772727 kHz  +17.68 deg -13.5 dB
  1 40.384617 kHz  +82.63 deg -12.6 dB
  2 41.015625 kHz +135.29 deg -11.9 dB
  3 41.666668 kHz -170.44 deg -14.3 dB
ch: 6
  0 39.772727 kHz  +59.73 deg -14.0 dB
  1 40.384617 kHz +119.71 deg -12.5 dB
  2 41.015625 kHz +177.73 deg -11.5 dB
  3 41.666668 kHz -126.82 deg -11.7 dB
***

 周波数は39.77kHz、40.38kHz、41.01kHz、41.67kHzの4種類。パルス周波数とFFT分解能が整数比になるのは、40kHz前後ではこの4つの組み合わせだけ。広げればいくつかは増やせるが、とりあえず今は4個あれば十分だろう。


 周波数とゲインをグラフにするとこんな感じ。中心周波数は40.7kHzから41.0kHzのあたりにありそうだ。パルス圧縮で超音波レーダーを作ってたころも、中心周波数が40kHzより高いんじゃないかと思っていたが、実際にそのようだ。数字としてはたいしたことないけど、dB表示だから、40kHzで13dB、40.6kHzで12dBとすると、0.6kHz違うだけで3割弱の差になる。結構でかい。

 ch2のゲインが低いのは、中心周波数が上に寄っているから、というのも原因の一つ。もっとも、一番ゲインが高そうなあたりでもほかの物よりは低いのだが。
 もしかしたら素子のセラミックが薄いのかもしれない。そのために圧電効果が低くなり、ゲインが低く、また軽いために共振周波数が高くなっている、というシナリオは有り得そうだ。


 とりあえず、周波数と位相のデータは取れたから、あとはここから正しそうな数値を取り出す必要がある。
 この位相は送信開始から1msec経ったところでの位相角度で、送信開始時は常に0度から開始している。ただし、パルスは正弦波ではなく、矩形波で近似しているから、それは誤差になるかもしれない。

 数値データは2個4組で1ch分だから、これくらいなら簡単に扱える。
 PC上のGCCでいろいろ試せるので、いちいちマイコンに焼かなくていいのは楽。


追記



 各周波数で、0の時点での位相をch1の計測値に合わせるような波形を書いてみた。一部を拡大したのが下の図。
 -0.27msecあたりですべての波形の位相が揃う。ほかにも、-1.85msecとか1.3msecあたりとかにも位相が揃う位置はある。
 ADCは送信開始から1msec遅れた場所から計測を開始しているから、相対-0.27msecは絶対0.73msecで位相が揃っている、ということになる。

 ところで、このデータ、どういう解釈をすればいいんだろうか。
 伝搬遅延は0.43msec程度だから、0.73msecでは0.3msecほど計算が合わない。


 自分でも何をやりたかったかわからなくなったグラフ。
いちおう、上のグラフとは相関してるから、根本的な考え方は間違っていないはず。最終的にどういうふうになるのかはわからないけど。


 もうちょっと、実際のものをうまく取り込んだモデルを考える必要がありそうだ。考えがまとまらない。でっかいホワイトボードほしい。


追記

 想像上のタイミングを図にしてみた。


 最初の400usecが伝搬遅延、送信開始から1msec後からの1msecがサンプリング期間。
 伝搬遅延400usecって気温で摂氏115度くらいあるけど。実際は460usec程度か。これなら摂氏20度くらいと現実的。まぁココはイメージ図ということで。

 この図により、伝搬遅延が400usecならサンプリング期間の一番最初のサンプルは送信開始から600usec、ということになる。
 実際は460usecとすると、540usec後の位相が得られるはず。
 つまり、サンプリングした位相から540usec前ですべての周波数の位相がゼロになるはず。

 ただ、実際にサンプリングした位相を重ねてみると、250usec前あたりでゼロになる(というのは、上の方の図の通り)。

 計算した位相が間違ってるのか、とも思ったけど、ADCの波形を見て人間が角度に変換する限りでは、計算値と大きくずれているということはない。
 あとはどんな要因があるかなぁ。例えば、グラフに波形を書いたときにSINとCOSを間違えていた場合。この場合、ズレはせいぜい6usec程度だから、今のところは全く問題ない。送信パルスの位相が180度ずれていても、同様に12usec程度の誤差にしかならないから、今の数百usecのズレからすれば誤差の範囲。
 考えられるとすると、ADCの遅延が1msecに設定できてない、とか? でもプリスケーラ値をミスってたら整数倍(2倍とか)のズレになるから、1msecを間違うと500usecか2msecになるわけで、今回の300usecくらいのズレにはならないはずなんだよなぁ。
 もしかしたら、低レベル部分のサンプリング前の設定で変なバグが有るか? でも168MHzのコアで300usecを使うには5万クロックくらいかかるから、そんなに長い処理に心当たりはない。
 位相を複数回計測しても同じような値になるから、少なくとも遅延量がランダムに変化している、ということはない。ということは、遅延タイマの設定は問題ないはず。そもそもこいつがバグってたら風速の計測とかも動くわけないし。

 うーむ、謎い。
 今回、受信素子とADCが直結していて、ADCの入力インピーダンスに比べて素子の出力インピーダンスは高いはずだから、ADCが動いているときは波形の振幅が変化するはず。ということは、パルスを出し始めてからADCが正しく1msec後に開始しているか、というのは、オシロで見ればわかるはず。
 とりあえず、そのあたりは明日やろう。
 それでも原因がわからないなら、初期化周りは一旦放置して、別の部分(リファクタリングとかUI作成とか)を先にやろうっと。


追記:2018/12/13

 オシロで見てみた。


 ch1が送信パルス、ch2が受信波形。ch1はDC、ch2はACで結合。
 受信波形のノイズが凄まじいけど、ch1からのノイズだと思う。なんとなくこのオシロはch間のアイソレートが悪い。まぁ、プロービングもひどいし、安物だし。

 思ったほどch2が落ちてない。が、心の目で見れば1msecあたりで若干下がってる気がするので、ADCサンプリング開始タイミングは問題なさそうな気がする。
 伝搬遅れも500usec程度なので、おおよそ予想通りという感じ。
 ADC遅延を500usec程度にすれば波形の立ち上がりが見えるかな。

 あと、上で「サンプリング期間は1msec」と書いたが、これは誤りだった。実際にはサンプリングレートは1.2727273Mspsから1.3333333Mspsで1024サンプルなので、768usecから805usec程度の幅になる。

 そもそも全く考え違いしてる気がしてきたなぁ。


追記
 計測値を8個平均しても似たような位置に解が出る。
 そもそも位相値をてきとーに設定した場合は解が出ないから、少なくとも間違った値を見ているわけではないんだろう。
 そもそも位相位置の絶対量がわかればいいんだから、今のままでも問題ない気もする。けどやはり気持ち悪い。

 あと、温度センサが完全にお亡くなりになった。
 あたらしいセンサが届くまで持たなかったかぁ。
 どーしようか。サーミスタとか1wireの温度センサは手持ちにあるが、どちらも精度は良くないし、新しい回路を増やしてソースコードもいろいろ書かなきゃいけない。ちょっと面倒。どうしたもんか。

 とりあえず絶対量の推定は中断して、別のところをやろうかなぁ。

0 件のコメント:

コメントを投稿