昨日、MEMSマイクのPDM波形の生データをパソコンの上で眺めながら「デシメーションフィルタ」無しには「音」らしい波形は見えないな~と実感。予想どおり。さもありなんとPDM波形をI2Sバス波形に変換するためのデバイス ADAU7002を購入済。今回は、ADAU7002にMEMSマイクを接続してそれらしく?動作しているところまでを実験。
※「部品屋根性」投稿順Indexはこちら
PDM(パルス密度変調)波形を自力で処理してPCM化するところは信号処理のお勉強の課題としてとっておき?今回取り上げさせていただくのは、そこのところを処理してくれるデバイスです。Analog Devices社の以下のIC。
ADAU7002, ステレオPDMからI2SまたはTDMへの変換IC
このチップ、WLSCP(ウエハ・レベル・チップ・スケール・パッケージ)です。半導体屋の皆さまにはおなじみ、チップ(カリフォルニア人はダイと呼び、テキサス人はバーと呼ぶ)そのものの大きさのパッケージであります。小さ。
とても自力で半田付けなど不可能なので、例によってDIPの足になるブレークアウト・ボード化したモジュールを購入してあります(例によって秋月通商殿。)
ブレッドボード上でMEMSマイクにADAU7002を接続したところが以下です。上から接続しているジャンパ線はクロックの入力と波形の観察用。
左側に見える表面に穴の開いたMEMSマイクは、シリーズの中では最大のパッケージサイズを誇る?品種です。右のADAU7002と比べると超巨大に見えます。といってもMEMSマイクも0405サイズです。最近のMEMSマイクは数分の1くらいの大きさになっているようなので、それと組み合わせると非常にコンパクトに回路が構成できることが分かります。
なお、音声を扱うマイコンやSoCの多くにPDM/I2Sインタフェースが集積されている現状からすると、ADAU7002のような単体のインタフェースチップが現況どのくらい使われているのかは分かりませぬ。
接続そのものは非常に簡単です。MEMSマイクとは2端子を接続。
-
- PDM_CLK
- PDM_DAT
ホストのI2Sバス(もしくはTDM、時分割多重化も選択可能)とは、以下の3端子を接続です。
-
- BCLK
- LRCLK
- SDATA
ホスト側からBCLKとLRCLKという2つのクロックを与えるのですが、LRCLKという方がその名のとおり、ステレオのLとRの期間を示すクロックであり、1回のL/R期間にそれぞれ1個の20ビットPCMデータがSDATAにシリアル出力される仕組みです。そのときBCLKというクロックはLRCLKの最低64倍のクロックレートでなければならない、という規定です。BCLKは最低64倍から512倍まで64のの倍数で可能。ダウンサンプリング比は64固定、ということみたいです。
ADAU7002は、LRCLKの64倍のクロックを生成してMEMSマイクのPDM_CLKに出力する、とあります。64倍のBCLKであれば、BCLKの周波数とPCM_CLKの周波数は一致するはずです。128倍以上のBCLKを与えた場合はBCLKより遅いPCM_CLKとなるのでしょう。
ADAU7002へ与える実験用のクロック
今回は単体のADAU7002で「動いている」ことを確かめる程度が目標。いつものようにDigilent Analog Discovery2を取り出してきて、電源3.3Vと、BLCKとLRCLKを作って与えます。
BCLKについては、1024kHz(64で割りやすいから)とし、かつ位相を反転(180度)しました。データシートみるとBCLKの立下りに同期してLRCLKが変化していたためです。
LRCLKについては、16kHz(64倍すると1024kHz)としました。そして、波形生成の2つのチャネルを Auto synchronization に設定。以下のようなクロック波形がADAU7002に与えられます。
出力SDATAをオシロで観察
電源とLRCLK, BCLKを与えたところでADAU7002の出力SDATA(黄色)と、ADAU7002が生成してMEMSマイクへ送るPDM_CLK(青)をオシロで観察してみます。
PDM_CLKは予定どおり1MHz(正確には1.024MHzのはず)が出力されています。SDATAは、シリアルのPCMデータだ、と言われてばそうも見えなくもない、という程度の波形。オシロでは把握しきれんな~
ロジアナ機能でI2Sバスとして観察
そんなときにもAnalog Discovery2 は活躍します。アナログと言いつつ、結構充実のロジアナ機能。以下のようにちゃんとI2Sバスのデコード表示などもサポートしています。
SelectにLRCLK端子、ClockにBCLK端子、DataにSDATA端子を設定してデコードさせるとこんな感じ。
一応、I2Sバスの信号として認識されているみたい。本当に音声をエンコードしたPCMになっているのかどうかはこれだけでは分からないけれど。
まあI2Sバスの信号として扱えるみたいなので、次は、I2SバスIFのあるマイコンでPCMデータ列を読み取ってみますか。それとも再びラズパイPicoのPIOを駆使してI2Sバスの読み取りをやってみますか。まだまだ先は長いな。