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

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). Außerdem habe ich kein positives und negative Stromversorgung.

@Kellenjb - Die Fragen, auf die Sie verlinken, behandeln nicht die Berechnungen für diesen speziellen Fall, in dem die Eingangsspannung in beide Richtungen über die Schienen hinausgeht.
Die folgenden Fragen wurden als Duplikate dieser Frage geschlossen und haben nützliche Antworten: electronic.stackexchange.com/questions/15985/… , electronic.stackexchange.com/questions/15940/…
Ausgezeichnetes Papier zum Thema Skalierung und Vorspannung hier: symres.com/files/scalebias.pdf

Antworten (6)

Wichtiger Hinweis:
Diese Antwort wurde veröffentlicht, um das Problem für den Eingang von -20 V bis + 20 V zu lösen , da danach 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 so skalieren, dass Sie eine Spannung zwischen -2,5 V und +2,5 V erhalten, und 2,5 V hinzufügen. (Ich nehme eine 5-V-Stromversorgung für Ihren PIC an).

Die folgende Rechnung 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 im Handumdrehen in Ihrem Kopf erledigen können.

Zuerst das:

R1 ist der Widerstand dazwischen v ich N und v Ö U T ,
R2 ist der Widerstand zwischen + 5 v und v Ö U T , und
R3 ist der Widerstand zwischen v Ö U T und G N D .

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 davon abhängig. Wählen wir R3 = 1k. Der mathematische Weg, die anderen Werte zu finden, besteht darin, einen Satz von zwei simultanen Gleichungen aus zwei ( v ich N , v Ö U T ) paaren und nach den unbekannten Widerstandswerten auflösen. Beliebig ( v ich N , v Ö U T )-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: ( + 20 v , + 5 v ) und ( 20 v , 0 v ).

Erster Fall: v ich N = + 20 v , v Ö U T = + 5 v
Beachten Sie, dass (und das ist der Schlüssel zur Lösung!) beide Enden von R2 zu sehen sind + 5 v , also gibt es keinen Spannungsabfall und daher keinen Strom durch R2. Das bedeutet, dass ich R 1 muss gleich sein ich R 3 (KKL).
ich R 3 = + 5 v 0 v 1 k Ω = 5 m EIN = ich R 1 .
Wir kennen den Strom durch R1 und auch die Spannung darüber, sodass wir seinen Widerstand berechnen können: R 1 = + 20 v 5 v 5 m EIN = 3 k Ω .
Unseren ersten Unbekannten gefunden!

Zweiter Fall: v ich N = 20 v , v Ö U T = 0 v
Dasselbe wie bei R2 passiert jetzt mit R3: kein Spannungsabfall, also kein Strom. Jetzt wieder laut KCL ich R 1 = ich R 2 .
ich R 1 = 20 v 0 v 3 k Ω = 6.67 m EIN = ich R 2 .
Wir kennen den Strom durch R2 und auch die Spannung darüber, sodass wir seinen Widerstand berechnen können: R 2 = + 5 v 0 v 6.67 m EIN = 0,75 k Ω .
Wir haben unsere zweite Unbekannte gefunden!

Eine Lösung ist also: R 1 = 3 k Ω , R 2 = 0,75 k Ω , R 3 = 1 k Ω .

Wie ich schon sagte, es ist nur das Verhältnis zwischen diesen Werten wichtig, also könnte ich genauso gut auswählen R 1 = 12 k Ω , R 2 = 3 k Ω , R 3 = 4 k Ω .
Wir können diese Lösung gegen eine andere prüfen ( v ich N , v Ö U T ) Paar, zB ( 0 v , 2.5 v ). R1 und R3 sind jetzt parallel (beide haben +2,5 V-0 V über sich), also finden wir, wenn wir ihren kombinierten Wert berechnen 0,75 k Ω , genau der Wert von R2 und der Wert, den wir bekommen mussten + 2.5 v von + 5 v ! Unsere Lösung ist also in der Tat richtig. [QC-Stempel kommt hierher]

Das letzte, was zu tun ist, ist eine Verbindung herzustellen v Ö U T zum ADC des PIC. ADCs haben oft ziemlich niedrige Eingangswiderstände, was unser sorgfältig berechnetes Gleichgewicht stören kann. Kein Grund zur Sorge, aber wir müssen R3 einfach so erhöhen R 3 / / R EIN D C = 1 k Ω . Vermuten R EIN D C = 5 k Ω , dann 1 1 k Ω = 1 R 3 + 1 R EIN D C = 1 R 3 + 1 5 k Ω . Daraus finden wir R 3 = 1.25 k Ω .


