クリーンな増幅マイクをアナログからデジタルに変換する方法は?


12

過去数日間、このプロジェクトに関連するいくつかの質問をしましたが、すべてをまとめることはできません。

エレクトレットマイクをオペアンプに接続し、arduinoマイクロコントローラーに出力しました。マイクロコントローラーのADCは、0〜5 vVの範囲を10ビット数(0〜1023)に変換します。

3種類のアンプチップを試しました:

  • LM386-オペアンプではないため、このチップはこの目的に適していないというフィードバックがあり、期待通りに正しく動作しませんでした。
  • LM358-作品
  • UA741-動作、LM358以上の増幅

私はこの回路図に正確に従いました(良好なゲインを得るために抵抗値を台無しにしたことを除く)。R5には50kオーム、R2には10オームを使用しました。 ここに画像の説明を入力してください

問題は、後者の2つのチップからの出力が「クリーン」ではないことです。ArduinoのanalogRead()は、マイクにノイズが出なくても、常にゼロ以外の値を読み取ります。ノイズを出すと読み取り値は正しく反応しますが、「ゼロ」値はゼロではありません。時々、「ゼロ」値がちらつきさえして、読み取り値を常にオフにします。うまくいけば、それは理にかなっています。

これを整理するのを手伝ってもらえますか?

同様に重要でない追加情報:私は最終的にこのようなものを作ろうとしています


C2が適切に配置されていると確信していますか?C2後のサイレントDC電圧とは何ですか?
マジェンコ

はい、C2があります。約2ボルトです。これが意味をなすかどうかはわかりません。ピン2と6、出力と反転入力の間のループに何らかの電流が閉じ込められている可能性がありますか?
シュバム

Arduino入力ピンからC2を切断した後のサイレントDC電圧はどうですか?
マジェンコ

C2が存在するということは、プリアンプの出力が内部で動作している2.5Vではなく、0V付近でスイングすることを意味します。
マジェンコ

もう1つ-プリアンプC2とArduino入力の間に少しショットキーダイオードを挿入することもできます-本当に気にしない負の電圧は捨ててください。もう1つやったことは、アナログ入力とグランドの間に別のコンデンサを追加して、信号を少し滑らかにすることでした。VUメーターのちらつきを少し少なくします。
マジェンコ

回答:


17

出力コンデンサを取り除きます。この回路はおそらくゼロ付近の信号を生成することを意図していたため、1/2 Vddオフセットをブロックするためにコンデンサがあります。ただし、マイクロコントローラーは1/2 Vddを中心とする信号を見たいので、コンデンサーを取り除いてください。

マイクロフォンには多くのゲインが必要です。エレクトレットは敏感な場合がありますが、それでも1000の電圧ゲインが必要な場合があります。回路のゲインはR5とR2の比率ですが、これはオペアンプで可能な範囲内でのみ機能します。

上記の値を使用すると、5000のゲインが得られます。これは、単一のオペアンプステージから取得しようとするよりもはるかに多くなります。オフセット電圧にこのゲインが乗算されるだけでなく、オペアンプは全周波数範囲にわたってそれを提供することができなくなります。1 MHzのゲイン帯域幅では、200 Hzを少し下回るゲインしか得られません。5000で増幅した後、1 mVの入力オフセットでも5 Vになります。

R2は、入力コンデンサの後のマイクから見たインピーダンスでもあります。これは、対象の最低周波数でのプルアップと入力コンデンサを備えたマイクのインピーダンスよりもいくらか大きくする必要があります。それには10Ωが小さすぎます。10kΩがより良い値です。

最初に30ほどのゲインで2つのステージを試して、それがあなたをどこに導くかを見てください。それは、フィードバックが機能するのに十分なヘッドルームを残して、合理的な周波数で処理できるゲインです。また、入力オフセット電圧がすべてのステージで累積しないように、2つのステージを容量結合する必要があります。

編集:回路を追加

昨夜、上記の返信を書いたとき、サーキットを描く時間がありませんでした。これを行う必要がある回路を次に示します。

これには約1000の電圧ゲインがあり、妥当なエレクトレットマイクには十分なはずです。私は少し多すぎるかもしれませんが、減衰を追加するのは簡単です。

トポロジーは回路とはかなり異なります。注意すべき最も重要なことは、1つの段階で全体のゲインを生成しようとしないことです。各ステージには約31のゲインがあります。これにより、フィードバック用の最大オーディオ周波数20 kHzで十分なゲインヘッドルームが得られます。 10 MHzの積。ほとんどの場合、制限要因はマイクです。

前に言ったこととは異なり、オフセット電圧がゲインとともに蓄積するのを防ぐために、2つのステージを容量結合する必要はありません。これは、この回路では、各ステージのDCゲインが1のみであるため、最終オフセットはオペアンプオフセットの2倍しかないためです。これらのオペアンプのオフセットはわずか500 µVであるため、オペアンプによる最終オフセットはわずか1 mVです。R3とR4の不一致により、さらに多くのエラーが発生します。いずれにせよ、出力DCは電源の1/2に十分近いため、意味のある方法でA / D範囲に食い込むことはありません。

