ソナー開発予備実験 「PICマイコンによる音の制御2~誤差率300%→3%への道~」
現在ソナー開発では、異なる3つの場所からそれぞれ異なる周波数の音波を出力しマイクで測定することで、マイクの位置を三次元的に決定するプログラムの開発を目指しています。 まず前回の課題だった、「3つのスピーカーから同時に異なる周波数の音を発生させる」方法は解決しました(八重樫製作所参照)。しかし、LabVIEWを用いてスピーカーの音を測定したところ、PICマイコンにプログラミングした周波数と実際に測定した周波数が大きく異なっていました。 そこで、今回はPICマイコンをより正確に制御するためのトラブルシューティングを行いました。
課題
PICマイコンにプログラミングした周波数と、実際にLabVIEWで測定した周波数の誤差の原因を調べ解決する。
※開始時の誤差率:300%以上
①プロミングで定義した関数のミス
これは私(八重樫和之)の組んだプログラミングの中にミスがあった。 プログラミングの中で入力した周波数から信号の出力する間隔を計算する部分があるが、構造化する際に余計に2で割っていた部分があった。 大野科学者の指摘で気づいた。
②PICマイコンと発振子の定義値の違いによる誤作動
今回使用しているPICマイコンは外部から発振子を繋ぐタイプである。したがって、PICマイコンに発振子の周波数を
今回使用した発振子の周波数は20[MHz]。
これに対してプログラミングでは周波数の基準を10[MHz]で定義していた。
このズレによって、プログラミングした値の2倍の長さの信号が出力されていた。
そこでプログラミング部分も20[MHz]に修正した。
※この時点で誤差率:40%
③PICマイコンの仕様による誤作動 ~誤差率5%未満へ~
①、②の解決をしてもなお、理論値と実測値のズレは大きかった。
そこでPICマイコンと発振子の仕様書の周波数範囲に着目した。
すると、今回使用しているPICマイコン(16F84)の周波数範囲は10[MHz]までであった。
周波数範囲の最大値が10[MHz]のPICマイコンに対して、20[MHz]の発振子を使用していたことに気づいた。これが誤作動の原因だと考えられた。そこでPICマイコンの周波数定義、発振子のどちらも10[MHz]に変更した。
※この時点で誤差率:5%
④ソフトウェアによる、ハードウェアの誤差のカバー
ここまでの段階で誤差率を5%まで引き下げることができた。
最後に、ハードウェアの誤差をソフトウェア、すなわちプログラミングによりカバーすることにした。
具体的には、誤差率である5%だけPICマイコンの周波数の定義をずらした。
10[MHz]→10.5{MHz}のように、誤差が出た分だけPICマイコンの中の時間の基準をずらし、誤差率を下げた。
最終的にプログラミングによる理論値の周波数とLabVIEWで測定した周波数との誤差率は3%となった。この程度の誤差であれば今後の実験に支障はないと考えられる。
※この時点で誤差率:5%
次回はいよいよ三箇所からの異なる周波数の音から三次元でのマイクの位置の特定するプログラム開発を目指します。