edit
OK, das war clever und sehr einfach, auch wenn ich das selbst sage. ;-) Aber warum sollte das nicht funktionieren, wenn die Eingangsspannung zwischen den Schienen bleibt? In den oben genannten Situationen hatten wir immer einen Widerstand, durch den kein Strom floss, sodass nach KCL der Strom in den kommt v Ö U T Knoten über einen Widerstand würde über den anderen verlassen. Das bedeutete, dass eine Spannung höher sein musste als v Ö U T , und die andere niedriger. Wenn beide Spannungen niedriger sind, würde nur Strom von diesem Knoten wegfließen, und KCL verbietet dies.

-20 V Eingang führt zu etwas unter 0 V Ausgang.
(und vielleicht Olin Lathrop): Ich habe versucht herauszufinden, wie Sie den Wert des 7k-Widerstands finden. Mir ist aufgefallen, dass bei einer Eingangsspannung von 2,5 V unabhängig vom Widerstandswert kein Strom zum Knoten fließt, da keine Spannungsdifferenz besteht. Aber dieser 2,5-V-Eingang ist kein Mittelbereich, während der 2,5-V-Ausgang es auch ist. Bedeutet das nicht, dass der Teiler zwei verschiedene Widerstände haben sollte? Wenn du weißt, was ich meine.
Vielleicht erklärt das auch den Kommentar von @Olin Lathrop.
@ Frederico: Ja, es wird nicht vollständig symmetrisch sein. Ich erörtere 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 Asymmetrie erhalten.

Der einfachste Weg ist die Verwendung eines "Widerstandsteilers".

Sie haben nicht gesagt, mit welcher Spannung dieser PIC läuft und daher der A / D-Eingangsbereich ist, also nehmen wir 5 V für das Beispiel. Ihr Eingangsspannungsbereich beträgt 40 V und der Ausgang 5 V. Sie benötigen also etwas, 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-Eingangsstift verbunden. Das andere Ende von R1 geht an das Eingangssignal, R2 geht an Vdd und R3 geht an Masse. Der Widerstandsteiler wird durch R1 und die Parallelschaltung von R2 und R3 gebildet. Sie können R2 und R3 anpassen, um den resultierenden Bereich bei 2,5 V zu zentrieren, aber der Einfachheit halber leben wir mit ein wenig Asymmetrie und dämpfen etwas mehr, um sicherzustellen, dass beide Enden auf den Vss-Vdd-Bereich begrenzt sind.

Nehmen wir an, der PIC möchte, dass das analoge Signal eine Impedanz von 10 kΩ oder weniger hat. Lassen Sie uns der Einfachheit halber wieder R2 und R3 zu 20 kΩ machen. Die Impedanz, die den PIC speist, wird nicht mehr als die Parallelkombination dieser sein, die 10 kΩ beträgt. Um eine Dämpfung von 8 zu erhalten, muss R1 das 7-fache von R2//R3 sein, was 70 kΩ entspricht. Da das Ergebnis jedoch nicht genau symmetrisch sein wird, müssen wir etwas mehr dämpfen, um sicherzustellen, dass -20 V in nicht weniger als 0 V in den PIC führen. Das erfordert tatsächlich eine Dämpfung von 9, also muss R1 mindestens das 8-fache von R2//R3 sein, was 80 kΩ entspricht. Der Standardwert von 82 kΩ lässt etwas Slop und Spielraum zu, aber Sie erhalten immer noch den größten Teil des A/D-Bereichs, um das Originalsignal zu messen.

Hinzugefügt:

Hier ist ein Beispiel für das Finden der genauen Lösung für ein ähnliches Problem. Dieser weist keine Asymmetrie auf und hat eine bestimmte spezifizierte Ausgangsimpedanz. Diese Lösungsform kann immer dann verwendet werden, wenn der A/D-Bereich vollständig innerhalb des Eingangsspannungsbereichs liegt.

