Wie kann ich mit einem PIC-Mikrocontroller ein analoges Signal von -2 V bis +2 V abtasten?


10

Ich verwende ein PIC-Mikro mit einem 10-Bit-ADC, um Messwerte von einem analogen Signal mit einer Frequenz von weniger als 300 Hz zu erfassen. Dieses analoge Signal liegt jedoch im Bereich von -2 V und +2 V. Wie kann ich das Signal konditionieren, um es in einen nutzbaren Bereich zu bringen (vorausgesetzt, der Eingang zum ADC muss positiv sein)? Auch ich habe kein positives und negative Stromversorgung.





@Kellenjb - Die Fragen, die Sie verknüpfen, beziehen sich nicht auf die Berechnungen für diesen speziellen Fall, bei dem die Eingangsspannung in beide Richtungen über die Schienen hinausgeht.
Stevenvh

Die folgenden Fragen wurden als Duplikate dieser Frage geschlossen und haben nützliche Antworten: electronic.stackexchange.com/questions/15985/… , electronic.stackexchange.com/questions/15940/…
Kevin Vermeer

Antworten:


14

Wichtiger Hinweis:
Diese Antwort wurde veröffentlicht, um das Problem für den Eingang von -20 V bis + 20 V zu lösen , da dies gefragt wurde. Es ist eine clevere Methode, funktioniert aber nicht, wenn die Eingangsspannungsgrenze zwischen den Schienen bleibt.

Sie müssen die Spannung mit einem Widerstandsteiler skalieren, damit Sie eine Spannung zwischen -2,5 V und + 2,5 V erhalten, und 2,5 V hinzufügen. (Ich gehe von einer 5-V-Stromversorgung für Ihren PIC aus).

Die folgende Berechnung sieht lang aus, aber das liegt nur daran, dass ich jeden Schritt im Detail erkläre. In Wirklichkeit ist es so einfach, dass Sie es in kürzester Zeit in Ihrem Kopf tun können.

Zuerst das:

R1 ist der Widerstand zwischen und , R2 ist der Widerstand zwischen und und R3 ist der Widerstand zwischen und . V O U T + 5 V V O U T V O U T G N D.VINVOUT
+5VVOUT
VOUTGND

Wie viele Unbekannte haben wir? Drei, R1, R2 und R3. Nicht ganz, wir können einen Wert frei wählen, und die anderen beiden sind von diesem abhängig. Wählen wir R3 = 1k. Der mathematische Weg, um die anderen Werte zu finden, besteht darin, einen Satz von zwei gleichzeitigen Gleichungen aus zwei ( , ) Paaren zu erstellen und nach den unbekannten Widerstandswerten zu suchen. Alle ( , ) Paare reichen aus, aber wir werden sehen, dass wir die Dinge enorm vereinfachen können, indem wir diese Paare sorgfältig auswählen, nämlich die Extremwerte: ( , ) und ( , ). V O U T V I N V O U T + 20 V + 5 V - 20 V 0 V.VINVOUTVINVOUT+20V+5V20V0V

Erster Fall: , Beachten Sie, dass (und dies ist der Schlüssel zur Lösung!) Beide Enden von R2 , sodass kein Spannungsabfall und daher kein Strom durchläuft R2. Das bedeutet, dass mit (KCL) identisch sein muss . . Wir kennen den Strom durch R1 und auch die Spannung darüber, damit wir seinen Widerstand berechnen können: . Fand unser erstes Unbekanntes! V O U T = + 5 V + 5 V I R 1 I R 3 I R 3 = + 5 V - 0 V.VIN=+20VVOUT=+5V
+5VIR1IR3
R1=+20V-5VIR3=+5V0V1kΩ=5mA=IR1
R1=+20V5V5mA=3kΩ

