2017年2月19日日曜日

超音波風速計 異常を探せ


 位相ログに異常値が残っている場所と、正常値の場所の波形ログです。重なって見えづらいですが、波形には特に目で見ておかしいと言うほどの違いはありません。

 当初の予想では、かなりインピーダンスの高いであろうアナログ系の配線に何らかのノイズが入ったのではないかと思っていたので、この結果は予想外です。ノイズであれば回りにノイズ源になるようなものを置かないとか、いろいろ言い訳ができるんですが。


 位相の異常値も、正常値との差が1.25とか25とかであれば位相位置の計算に問題が有るんだろうな、という予想ができるんですが、せいぜい6セットの異常値からはそれぞれの関連性はわかりませんでした。
 とはいえ、波形には問題がない、とわかったのは収穫でもあります。というのも、前回、位相ログは取ったけど波形ログは取っていない時に、異常値が30個前後出ていました。この時のデータを見直せば何かわかることがあるかもしれません。
 それと、マイコン内で行っている計算も、プログラムは単なるC言語の演算ですから、関係ありそうなソースコードをPC向けにコンパイルして今回の波形ログを読ませて異常値が出るか、出た場合は計算過程でどういう値になっているか、といったことからもいろいろと分かるはずです。

 ということで、ノイズの原因をしらべるにはもう少し時間がかかりそう。


***追記

 不具合が発生して喜ぶというのも変な話ですね。上側が位相ログから抜き出したもの、下側が波形ログからPC上で計算した位相です。
 最初、プログラムミスで右側の値の計算を間違っていました。当然、値は異常値ではなく、正常値に近いモノが出てくるわけで、こりゃぁマイコン側の深いところの問題かなぁ、とか思ったわけです。でもミスに気がついて直すとマイコン上で計算したものと同様の異常値が出てきて安心しました。これならマイコンやコンパイラの問題ではなく、単なる計算ミスによる可能性が大きくなります。ということで、簡単にチェックができるので、不具合が再現してくれて一安心。
 マイコン側のメモリの関係で、配列の処理とかが結構面倒ですが、それでも再現性のない不具合よりは簡単です。さぁ、間違い探しの時間だ!

***追記

左の波形は、右の波形の一部を拡大したものになります。右の波形は一見すると綺麗な正弦波ですが、細かく見ていくと若干ノイズが乗っていたりします。ちょうどゼロクロスの部分で暴れると、位相検出でエラーとなるようです。
 波形の図を出して「特におかしい所はない」と言いながら、舌の根も乾かぬうちにこのような原因が見つかってしまいました。

 このような波形になってしまうのは、等価時間サンプリングを使っている以上は仕方ないことでもあります。解決策としては、等価時間サンプリング後からゼロクロス検出前の間でローパスフィルタを通す事や、一定間隔未満での検出は無効にする等、他にも色々考えられます。
 昨日?一昨日?あたりに取ったログでは2時間で30前後の異常値が発生していたので、それなりに頻度の高いエラーといえると思います。異常値があれば無視する、といった方法は取らないのが無難だと思います。
 またゼロクロス検出はマイコン内で1chあたり450回行い、1軸あたり2回、3軸で6回行われます。3軸10Hzだと毎秒1万3500回ほど計算する必要があるので、充分に計算負荷の軽い処理であることも求められます。
 さてどうしようか。

0 件のコメント:

コメントを投稿