PICマイクロコントローラーで-2 V〜+2 Vのアナログ信号をサンプリングするにはどうすればよいですか?


10

300ビット未満の周波数のアナログ信号から読み取り値を取得するために、10ビットADCを備えたPICマイクロを使用しています。ただし、そのアナログ信号の範囲は-2 Vから+2 Vです。信号を調整して使用可能な範囲にするにはどうすればよいですか(ADCへの入力が正である必要があると想定しています)。負の電源。





@Kellenjb-あなたがリンクする質問は、入力電圧がレールを超えて双方向になるこの特定のケースの計算に対処していません。
stevenvh

以下の質問は、この1の重複として閉じられ、かつ有用な回答をしていました:electronics.stackexchange.com/questions/15985/...electronics.stackexchange.com/questions/15940/...
ケビン・フェルメール

回答:


14

重要な注意:
この回答は、-20V〜+ 20V入力の問題を解決するために投稿されたものです。これは賢い方法ですが、入力電圧制限がレール間に留まっていると機能しません。

-2.5Vと+ 2.5Vの間の電圧が得られるように抵抗分割器で電圧をスケーリングし、2.5Vを追加する必要があります。(私はあなたのPIC用の5V電源を想定しています)。

次の計算は長く見えますが、それは私がすべてのステップを詳細に説明しているからです。実際にはとても簡単なので、すぐに頭の中でそれを行うことができます。

まずこれ:

R1はV O U T 間の抵抗、R2は+ 5 VV O U T 間の抵抗、R3はV O U TG N D間の抵抗です。 VINVOUT
+5VVOUT
VOUTGND