ステージごとに1のDCゲインは、フィードバック分周器のパスをグランドに容量結合することにより実現されます。コンデンサはDCをブロックするため、各ステージはDCの単一フォロワーにすぎません。コンデンサ(1段目のC3)のインピーダンスが下側の分圧抵抗(1段目のR7)に比べて小さくなると、完全なACゲインが実現します。これは約16 Hzで発生し始めます。このアプローチの1つの欠点は、整定する時定数がR7だけでなくC3倍のR7 + R5であることです。この回路は、オンになってから安定するまでに数秒かかります。


出力からキャップを取り出すと、arduinoは約3ボルトの入力を認識します。すみませんが、オフセット電圧の意味を説明できますか?R2が10kオームで1000のゲインを得るには、R5に10Mオームが必要ですか?これ本気か?ゲインは、R5とR2の比率ですか?
シュバム

@Shubham:あなたの回路は、オペアンプのオフセット電圧に5000を掛けようとしているので、出力が1つのレールに固定されていることは驚くことではありません。完璧なオペアンプはありません。入力オフセット電圧は、出力がミッドレンジのときの2つの入力間の電圧です。理論的には、2つの入力は等しくなります。入力オフセット電圧の仕様は、この理想からどれだけ離れているかを示します。
オリンラスロップ

@Shubham:1つのステージですべてのゲインを生成しようとした場合、フィードバック抵抗に10 MOhmが必要になります。私が言ったように、それは悪い考えです。
オリンラスロップ

ここで多くのことを学び、すべての助けをありがとう。それぞれ30ゲインの2つのステージがあると、合計で900のゲインが得られますよね?私はLM358を使用してこれを試してみます(それは私が横たわっていることです)
-Shubham

ついにうまくいきました!その回路図をくれてありがとう!しかし、ADCの範囲は200程度しかありません。サイレントADCの値は中点(512)をわずかに上回りますが、マイクでどれだけノイズを発生させても、ADCの値は200を超えませんサイレント値。これを制限しているのは、おそらくキャップと抵抗のセットアップです。
シュバム

5

あなたが言うように、デジタル値は0〜1023になります。この範囲の中央は0ではなく、512(約2.5の電圧に対応)です。沈黙のために、このような範囲の中央付近に何かが見えるはずです。512である必要はありませんが、近いはずです。これは「DCオフセット」と呼ばれます。信号は上方にシフトされ、2.5 Vを中心としています。

2 Vを測定し、400前後のADC値を確認している場合、基本的には正常に機能しています。

音波は陰圧から陽圧になります。中心点が0で、信号が0〜1023の間でしか測定できない場合、負の圧力値(-1023)はカットオフされます。

また、ADCのノイズフロアにより、常に少し変動します。(そして、あなたがどんなに静かであっても、部屋には常にいくらかのオーディオノイズがあります。)


ああ、それは私が他の答えで見続けた「DCオフセット」を説明しています。DCオフセットを削除する方法はありますが、どこかにキャップを付けますか?
シュバム

@Shubham:あなた WANT DCオフセット。ADCプロセスは、それなしでは機能しません。キャップC2は、それを確実に保持するものです。ただし、この場合、U1の出力はすでにオフセットされているため、おそらく大きな違いはありません。C2の両側でDC値を測定できますか?
エンドリス

@Shubham:デジタル測定を512ではなく0を中心にしたい場合は、ソフトウェアでオフセットを差し引くか、ソフトウェアでデジタルハイパスフィルターを実装するだけです。
エンドリス

3

そのマイクにスペックシートを投稿できますか?内部FETのない裸のユニットがない限り、エレクトレットマイクで5000のゲインが必要な理由はありません。その場合は、プリアンプの外観を大きく変える必要があります。

さらに、使用した回路はエレクトレットマイクのプリアンプとして使用するのにそれほど役立ちません。

私はお勧めします:

ここに画像の説明を入力してください

R5 / R4はゲインを設定し、回路の入力インピーダンスにねじ込むことなく調整できます。R3は2k-> 10k ishから選択できます。10kは歪み性能を改善する傾向があります。これをあまりにも低く調整する場合は、R1とR2の値を再考して入力インピーダンスを修正する必要があります。

また、ノイズがマイクロフォンに混入するため、電源を適切に分離することも非常に重要です。

他の答えが言及したように、ADCを読むと「ゼロ」ポイントは〜512になり、何をしても少し変動します。

目標がレベルに応じてライトを点滅させることである場合、とにかくarduinoで瞬時に測定値を取得してはいけません。代わりに、アナログドメインでピークまたは平均レベルの検出を行い、サンプリングレートに応じて平均化期間を設定します。

