2016年7月8日金曜日

超音波

STM32F1 TIM1で40kHzのPWMを作ってみた。TIM1は逆位相波を出力できるので、だいたい6Vppくらいのパルスを作れてる予定。オシロではGND基準の1ピンしか見てないからVDDの3.3Vあたりだけど。
FreeRTOSのタスクで5mSくらいPWMを出した後に500mSディレイという感じで出力。




超音波の送信と受信はだいたい18-20cmくらい離して向かい合わせでおいてある。20cmで音速だと600us近く。送信(赤)と受信(黄)の違いはだいたいそれくらいだと思う。
下の画像は水色が無風時の位相、黄色はR側からTに向かって軽く息を吹いてる。だいたい1usくらい遅れてる。STM32F1は確か2Mspsが最高だから、分解能0.5息速度くらい。

STM32F4だと2.4Mspsが最高で、並列だとその倍くらいかな?。やはり超音波風速計を作るならF4が必要かも、と思いつつ、僕はF4を使ったことがないので、今からF4を始めるくらいならF3を使ったほうがいいかもしれない。まぁどうせならPSoCのほうがいいような気もするが。
どっちにしろアナログ回路はある程度必要だから、いっそのこと数MSPSでサンプリングできるADCを買ったほうが早いかもしれない。


使用するオペアンプについて
とりあえずざっとTRの位置を変えた感じでは、最小で50mVppくらいが出てきてる。最大100倍くらいのゲインがあれば十分かも。これくらいならオペアンプ1段で十分だと思う。4回路オペアンプなら4ch受けれる。超音波距離計の回路では数千倍-数万倍くらいに増幅している例もあるみたいだけど、それは往復で10mくらいを飛ばすからであって、風速計みたいな最大でも40-50cm程度ならそんなにゲインは必要ない。
そもそもTR間が15cmくらいなら増幅無しでADCに繋いでもいいんじゃないかってくらいの電圧がある。インピーダンス高すぎてダメだろうけども、試す価値はあるかも。

STM32F1のリソースだと、出力が3系等、受信が8系統くらいまでかな。
TR間の距離を予めキャリブレーションして、音速は別のセンサで温度を計測する、みたいな構成なら送受信1対1で3セットあれば足りるかもしれない。おそらく市販の超音波風速計はこの構成だと思う。常識的な温度範囲なら熱の変形とかはあまり気にならないだろうし。


とりあえず、まずは送受信1対1で位相差を計測するところから始めるかな。位相差をF1の最大性能で測るとなると、F1のペリフェラルをキッチリ設定してやる必要がある。まずそこが難関。

0 件のコメント:

コメントを投稿