未知数はいくつありますか?3つ、R1、R2、およびR3。不正解です。1つの値を自由に選択でき、他の2つはその値に依存しています。R3 = 1kを選択しましょう。他の値を求める数学的な方法は、2つの(V O U T)ペアから2つの連立方程式のセットを作成し、未知の抵抗値を解くことです。(V I NV O U T)のペアはすべて機能しますが、これらのペア、つまり極値((+ 20 V+ 5 V)および(VINVOUTVINVOUT+20V+5V 0 V)。 20V0V

最初のケース:V O U T = + 5 V R2の両端が+ 5 Vになるので(そしてこれが解決策の鍵です!)、電圧降下がないため、 R2を流れる電流。つまり、I R 1I R 3(KCL)と同じでなければなりません。I R 3 = + 5 V - 0 VVIN=+20VVOUT=+5V
+5VIR1IR3
。 R1を流れる電流とその上の電圧もわかっているので、その抵抗を計算できます。R1=+20V-5VIR3=+5V0V1kΩ=5mA=IR1
。 私たちの最初の未知を見つけました! R1=+20V5V5mA=3kΩ

2番目のケース:V O U T = 0 V R2と同じことがR3でも発生します。電圧降下がないため、電流がありません。再びKCLによれば、I R 1 = I R 2になります。I R 1 = 20 V 0 VVIN=20VVOUT=0V
IR1IR2
。 R2を流れる電流とその両端の電圧もわかっているので、その抵抗を計算できます。R2=+5V-0VIR1=20V0V3kΩ=6.67mA=IR2
。 私たちの2番目の未知を見つけた! R2=+5V0V6.67mA=0.75kΩ

そう溶液である:R1=3kΩ,R2=0.75kΩ,R3=1kΩ

私はそれだけだと述べたように Iが同様選ぶかもしれないので、重要であり、これらの値の間の。 このソリューションを別の(V I NV O U T)ペア、たとえば(0 V2.5 V)のペアに対してチェックできます。R1とR3は並列になりました(両方に+ 2.5V-0Vがあるため、それらの合計値を計算すると0.75がわかりますR1=12kΩ,R2=3kΩ,R3=4kΩ
VINVOUT0V2.5V、正確R2の値は、我々が得るために必要な値 + 2.5 Vをから + 5 V!したがって、私たちのソリューションは確かに正しいです。[QCスタンプがここに表示されます]0.75kΩ+2.5V+5V

最後に、をPICのADCに接続します。ADCの入力抵抗はかなり低いことが多いため、慎重に計算された平衡を乱す可能性があります。しかし、我々は単にようR3を増加する必要があり、心配する必要は何もR 3 / / R A D C = 1つのk Ω。仮定R A D C = 5 K Ω、次いで1VOUTR3//RADC=1kΩRADC=5kΩ我々は見つける。このことから、R3=1.25KΩを11kΩ=1R3+1RADC=1R3+15kΩR3=1.25kΩ


編集
OK、私が自分でそう言ったとしても、それは賢くて非常にシンプルでした。;-)しかし、入力電圧がレール間にある場合、これが機能しないのはなぜですか?上記の状況では、電流が流れない抵抗が常にあったため、KCLに続いて、1つの抵抗を介してノードに流れ込んだ電流は、他の抵抗を介して流れていました。つまり、一方の電圧はV O U Tよりも高く、もう一方の電圧は低くなければなりません。両方の電圧が低い場合、そのノードから電流が流れるだけで、KCLはそれを禁止します。VOUTVOUT


-20V入力は0V少し下の出力になります。
Olin Lathrop、2011年

(そしておそらくOlin Lathrop):7k抵抗の値をどのように見つけるかを調べようとしていました。入力電圧が2.5Vの場合、抵抗値に関係なく、ノードに電流が流れないことに気付きました。電圧差がないためです。しかし、その2.5V入力はミッドレンジではありませんが、2.5V出力もそうです。それは、分圧器に2つの異なる抵抗器が必要であることを意味しませんか?お分かりでしょうが。
フェデリコルッソ

多分それは@Olin Lathropのコメントも説明しています。
フェデリコルッソ

@フレデリコ:はい、完全に対称ではありません。私はこれを私の答えで議論します。3つの抵抗を調整して-20から+20ボルトを0から5ボルトにマッピングすることは可能ですが、スティーブンと私はどちらも、わずかな非対称性が生じる単純なケースを示しました。
Olin Lathrop

6

最も簡単な方法は、「抵抗分割器」を使用することです。

このPICが動作している電圧は言っていないため、A / D入力範囲はそうなので、例として5Vを使用します。入力電圧範囲は40Vで、出力は5Vなので、少なくとも8減衰するものが必要です。また、結果が2.5Vである1/2 Vddを中心とする必要がありますが、入力電圧は0Vを中心とします。 。

これは、3つの抵抗で実現できます。3つの抵抗すべての一端が一緒に接続され、PIC A / D入力ピンに接続されます。R1のもう一方の端は入力信号になり、R2はVddになり、R3はグラウンドになります。抵抗分割器は、R1と、R2とR3の並列組み合わせで形成されます。R2とR3を調整して、結果の範囲を2.5Vに集中させることができますが、これを簡単に説明するために、少し非対称にして、両端をVss-Vdd範囲に制限するように少し減衰させます。

PICがアナログ信号のインピーダンスを10kΩ以下にしたいとします。ここでも簡単のため、R2とR3を20kΩにしましょう。PICに給電するインピーダンスは、それらの並列の組み合わせ(10kΩ)にすぎません。8の減衰を得るために、R1はR2 // R3の7倍、つまり70kΩである必要があります。ただし、結果は正確に対称的ではないため、-20V inがPICに0V未満にならないように、もう少し減衰する必要があります。これには実際には9の減衰が必要であるため、R1は少なくともR2 // R3の8倍、つまり80kΩでなければなりません。82kΩの標準値は、多少のスロップとマージンを許容しますが、元の信号を測定するためにA / D範囲のほとんどを取得できます。

追加:

次に、同様の問題の正確な解決策を見つける例を示します。これには非対称性がなく、特定の指定された出力インピーダンスがあります。この形式のソリューションは、A / D範囲が完全に入力電圧範囲内にある場合に常に使用できます。


+1は、部品点数に関する限り、必要なものを構築する最も簡単な方法です。注意事項:uCのコードで非対称性を処理することが可能であり、GNDに接続する抵抗に並列に1つのコンデンサを追加することで、信号を平滑化できます(ローパスフィルター)。コーナー周波数。は1 /(2 * pi R C)です。ここで、Rは3つの抵抗すべての並列値で、Cは追加されるキャップの値です(とにかくADCにはキャップが必要です!)。すべての許容誤差(R、ADCエラー+/-最大LSB、参照エラーなど)を考慮して、このセットアップの精度を計算してください-予想よりも悪い場合があります。
zebonaut

@zebonaut-私はもう一度計算を行い、更新された回答で各ステップを詳細に説明しました(見た目ほど複雑ではありません!)。(-20V .. + 20V)から(0V .. + 5V)への正確なマッピングを提供します
stevenvh

@zebonaut:コンデンサーはアンチエイリアスフィルターとして役立つかもしれませんが、非対称性については何もしません。小さな非対称性が大したことだとは思わなかった。あなたが言ったように、ファームウェアで対処するのは簡単です。
Olin Lathrop、2011年

ソフトウェアで非対称性を補正する場合は、正確な伝達関数を計算する必要があります。とにかくこれを行う必要がある場合は、最初に正しい抵抗値を使用してください(最初の(誤った)回答からのものではありません!)
stevenvh

@stevenvh:「正しい」抵抗値を使用しても問題はありません。正確なマッピングが可能であることに気づきましたが(私の回答で述べたように)、計算が複雑になることはなく、少し非対称になる概念的に単純なケースには答えないことにしました。いずれの場合も、スロップを考慮するためにもう少し減衰する必要があり、おそらくとにかくファームウェアで調整する必要があります。
Olin Lathrop、2011年

2

これがその標準回路です。必要なインピーダンスに合わせて抵抗値をスケーリングする必要があります。


それを使用する場合、ソースインピーダンスを比較的低くする必要がありますか?
Nick T

レオン、1k抵抗器の代わりにコンデンサを使ってみませんか?
stevenvh

これは、DC結合ソリューションです。正常に動作させるには、直列抵抗が必要です。
Leon Heller

3
@レオン・ヘラー:抵抗器の正しい値を見つける方法を説明した場合、これはより良い答えになると思います。
フェデリコルッソ

2

信号がDCでない場合、またはDCリファレンスが重要でない場合は、信号をADCの入力に容量結合することができます。

または、PICのグランドがフローティングの場合、信号のグランドをPICの1/2 VDDに接続できます。


容量結合を使用すると、DC成分が除去されますが、レオンの回路のように抵抗分割器によって入力ピンにバイアスをかけない限り、信号の負の部分はグランドより低くなります。
stevenvh

電源電圧は指定されていません-5V ADCで動作します。より小さいVddを使用している場合は、入力をスケーリングする必要があります。それはその時点でコンデンサーを持つレオンの回路に変わります。
W5VO

2

次の回路がその仕事をするはずです:

3.3V
 +
 |
 \
 / 1k
 \
 |
 +-- ADC input
 |
 \
 /  1k
 \
 |
 +-- Signal input (-2V to +2V)

それは潜在的なディバイダーです。-2Vでは、出力は0.65Vになります。+ 2V、2.65V。

3.3Vレール上のすべてのノイズは入力に伝達されるため、適切な基準電圧を使用してこの問題を軽減します。

これは他のサプライでも機能しますが、オフセットはシフトします。


はい、動作しますが、ADCの全範囲を使用するとよいでしょう:-)
stevenvh

@stevenh 0.65Vと2.65Vのリファレンスを使用してこれを行うことができますが、回路を使用することもできます。
Thomas O

VREF+VREFGND

@stevenh PIC24、dsPIC、およびPIC32には確実にVref-があります。18Fもあると思います。
Thomas O

ええ、わかりました、私はそれらのすべてを知りません(たくさんあります)。OPは彼がどの部分を使用しているかを述べておらず、彼は消滅したように見えるので、彼に尋ねても無駄です。
stevenvh

1

VADCREF
VADCVDDVADCVADCREF+

VDD2V3.3VVADC

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.