+1, denn was die Anzahl der Teile betrifft, ist dies der einfachste Weg, um das zu bauen, was erforderlich ist. Einige Anmerkungen: Es ist möglich, die Asymmetrie im uC-Code zu berücksichtigen, und durch Hinzufügen eines Kondensators parallel zum Widerstand, der auf GND geht, kann das Signal geglättet werden (Tiefpassfilter). Die Eckfrequenz. ist 1 / (2 * pi R C), wobei R der parallele Wert aller drei Widerstände und C der Wert der hinzugefügten Kappe ist (ADC benötigt sowieso eine Kappe!). Bitte berechnen Sie die Genauigkeit dieses Setups unter Berücksichtigung aller Toleranzen (R, ADC-Fehler in +/- max. LSB, Ref.-Fehler, ...) - es könnte schlechter sein als erwartet.
@zebonaut - Ich habe die Berechnung erneut durchgeführt und jeden Schritt in meiner aktualisierten Antwort ausführlich erklärt (viel weniger kompliziert, als es aussieht!). Es gibt Ihnen eine genaue Zuordnung von (-20V..+20V) zu (0V..+5V)
@zebonaut: Der Kondensator könnte als Anti-Aliasing-Filter nützlich sein, aber er ändert nichts an der Asymmetrie. Ich dachte nicht, dass die kleine Asymmetrie eine große Sache war. Es ist einfach genug, sich in der Firmware darum zu kümmern, wie Sie sagten.
Wenn Sie die Asymmetrie in Software kompensieren möchten, müssen Sie die genaue Übertragungsfunktion berechnen. Wenn Sie dies sowieso tun müssen, warum verwenden Sie nicht gleich die richtigen Widerstandswerte (nicht die aus meiner ersten (fehlerhaften) Antwort!)
@stevenvh: Es ist nichts falsch daran, die "richtigen" Widerstandswerte zu verwenden. Ich erkannte, dass eine genaue Zuordnung möglich war (wie ich in meiner Antwort erwähnte), entschied mich jedoch, nicht auf die Komplexität von Berechnungen einzugehen und den konzeptionell einfacheren Fall zu beantworten, der zu einer kleinen Asymmetrie führt. In jedem Fall müssen Sie etwas mehr dämpfen, um den Slop auszugleichen, und sollten wahrscheinlich sowieso in der Firmware kalibrieren.

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 das verwenden?
Leon, warum nicht einen Kondensator anstelle des 1k-Widerstands verwenden?
Es ist eine DC-gekoppelte Lösung. Der Vorwiderstand wird für den ordnungsgemäßen Betrieb benötigt.
@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.

Wenn das Signal kein Gleichstrom ist oder wenn eine Gleichstromreferenz nicht wichtig ist, kann das Signal kapazitiv an den Eingang des ADC gekoppelt werden.

Alternativ können Sie, wenn Ihre Masse für den PIC schwebend ist, Ihre Signalmasse an 1/2 VDD des PIC binden.

Wenn Sie eine kapazitive Kopplung verwenden, werden Sie die DC-Komponente los, aber der negative Teil des Signals geht immer noch unter die Erde, es sei denn, Sie stellen eine Vorspannung am Eingangspin durch einen Widerstandsteiler bereit, wie in Leons Schaltung.
Die Versorgungsspannung wurde nicht angegeben - es würde mit einem 5-V-ADC funktionieren. Wenn Sie eine kleinere Vdd verwenden, müssen Sie die Eingabe skalieren. Es würde sich an diesem Punkt in Leons Schaltung mit einem Kondensator verwandeln.

Die folgende Schaltung sollte die Arbeit erledigen:

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

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

Das gesamte Rauschen auf der 3,3-V-Schiene wird zum Eingang übertragen. Verwenden Sie daher eine gute Spannungsreferenz, um dieses Problem zu reduzieren.

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

Ja, es funktioniert, aber es wäre schön, den vollen ADC-Bereich zu nutzen :-)
@stevenh Sie können dies mit Referenzen von 0,65 V und 2,65 V tun, obwohl Sie dann auch Ihre Schaltung verwenden können.
AFAIK PICs haben nur a v R E F + Eingang, Sie können nicht einstellen v R E F . Wie bei den meisten Controllern ist dieser immer verbunden G N D .
@stevenh PIC24, dsPIC und PIC32 haben definitiv Vref-. Ich denke, einige 18F tun das auch.
Ja, OK, ich kenne sie nicht alle (es gibt viele ). OP sagt nicht, welchen Teil er benutzt, und er scheint verschwunden zu sein, also hat es keinen Sinn, ihn zu fragen.

Der Spannungsaddierer von Thomas mit zwei identischen Widerständen ist zwar einfach, hat aber den Nachteil, dass der Eingangsbereich zum ADC reduziert wird, was bedeutet, dass das Rauschen einen größeren Einfluss hat. Auch die Untergrenze liegt bei 0,65V. Wenn Ihr Mikrocontroller keine hat v EIN D C R E F Eingang (die meisten Controller tun dies nicht), bleibt dieser Teil des Eingangsbereichs ungenutzt.
Dies ist einfach zu beheben: Wählen Sie das Widerstandsverhältnis so, dass v EIN D C wird 0 V sein, wenn der Eingang -2 V ist. Für ein v D D von 5 V bedeutet dies, dass der Eingangswiderstand 2/5 des Pull-up-Widerstands betragen sollte. Bei 2V Eingang v EIN D C wird 2,86 V sein. Satz v EIN D C R E F + auf diesen Pegel, und die -2 V bis +2 V decken den gesamten ADC-Bereich ab.

Wenn dein v D D = 3,3 V sollte der Eingangswiderstand 61 % betragen ( 2 v 3.3 v ) des Klimmzugs. Bei +2V ein v EIN D C wird 2,49 V sein.