2017年2月14日火曜日

超音波風速計

 ずーっと前からやりたくて、ちょこちょことやってたんだけど、また久しぶりに超音波風速計ネタ。

 試しにSTBee Miniで40kHzのPWMを作ってADCでサンプリング。PWMは位相が180度ずれた2chを出力し、6.6Vppを超音波スピーカーに入力。受信は超音波マイクからADCにダイレクトで接続。


 1枚目の画像は4回のサンプリングの波形、2枚目は、1枚目の最初の方を拡大した図。PWM生成のバグというか不具合というかで位相が逆になってしまっているが、正確に180度ずれているだけで、余分なずれは見られない。
 3枚目は、先の4計測と、マイク側とスピーカー側から息を吹いた、計6回分の波形。若干のオフセットが有るが、無風状態では完全に位相差がゼロで、息を吹いたときは位相差として計測できているのがわかる。
 縦軸は電圧(出力値*3.3・4096で計算)、横軸は時間で単位はマイクロ秒。


 先に、「マイクからADCにダイレクトで」と書いたが、本来はオペアンプで増幅してからADCに入れようと思っていた。しかし、手持ちのオペアンプでは帯域が足りないらしく、アッテネータにしかならなかった。しょうがないから試しにマイコンに直結したら、0.5Vppくらいでサンプリングできてしまった。
 送信もパスコンでACカップリングしただけの直結だし、受信もマイコンに直結だから、今回は能動的なアナログ回路は一切無い。実環境で使えるかはわからないが、風速数m/s程度ならデジタル回路オンリーでも意外となんとかなりそうな気がする。
 正直あんまり複雑な基板を作る気力がないので、てきとーに配線するだけでも動きそうな、アナログ回路レスな基板というのは結構魅力的。希望が出てきた。


 現在使っているハードウェアリソース:TIM2(PWMタイミング)、TIM3(ADCタイミング)、DMA1-1(ADC転送)、DMA1-2(PWM転送)、ADC1。
 TIMとDMAとGPIOでPWMを半ハードウェア的に作っているので、PWMチャンネル数は16までいける。スピーカー1個に2chを使うから最大8個まで。アナログ入力はGPIOAだけだと8chまで可能。GPIOは大量に使うが、SP8ch、MIC8chまでなら現在のリソースだけでいける。ただ超音波回りだけでGPIOを24本も使うと、他に自由に使えるのはUSB回りを除いた5本くらいしか残らない。まぁUSART1は競合しないから、もう一個マイコンを載せて表示とかはそっちに任せるのもありだが。スピーカーからIOを2本もらってくればCANバスが使えるので、長距離を引き回して表示するならそっちのほうが良いかな。


 とりあえず今のままでも簡易的な1次元の風速計は作れると思うので、それが動いたらさらに軸数を増やしてみる。単純な信号処理のテストならPCで動くし、いちいちマイコンに転送したりしなくていいので楽。

0 件のコメント:

コメントを投稿