Zweiter Fall: , Das gleiche wie bei R2 passiert jetzt bei R3: kein Spannungsabfall, also kein Strom. Wieder laut KCL, jetzt = . . Wir kennen den Strom durch R2 und auch die Spannung darüber, damit wir seinen Widerstand berechnen können: . Fand unser zweites Unbekanntes! V O U T = 0 V I R 1 I R 2 I R 1 = - 20 V - 0 V.VIN=20VVOUT=0V
IR1IR2
R2=+5V-0VIR1=20V0V3kΩ=6.67mA=IR2
R2=+5V0V6.67mA=0.75kΩ

Eine Lösung lautet also: . R1=3kΩ,R2=0.75kΩ,R3=1kΩ

Wie gesagt, es ist nur das Verhältnis zwischen diesen Werten wichtig, also könnte ich genauso gut wählen . Wir können diese Lösung mit einem anderen Paar ( , ) vergleichen, z. B. ( , ). R1 und R3 sind jetzt parallel (beide haben + 2,5 V - 0 V über sich. Wenn wir also ihren kombinierten Wert berechnen, finden wir , genau den Wert von R2 und den Wert, den wir benötigen, um von ! Unsere Lösung ist also in der Tat korrekt. [QC-Stempel steht hier]R1=12kΩ,R2=3kΩ,R3=4kΩ
VINVOUT0V2.5V0.75kΩ+2.5V+5V

Als letztes müssen Sie mit dem ADC des PIC verbinden. ADCs haben oft eher niedrige Eingangswiderstände, daher kann dies unser sorgfältig berechnetes Gleichgewicht stören. Kein Grund zur Sorge, wir müssen einfach R3 erhöhen, damit . Angenommen, , dann Daraus ergibt sich . VOUTR3//RADC=1kΩRADC=5kΩ11kΩ=1R3+1RADC=1R3+15kΩR3=1.25kΩ


bearbeiten
OK, das war klug und sehr einfach, auch wenn ich es selbst sage. ;-) Aber warum sollte das nicht funktionieren, wenn die Eingangsspannung zwischen den Schienen bleibt? In den obigen Situationen hatten wir immer einen Widerstand, durch den kein Strom floss, so dass nach KCL der Strom, der über einen Widerstand in den -Knoten fließt , über den anderen abfließt. Das bedeutete, dass eine Spannung höher als und die andere niedriger sein musste. Wenn beide Spannungen niedriger sind, würde nur Strom von diesem Knoten wegfließen, und KCL verbietet dies. V O U T.VOUTVOUT


-20V Eingang führt zu etwas weniger als 0V Ausgang.
Olin Lathrop

(und vielleicht Olin Lathrop): Ich habe versucht herauszufinden, wie Sie den Wert des 7k-Widerstands finden. Ich habe festgestellt, dass bei einer Eingangsspannung von 2,5 V kein Strom zum Knoten fließt, unabhängig vom Widerstandswert, da keine Spannungsdifferenz vorliegt. Dieser 2,5-V-Eingang liegt jedoch nicht im mittleren Bereich, während der 2,5- V-Ausgang ebenfalls im mittleren Bereich liegt. Bedeutet das nicht, dass der Teiler zwei verschiedene Widerstände haben sollte? Wenn du weißt, was ich meine.
Federico Russo

Vielleicht erklärt das auch den Kommentar von @Olin Lathrop.
Federico Russo

@Frederico: Ja, es wird nicht vollständig symmetrisch sein. Ich diskutiere dies in meiner Antwort. Es ist möglich, die drei Widerstände so einzustellen, dass sie -20 bis +20 Volt auf 0 bis 5 Volt abbilden, aber sowohl Steven als auch ich haben die einfacheren Fälle gezeigt, in denen Sie eine kleine Assymetrie erhalten.
Olin Lathrop

6

Am einfachsten ist es, einen "Widerstandsteiler" zu verwenden.

Sie haben nicht gesagt, bei welcher Spannung dieser PIC läuft und daher der A / D-Eingangsbereich ist. Verwenden wir also 5 V für das Beispiel. Ihr Eingangsspannungsbereich beträgt 40 V und der Ausgang 5 V, sodass Sie etwas benötigen, das um mindestens 8 gedämpft wird. Außerdem muss das Ergebnis auf 1/2 Vdd zentriert sein, was 2,5 V entspricht, während Ihre Eingangsspannung auf 0 V zentriert ist .

