ラベル PDM の投稿を表示しています。 すべての投稿を表示
ラベル PDM の投稿を表示しています。 すべての投稿を表示

2017年9月17日日曜日

ESP32のPDMでクリアーなサウンドを(希望)

ESP32のPDM出力、波形がもの凄く崩れてます。ローパスフィルタ通して音を聞くともの凄くツブれた音になります。

Facebookでトランジスタ1個で波形整形すると良い、とアドバイスをいただいたのですが、アナログスキルがないので、部品頼みで整形しました(手元のオペアンプは遅すぎてコンパレータとして働いてくれませんでした)。

昔懐かしいシュミットトリガSN74HC14を使います。私が子供の頃TTLのSN74N/Aシリーズは5v専用だったんですが現在のHCシリーズはCMOSなので電源電圧範囲が広く、それにあわせてスレッショルドが変わるので便利です。

接続はESP32から3.3vとGndとGPIO25,26をつなぎます。SN74HC14の使っていないピンは全部GNDに落として置きます(基本のお約束)。HC14はインバータなので2段にしています(あんまり意味ないんですが)。HC14の遅延は最大でも20nS程度なので、今回の用途では問題ありません(と断言したら怒られるかな)。


ESP32SN74HC14Amplifier
GPIO251
2-3
4R-IN
GPIO2613
11-12
10L-IN
3.3V14
GND1,7,9

出てきた波形はこちらです。黄色がGPIO出力、水色がシュミットで整形後です(プローブx10)。


上の表では省略していますが、SN74HC14の出力にはフィルタを通してからアンプに入れます。フィルタは基本的なCR型で、HC14の4ピン→220Ω→アンプ入力(6ピン→220Ω→アンプ入力)、アンプ入力とGNDの間に0.1μFのコンデンサを入れます。これで約8khzのローパスフィルタになります。

結果として、内蔵DACよりもかなり良い感じの音になります。

でも、無音時のホワイトノイズが消えてくれません。あと一歩です。

うーん、アナログはわからない……。ソースコードはこんな感じです。


2016年6月10日金曜日

デジタルマイクSPM0405HD4Hがデジタルで動いた!

このまま「またデジタルマイクが動かない」「やっぱりデジタルマイクが動かない」「まだまだデジタルマイクが動かない」と長編化するかと思われたデジタルシリコンマイク、ついに動きました!


■考察■

今までも動いていたけどノイズに埋もれてわからなかった、というのが真相だと思います。

動かなかったバージョンでは100-10000回のカウントを終えるとLoopを抜けていました。これはESP-WROOM-02にはWDTがついていて、約1秒間loop()から抜けないとリセットがかかるのです。

何となくloop()抜けてもすぐに帰ってくるんだろ、ぐらいに考えていたんですが、これが想定以上に大きくて、抜けるたびに処理が止まってノイズとなっていました。loopから抜けるのをやめてESP.wtdFeed()にしたところ、かすかなノイズは入りますがマイクの前の音声がちゃんとADCから出力されるようになりました。

■ソース■

loopの値は100(サンプリング周波数10khz)ぐらいが良いようで、10(100khz)だとDACに出力するためのブランクの比率が著しいノイズとなり1000(1khz)にすると割れて何が何だか、という感じでした。また、countとして++だけでなく--も入れてみたところ、音量がかなり大きくなりました。100の場合で値は-100〜+100まで振れるので、精度は8bit、速度は10khzということになります。





お騒がせしました&ありがとうございました>電子工作部各位殿

もうちょっと高速のCPUが使えれば、DAC出力その他のための中断を回避できるので、もっといい音になると思います。現状で160Mhzクロックの32bit CPUなので、これより上のCPUを用意するよりはFPGAで作るべきものだと思います。約400円で専用チップ売ってるんですけどねw

ちなみにマイクの性能には「14bit相当・10khz」とのこと。うーん、どういう演算処理をすればそういう信号が得られるのでしょう。思いついたらまた試してみます。

■使用部品紹介という名のCM■

今回の実験では、
同社サイトより


同社サイトより

同社サイトより

を使用しました。

マイクモジュールとアンプへの3v3はBoard1搭載の安定化電源から供給しています。何かと電源にシビアなESPですが、(プログラムのバグ以外では)安定して動作しています。

タフな電源にしといてよかった…と設計者は胸をなでおろすのであった(完)。