編集:ピーク検出器でこれを行うことの詳細

ここでの問題は、arduinoのサンプリングレートが比較的制限されていることです。最大値は約10khzになると思います。つまり、最大5khzのオーディオ信号しか解決できません。これは、arduinoがADCを実行する以外はほとんど実行しないためです。実際の作業を行う必要がある場合(およびレベルを上げるためにいくつかを行う場合)、サンプリングレートは低くなります。

未処理の信号の離散サンプルを取得することを忘れないでください。ADCにフルレンジの正弦波を供給しているからといって、ADCから0の読み取り値が得られないわけではなく、波のさまざまなポイントでサンプルを取得できます。実際の音楽では、結果の信号は非常に複雑になり、サンプルが至る所にあります。

ここで、測定しようとしているのが入力信号のレベルだけであり、実際に信号のデジタル表現を取得する必要がない場合、このプリアンプの後に簡単なピーク検出器を使用して測定できます。

これにより、オーディオ信号がピークレベルを表す電圧に変わります。この電圧をADCで測定すると、測定値が取得された時点の信号レベルを表す即時値が得られます。サウンドは複雑で常に変化する波形であるため、多少の揺れがありますが、これはソフトウェアで簡単に処理できるはずです。

ホールドなしのピーク検出器は、実際には出力にフィルターを備えた単なる整流器です。この場合、低レベルの信号を処理し、精度を維持する必要があるため、平均整流回路で行われることよりも少し多く行う必要があります。この回路ファミリは「精密整流器」と呼ばれます。

ここに画像の説明を入力してください

これを行う方法は約10億通りありますが、この回路を使用すると、単一の電源を使用する場合に最適に機能するようです。これは、すでに説明したプリアンプ回路の後に入力され、入力がAC結合されているかどうかにかかわらず、使用可能なピークを超えない限り、負の入力電圧で実際に正常に動作しますオペアンプからのピーク電圧。

OP1は(ほぼ)理想的なダイオードとして動作し、整流時のダイオード両端の電圧降下の通常の問題を回避します。ほとんどの小信号ダイオードはD1で動作しますが、順方向電圧降下が小さいと精度が向上しますが、使用には問題ないでしょう。

C1とR4は、出力をスムーズにするローパスフィルターとして機能します。これらの値を使用して、パフォーマンスを目的の処理(およびサンプリングレート)に一致させることができます。

プリアンプで使用しているのと同じオペアンプモデルをおそらく使用できますが、この回路にはレールツーレールおよび高スルーレートが理想的です。安定性の問題がある場合は、R1、R2、およびR3を100kオームに増やします。


マイクは標準のエレクトレットコンデンサーマイクです。R3を10Kにします。私のVccは5.9Vなので、R1とR2も10Kでも大丈夫でしょうか?どのオペアンプをお勧めしますか:LM358または741 「ゼロ」ポイントを0または0近くまで下げる方法はありますか?「代わりに、アナログドメインでピークまたは平均レベルの検出を行い、サンプリングレートに応じて平均化期間を設定します。」-これについてもう少し詳しく教えてもらえますか?それは面白そうに聞こえますが、私は本当に調べたいです。申し訳ありませんが、私は多くの質問をしなければなりません...
シュバム

私はあなたの推奨回路を試しました(それは私が使っていたものよりもずっときれいで、出力のランダム性が少なくなっています)。R5に1Mオーム、R4に1kオームを使用して、1000の増幅を行いました。DMMでいくつかの測定を行ったとき、オペアンプは約3ボルトの無音出力を与え、C3は約1.5ボルトに下げました。また、R5を削除しても、出力に違いはありません...ゲインがR4 / R5であることを確認してください。
シュバム

1
R3は、マイク内部のFETのバイアスポイントを設定します(R1 || R2)|| R3は、マイクから見たAC入力インピーダンスを設定します。「ゼロ」ポイントを0に設定することは、アナログドメイン内の何かによって解決することはできません。これは、単一電源を備えたArduinoのADCの機能です。あなたは何の音がゼロ(あなたが負の値が可能であり、この手段として署名したデータ型を使用していることを確認する)ことがないようにしたい場合は、あなたがしなければならないのは、各サンプルから差し引く〜512である
マーク・

R4 / R5はゲインですが、テストした周波数で1000のゲインがオペアンプの制限を超える場合があります。回路内のC2は、フィードバックからの出力のDCオフセットを軽減するためにあり、ゲインには影響しません。
マーク

R1 // R2に対するC1のマークは、1.3 kHzのハイパスフィルターロールオフ周波数を持っています。これは、音声周波数のかなりの部分を大きく上回り、「HiFi」の下限を6オクターブ上回っています。サウンドアクティベートトリガーを作成したいだけの場合はこれで問題ありませんが、通常のデジタル化されたサウンドが必要な場合は適切ではありません。
オリンラスロップ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.