2017年6月16日金曜日

小ネタ:超音波風速計向けのADC


 STM32F4を使った超音波風速計のために、矩形波出力やADCのタイミングを合せたりしていました。たぶん6ch(3軸双方向)の生データは取れるようになったはずです。相変わらず1つのチャンネルはゲインが低いですが。このまえ秋月で買い物した時に超音波TRも買っとけばよかったな。。

 上のグラフは40kHzのパルスを出した時のADC波形です。縦軸は電圧、横軸は時間(マイクロ秒)です。サンプリングレートは1.5Mspsで、2000サンプルなので1.33...msecの期間です。矩形波は時間0から20パルス出しており、0.5msecの期間です。
 おおよそ気温と風速が安定した状態で、6回ほど試してみましたが、位相はかなり一致していました。

 開始時点で1.65Vくらいで、0.2msecあたりで1.58Vあたりまで落ち込んでいるのは、分圧抵抗のインピーダンスに対して、入力インピーダンスが低いためだと思われます。分圧抵抗が47k2個なので、マイコンの吸い込みは490k(1.575V時)くらいでしょうか。

 0usecから450usecあたりまで、下側にノイズが出てます。また、500usecあたりにも上側にノイズが出てます。80kHzや40kHzなら矩形波がそのままアナログラインに入ってるとわかりますが、20kHzってどういうことでしょうか。

 ノイズはだいたい20kHzなので、AD変換のタイミングは正しそうです。しかし、超音波の波形は微妙に40kHzとずれているのが気になります。おそらくADCの変換タイミングのジッターではないと思うんですが。AC結合のキャパシタや分圧抵抗で発振回路みたいになって位相ズレが起きてるのかもしれません。だとしたらマズイ。


 AD変換は12bitですが、レジスタ的には16bitなので、2000サンプルだと4KiBになります。前回の超音波風速計はSTM32F103CBTで、RAMは20KiBしかありませんでした。一方、今回はSTM32F405RGTで、RAMは192KiBあります。ねむいさんの教えに従い、64KiBはスタックに当てていますが、それでも128KiBあります。約6倍ですね。かなり余裕あります。
 FreeRTOSのスタックってどこから取られてるのかな。ヒープ領域っぽいけど、そうすると64KiBのスタックはがら空きですね。まぁ使わないよりは多少なりとも使われてる方が無駄が少なくて良いのだろうけども。


 なんか位相ズレがヤバそうな感じがして、超音波風速計としての精度がとても怪しいところですが、どうなることやら。


 相変わらずアナログ回路は最小を目指していて、今回はマイコンボードが大きくなっていながら、ユニバーサル基板はC型で収まってます(前回はB型 / 今回は液晶とか温度センサとか載せる余裕は無いですけども)。
 送信機と受信機のAC結合に1632のチプコンが1個ずつ、受信機の電圧レベルの調整に同サイズのチップ抵抗が2個、ということで、1chあたり受動素子は1632サイズが4個、能動素子が0個、という超お手軽回路です。
 受信素子は片側をGNDに落とし、もう片側をAC結合してからマイコンに接続、マイコン側に分圧抵抗を入れてますが、片側に分圧抵抗、もう片側はマイコンに直結、という構成のほうがよかったかも。これなら受信側にCL負荷が増えることもないし。
 ということで次作る時はそういう回路にしてみようかな。今の基板を改修するのはかなり大変。でもコネクタの手持ちが少ないので、あんまり無闇矢鱈と試せないのよね。ま、モノタロウで売ってるのは確認済みなので、イザとなれば買い足せるのでマシですが。

 受動素子限定縛りはなんとかしたいなぁ。とはいえ基板を発注するようなモノでもないしなぁ。ムラタあたりの素子が入手できるようになれば、アナログ回路ちゃんと作り込んで、1素子で送受信して小型化、とかいろいろできるんだけども。

0 件のコメント:

コメントを投稿