Dies kann mit 3 Widerständen erreicht werden. Ein Ende aller drei Widerstände ist miteinander und mit dem PIC A / D-Eingangspin verbunden. Das andere Ende von R1 geht zum Eingangssignal, R2 geht zu Vdd und R3 geht zu Masse. Der Widerstandsteiler wird durch R1 und die parallele Kombination von R2 und R3 gebildet. Sie können R2 und R3 so einstellen, dass der resultierende Bereich bei 2,5 V zentriert wird. Der Einfachheit halber werden wir jedoch mit ein wenig Assymetrie leben und etwas mehr abschwächen, um sicherzustellen, dass beide Enden auf den Vss-Vdd-Bereich beschränkt sind.

Angenommen, der PIC möchte, dass das analoge Signal eine Impedanz von 10 kΩ oder weniger hat. Lassen Sie uns der Einfachheit halber R2 und R3 zu 20 kΩ machen. Die Impedanz, die den PIC speist, ist nicht mehr als die parallele Kombination dieser Impedanzen, die 10 kΩ beträgt. Um eine Dämpfung von 8 zu erhalten, muss R1 7 mal R2 // R3 sein, was 70 kΩ entspricht. Da das Ergebnis jedoch nicht genau symmetrisch ist, müssen wir etwas mehr dämpfen, um sicherzustellen, dass -20 V in nicht weniger als 0 V in den PIC einbringen. Das erfordert tatsächlich eine Dämpfung von 9, also muss R1 mindestens 8 mal R2 // R3 sein, was 80 kΩ entspricht. Der Standardwert von 82 kΩ ermöglicht eine gewisse Neigung und einen gewissen Spielraum, aber Sie erhalten immer noch den größten Teil des A / D-Bereichs, um das ursprüngliche Signal zu messen.

Hinzugefügt:

Hier ist ein Beispiel für die genaue Lösung eines ähnlichen Problems. Dies hat keine Assymetrie und eine bestimmte spezifizierte Ausgangsimpedanz. Diese Form der Lösung kann immer verwendet werden, wenn der A / D-Bereich vollständig innerhalb des Eingangsspannungsbereichs liegt.


+1, da dies in Bezug auf die Anzahl der Teile der einfachste Weg ist, das zu erstellen, was erforderlich ist. Einige Hinweise: Es ist möglich, die Asymetrie im uC-Code zu berücksichtigen, und durch Hinzufügen eines Kondensators parallel zum Widerstand, der an GND geht, kann das Signal geglättet werden (Tiefpassfilter). Die Eckfrequenz ist 1 / (2 * pi R C), wobei R der Parallelwert aller drei Widerstände und C der Wert der hinzugefügten Kappe ist (ADC benötigt ohnehin eine Kappe!). Bitte berechnen Sie die Genauigkeit dieses Setups unter Berücksichtigung aller Toleranzen (R, ADC-Fehler in +/- max. LSB, Ref. Fehler, ...) - möglicherweise schlechter als erwartet.
Zebonaut

@zebonaut - Ich habe die Berechnung erneut durchgeführt und jeden Schritt in meiner aktualisierten Antwort ausführlich erklärt (weitaus weniger kompliziert, als es aussieht!). Es gibt Ihnen eine genaue Zuordnung von (-20 V .. + 20 V) zu (0 V .. + 5 V)
Stevenvh

@zebonaut: Der Kondensator kann als Anti-Aliasing-Filter nützlich sein, hat aber nichts mit der Assymetrie zu tun. Ich dachte nicht, dass die kleine Assymetrie eine große Sache ist. Es ist einfach genug, sich in der Firmware zu kümmern, wie Sie sagten.
Olin Lathrop

