風向風速の計測はある程度メドがついたので、初期化周りに手を出してる。
とりあえず、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 件のコメント:
コメントを投稿