【MEMSマイクアレイ】 データ収集システムの構成

FPGA

システムの構成

多数のマイクロフォンを並べた「マイクロフォンアレイ」のデータを収集するシステムを紹介します。元々は,「多数のスピーカやマイクロフォンをびっしり並べたものを使うと,面白いことができそうだ」ということでスタートした一連の研究のために必要になりました。

この研究を実際に動くハードウェアを作って実験的に進めることを考えます。一般的なアナログのマイクロフォンと電子回路を使う場合は,数十個,数百個のマイクロフォンの1つ1つの出力を増幅回路に接続し,AD変換してデータを集めることになります。このようなアナログ回路を使う構成では,マイクロフォンの個数が増えるとコスト的に大変です。

そこで,MEMSMicro Electro Mechanical System)技術を用いるマイクロフォン(SPM0405)に注目しました。この製品は,機械的な構成要素であるマイクロフォン,増幅回路,アナログ信号を1ビット信号に変換するΔΣ変調器の全てを,シリコン基板上に一体化して形成したものです。(秋月電子通商で購入しました。)

このデジタル出力のMEMSマイクを使えば,外付けのアナログ回路を一切使わないフルデジタルの処理が可能になります。また,デジタル回路を入出力ピン数の多いFPGAField Programmable Gate Array)で受信して処理することで,部品数が減り,回路の変更も容易になります。

今回紹介するのは,FPGAはデータをバイト単位で転送するシンプルな処理しかしていません。実は,1ビット信号をマルチビット信号に変換するSinc3フィルタをFPGA内部に実装したものも試作しました。しかし回路規模が大きくなってしまい,処理するマイクロフォンの個数が30個程度でハードウェアがFPGAに収まり切らなくなりました。このハードウェアについては別の機会に紹介します。

注意:

<注意を読む>

この投稿は,未完成のシステムの開発過程の備忘録として書かれたものです。紹介されているコードにはバグや冗長な部分が含まれています。このコードを参考にする場合は注意をお願いします。また,解説の文章などに誤りや意味不明の箇所が含まれていることにも配慮してください。

<閉じる>

データ収集システムのハードウェアは,図のように3つの部分で構成されています。

アレイスピーカ駆動システム
  • FPGA
    MEMSマイクの出力ピンからのデータをUSBインタフェースFT232Hに中継する。Lattice Semiconductor社のFPGA,MachXO2を搭載した評価基板MachXO2ブレークアウトボードを使用している。
  • USBインタフェース
    FTDI社のUSBインタフェースICであるFT232Hを搭載したAdafruit社の FT232H Breakout基板を使用する。
  • PC
    FT232Hから送られてくるデータの受信,1ビット信号からマルチビット形式の音響データへの変換,保存などの処理を実行する。

動作の概要

現在,システムは最大64個までのMEMSマイクロフォンを処理できます。処理できるマイクロフォンの個数は,この2倍,128まで拡張できます。ただし,そのためにはFPGAと波形復元の処理を変更する必要があります。

マイクロフォン出力のサンプリング周波数は3MHzに固定されています。システムの動作は以下のようになっています。

  • FPGAによるMEMSマイク出力のサンプリングとインタフェース
    FPGAは,MEMSマイクとのインタフェース,データ送信のタイミングの調整,データ選択などを実行するハードウェアを構成する。
    FPGAは60MHzクロックを分周して得られた周波数3MHzのクロックでMEMSマイクの出力をサンプルする。1回のサンプル当たり最大64ビットまでのデータは,8個の8ビットレジスタにラッチ(保持)される。ラッチしたデータは,レジスタの番号順にFT232H内部のFIFOバッファに,60MHzのクロックに同期して出力される(Synchronous FIFOモード)。
  • FT232Hによるデータ送信
    FT232Hは,内蔵FIFOバッファのデータをUSBインタフェースを介してPCに送信する。またFT232H内部の発信回路が出力する60MHzのクロック信号をFPGAのクロック信号として供給する。
  • PCによるデータ受信
    PCはFT232Hを使ってFPGAと通信し,USBインタフェースで受信したデータを処理する。ソフトウェアは,データ受信部をC++コードにより,マルチビットデータの復元処理をMATLABコードにより,それぞれ作成した。

<続きを読む>

現在のシステムは,通信エラーによるデータの欠落や「ずれ」への対策は施されていません。通信エラーは必ず起こると考えるべきなので,いずれエラー対応の機能を組み込む必要があると考えています。

<閉じる>

コメント