Wenn Sie die Asymmetrie in der Software kompensieren möchten, müssen Sie die genaue Übertragungsfunktion berechnen. Wenn Sie dies trotzdem tun müssen, warum nicht zuerst die richtigen Widerstandswerte verwenden (nicht die aus meiner ersten (fehlerhaften) Antwort!)
stevenvh

@stevenvh: Es ist nichts Falsches daran, die "richtigen" Widerstandswerte zu verwenden. Ich erkannte, dass eine genaue Zuordnung möglich war (wie ich in meiner Antwort erwähnt habe), entschied mich jedoch, nicht auf die Komplexität der Berechnungen einzugehen und den konzeptionell einfacheren Fall zu beantworten, der zu einer kleinen Assymetrie führt. In jedem Fall müssen Sie etwas mehr dämpfen, um den Slop zu berücksichtigen, und sollten wahrscheinlich trotzdem in der Firmware kalibrieren.
Olin Lathrop

2

Dies ist die Standardschaltung dafür. Sie müssen die Widerstandswerte für Ihre erforderliche Impedanz skalieren.


Müssen Sie sicherstellen, dass Ihre Quellenimpedanz relativ niedrig ist, wenn Sie diese verwenden?
Nick T

Leon, warum nicht einen Kondensator anstelle des 1k-Widerstands verwenden?
Stevenvh

Es ist eine DC-gekoppelte Lösung. Der Vorwiderstand wird für den ordnungsgemäßen Betrieb benötigt.
Leon Heller

3
@Leon Heller: Ich denke, dies wäre eine bessere Antwort, wenn Sie erklären würden, wie Sie die richtigen Werte für die Widerstände finden.
Federico Russo

2

Wenn das Signal nicht DC ist oder wenn eine DC-Referenz nicht wichtig ist, kann das Signal kapazitiv mit dem Eingang des ADC gekoppelt werden.

Wenn Ihre Masse für den PIC schwebend ist, können Sie alternativ Ihre Signalmasse mit 1/2 VDD des PIC verbinden.


Wenn Sie eine kapazitive Kopplung verwenden, wird die Gleichstromkomponente entfernt, aber der negative Teil des Signals bleibt weiterhin unter der Erde, es sei denn, Sie spannen den Eingangspin durch einen Widerstandsteiler an, wie in Leons Schaltung.
Stevenvh

Die Versorgungsspannung wurde nicht angegeben - es würde mit einem 5V ADC funktionieren. Wenn Sie eine kleinere Vdd verwenden, müssen Sie die Eingabe skalieren. An diesem Punkt würde es sich in Leons Stromkreis mit einem Kondensator verwandeln.
W5VO

2

Die folgende Schaltung sollte die Arbeit erledigen:

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

Es ist ein potentieller Teiler. Bei -2 V beträgt der Ausgang 0,65 V; bei + 2 V, 2,65 V.

Alle Störungen auf der 3,3-V-Schiene werden auf den Eingang übertragen. Verwenden Sie daher eine gute Spannungsreferenz, um dieses Problem zu verringern.

Dies funktioniert auch mit anderen Verbrauchsmaterialien, aber der Offset verschiebt sich.


Ja, es funktioniert, aber es wäre schön, den gesamten ADC-Bereich zu nutzen :-)
stevenvh

@stevenh Sie können dies mit 0,65 V- und 2,65 V-Referenzen tun, obwohl Sie dann auch Ihre Schaltung verwenden können.
Thomas O

AFAIK-PICs haben nur einen -Eingang, Sie können nicht einstellen . Wie bei den meisten Controllern ist dies immer mit . V R E F - G N D.VREF+VREFGND
Stevenvh

@stevenh PIC24, dsPIC und PIC32 haben definitiv Vref-. Ich denke, einige 18F auch.
Thomas O

Ja, OK, ich kenne sie nicht alle (es gibt viele von ihnen). OP sagt nicht, welchen Teil er benutzt und er scheint verschwunden zu sein, also macht es keinen Sinn, ihn zu fragen.
Stevenvh

1

VADCREF
VADCVDDVADCVADCREF+

VDD2V3.3VVADC

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.