Widerstandssensor liest ADC

Ich muss eine ADC-Konvertierung mit einer ATXmega-MCU in einer Luftqualitätsanwendung vornehmen.

Der Eingang ist ein Spannungsteiler zwischen einer Spannungsreferenz. Der Messwiderstand variiert in Bezug auf eine Gaskonzentration. Ich lese die Spannung zwischen einem Lastwiderstand und Masse. Da die Konvertierung nicht hochpräzise ist (12 Bit), wollen wir kein bisschen verschwenden. Der Messwiderstand kann den Maximalwert von 60 k erreichen: In diesem Fall ist V am Lastwiderstand minimal.

Die Lösung, die wir gefunden haben, besteht darin, diese Mindestspannung mit einem Operationsverstärker von Vin zu subtrahieren.

Und jetzt die Fragen: Interagiert der Spannungsteiler mit den Widerständen der Diff-Operationsverstärkerschaltung ( https://en.wikipedia.org/wiki/Differential_amplifier )?

Wird es nützlich sein, einen Unity-Gain-Puffer zwischen Vref_min und dem negativen Eingangspin des Operationsverstärkers zu platzieren?

Ist diese Idee mit einem normalen rauscharmen Operationsverstärker wie diesem erreichbar?

http://it.farnell.com/texas-instruments/tl072ip/ic-op-amp-jfet-pdip8/dp/1459704 ?

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Hier der Schaltplan. Ich muss einen Unity-Gain-Puffer anstelle von "???" Knoten?

Ist die Schaltung in Ordnung?

Können Sie einen Schaltplan (bearbeiten Sie Ihre Frage, drücken Sie dann Strg-M und zeichnen Sie einen) und einen Link zum Datenblatt des Sensors hinzufügen?
Durch Hinzufügen eines Verstärkungsverstärkers mit Einheitsverstärkung (Pufferverstärker) überwinden Sie das Problem des Quellenwiderstands, insbesondere wenn der Widerstand variiert. Der tl072 ist ein guter Allzweck-Operationsverstärker, aber Sie könnten etwas mit etwas geringerem Rauschen wie einen LT1012 oder ähnliches in Betracht ziehen.
Was ist die minimale Spannung, die Sie mit Ihrem Widerstand gegen Masse erhalten (Sensor bei 60 kOhm) und welche maximale Spannung erwarten Sie (Sensor bei minimalem Widerstand)?
@Andyaka es hängt von Vref und Rload ab. Bei einer Vref von 2,048 V und einer Rload von 10 k variiert die Spannung an Rl zwischen 0,293 V und 1,575 V. Wenn ich 0,293 V mit einem Unterscheidungsmerkmal ohne Verstärkung wie im Schaltplan subtrahiere, beträgt der Bereich 0 - 1,282 V, und ich kann alle 12 Bit der ADC-Konvertierung verwenden.

Antworten (3)

Wenn Sie eine Referenzspannung von (sagen wir) 3 V haben, ist der Bereich, den Ihr Eingang sieht, folgender: -

  • 3V * 10k/13k = 2,307V (Sensor bei 3kOhm)
  • 3V * 10k/70k = 0,428V (Sensor bei 60kOhm)

Wenn Sie eine Stromerregung von 50 uA und einen geerdeten Sensor verwendet haben, ist der Bereich, den Ihre Eingabe sieht, folgender: -

  • 50e-6 * 3k = 0,15 V (Sensor bei 3 kOhm)
  • 50e-6 * 60k = 3,0 V (Sensor bei 60 kOhm)

Bei einer Stromerregung beträgt der verwendete Prozentsatz Ihres 3-V-Referenzbereichs 95% . Mit Spannungs- und Widerstandsanregung bekommt man nur 63% der Reichweite.

Wenn Ihre Referenzspannung niedriger oder höher ist, gelten die obigen "Bereichs"-Aussagen immer noch.

Geben Sie hier die Bildbeschreibung ein

Hier ist ein Beispiel. Ein ADC-Eingang ist direkt mit dem Sensor verbunden. Der Sensor wird über den PNP-Transistor mit 50uA gespeist. Die 50 uA werden über "R" gemessen und vom Operationsverstärker mit "V" verglichen. Der Operationsverstärker hält den Strom durch R auf einem Wert, der eine Spannung "V" darüber erzeugt. Mögliche Werte sind R=10k und V=0,5V oder R=20k und V=1V. Es sollte ein Operationsverstärker gewählt werden, der eine E/A-Leistung nahe bei beiden Schienen aufweist, wie ein AD8605 (von mir oft in derselben Konfiguration für die Dehnungsmessstreifenerregung verwendet).

Hier ist eine schnelle DC-Simulation für 60k- und 3k-Lasten: -

Geben Sie hier die Bildbeschreibung ein

Der verwendete Transistor ist BC547C oder BC847C für Personen mit gutem Sehvermögen.

Beachten Sie, dass der Strom aufgrund kleiner Basisströme im Transistor nicht 50 uA, sondern 49,846 uA bei einer Last von 60 kOhm und 49,849 uA bei einer Last von 3 kOhm beträgt. Beachten Sie auch die Spannungen am Sensor - 2,991 V bei 60 k Last und 149,5 mV bei 3 k Last.

Das Problem ist, dass die interne Referenz des ADC 1 V beträgt, sodass ich den Ausgang des Operationsverstärkers auf den Bereich [0-1 V] oder [0-2 V] konzentrieren muss (letzteres mit einer internen Verstärkung von 0,5). Ich habe keine Erfahrung mit Stromerregung..
@Mark - Stellen Sie sich für die Stromerregung eine Konstantstromquelle vor, die einen geringen Strom in den Sensorwiderstand erzeugt. Wie Andy angegeben hat, ist die andere Seite des Sensorwiderstands geerdet. Dieses Schema ermöglicht die volle Nutzung des A/D-Eingangsbereichs, da der Erregungsstrom so eingestellt werden kann, dass er den maximalen A/D-Eingang erzeugt, wenn der Sensorwiderstand auf seinem höchsten Wert ist. Die Stromquelle möchte von einer Spannungsschiene vorgespannt werden, die höher als der A/D-Eingangsbereich ist, damit die Stromquelle genügend Nachgiebigkeit hat, um mit den Änderungen der Last darauf fertig zu werden.
@MichaelKaras Ich hätte es selbst nicht besser ausdrücken können.
Hört sich gut an. Ich bitte Sie um einen weiteren Schritt. In Ihrem Schema habe ich einen 20K-Widerstand R und ein V von 1 eingesetzt. Wenn Rsense auf maximalem Wert = 60k liegt, beträgt der Gesamtwiderstand 80k, also beträgt der Strom 12,5mA. Ich sehe die Rolle des Operationsverstärkers in dieser Schaltung nicht. Zwischen den beiden R-Pins muss eine Spannungsdifferenz bestehen, damit der PNO immer erregt ist. Oder nicht? Danke Leute!
@Mark, du musst das falsch verkabelt haben. Die 1V muss auf die positive Versorgungsschiene (5V) bezogen werden. Die gezogenen Ströme sollten 50 Mikroampere betragen, sicherlich keine Milliampere. Der Operationsverstärker wird benötigt, um die Spannung über dem Widerstand auf genau 1 V zu stabilisieren, und 1 V geteilt durch 20 kOhm sind 50 Mikroampere. Simulieren Sie es?
Du hast Recht, ich habe falsch gerechnet. Es scheint eine großartige Lösung zu sein. In diesem Fall erhalte ich mit einem Strom von 50 uA und einem Widerstand von 60 k 3 V am Eingang des ADC. Und mit Rsense = 3k Vin=0,15V. Mein Ziel ist es, einen Vin-Bereich so nahe wie möglich an [0-1 V] zu erhalten. Irgendwelche Tipps?
@Mark - verwenden Sie eine kleinere Spannung (z. B. 0,3333 V) oder erhöhen Sie den Widerstand auf 60 k - mit 1 V darüber werden 16,667 uA durch die 60 k erzeugt, was Ihnen 1 V ergibt !!! Wenn Sie die Verstärkung von 0,5 haben, würde ich in Betracht ziehen, diese zu verwenden und mit 33,333 uA (30 k Emitterwiderstand) zu laufen. Siehe auch die Simulation, die ich am Ende meiner Antwort angehängt habe (50uA)
Du bist mein Retter (ich weiß nicht, ob das richtig ist). Wie Sie sehen können, ist mein Englisch sehr schlecht. Danke!
Sorry letzte Frage: Wie bekomme ich die 1V und 5V Werte? Mit Spannungsbezug? Mit einem Zener? Ist es schließlich möglich, den Vin-Bereich zwischen [0-1] V und nicht zwischen [0,15-1] V zu verschieben?
Ihr ADC auf dem ATMega sollte in der Lage sein, 5 V zu erzeugen. Wenn es 3V3 ist, lass es mich wissen. Für die 1 V sollten Sie eine anständige "Shunt-Referenz" wie REF1112 verwenden - es sind 1,25 V, aber das ist kein Problem, da Sie den Strom wieder auf das bringen, was Sie benötigen, indem Sie den Emitterwiderstand um 25% vergrößern. Das positive Ende (Vo genannt) des REF1112 wird mit 5 V verbunden und das negative Ende können Sie über einen 1-kOhm-Widerstand mit Masse speisen. Die Verbindung von 1k-Widerstand und negativem Ende von REF1110 speist den Operationsverstärker
In Bezug auf das Verschieben der Spannung würde ich dazu neigen, dies nicht zu tun. Sie werden feststellen, dass Sie eine ausreichende Auflösung erhalten, wenn Sie mehrere Messwerte im Atmega mitteln. Dies wird als "Dithering" bezeichnet und kann die Auflösung um einige Bits erhöhen. Es gibt Internetartikel darüber.
@Andyaka - Er verwendet keinen ATmega, sondern einen AT x Mega. Die interne vRef davon beträgt tatsächlich 1,0 V, und die maximale vRef, die die Teile unterstützen, beträgt tatsächlich Vcc-0,6 V, was 2,7 V entspricht (Vcc Max beträgt 3,3 V - sie unterstützen keinen 5-V-Betrieb).
@ConnorWolf - Ich denke, der Op sollte das herausfinden - ich habe ein paar Kommentare oben gegeben, dass er es mich wissen lassen sollte, wenn es 3V3 wäre, aber das Grundprinzip bleibt dasselbe - die Ilimit-Schaltung wird von 3V3 aus funktionieren und er kann fahren es mit 16,7uA.
Das Mikro ist ein ATXMega256A3BU und die Vcc beträgt 3,3 V. Ich habe keinen Kommentar hinzugefügt, da das Funktionsprinzip dasselbe ist. Danke!
Zunächst einmal möchte ich diese Konversation nicht in den Chat verschieben, weil ich denke, dass sie für andere Benutzer nützlich sein wird. @Andyaka noch etwas, mein Kollege sagte mir, dass die 3,3-V-Vcc nicht sehr genau ist. Das stört den Präzisionsstromkreis? Ich denke ja. Lösungen?
@ Mark Nein, es hängt überhaupt nicht von der 3V3-Genauigkeit ab. Wenn es also 3,1 oder 3,5 V wären, wäre es egal. Der REF1112 definiert eine genaue 1,25 V und der Operationsverstärker erzwingt im geschlossenen Regelkreis diese 1,25 V über den Emitterwiderstand. Eine verrauschte Versorgung kann jedoch Probleme verursachen, also entkoppeln Sie das REF1112 mit einer 100-nF-Kappe. Aber selbst wenn es laut wird, bleibt der durchschnittliche Strom konstant, und wie ich bereits erwähnt habe, können Sie das Rauschen im Code filtern. Sie können auch 100 nF oder 1 uF+ über den Sensor hinzufügen.
@Andyaka kannst du mir die Rolle des Transistors erklären? Ist es nicht möglich, den gleichen Effekt mit einer Spannungsreferenz und einem Widerstand zu erzielen? Danke!
Der Kollektor des Transistors ist die eigentliche Stromquelle und sein Kollektorstrom wird durch die Spannung an seinem Emitterwiderstand bestimmt. Diese Emitterspannung wird aufgrund des Operationsverstärker-Rückkopplungswiderstands auf genau 1 V unter der positiven 5-V-Schiene gehalten, was bedeutet, dass der Strom in den Emitter konstant ist. Ihre Idee zu einer Spannungsreferenz und einem Widerstand verstehe ich nicht - eine neue Frage würde helfen. Es schadet nicht, etwas anzubieten, das funktionieren könnte.
Aber der Transistor verstärkt den Strom nicht?
@Mark Ich verstehe deine Frage nicht. Natürlich verstärkt der Transistor den Strom, denn genau das tun BJTs - die Verstärkung eines BJT ist Ic / Ib
@Andyaka Ich danke dir für deine Geduld. Und die andere Frage ist: Ist es nicht besser, die negative Rückkopplung mit Ic und nicht mit Ie zu verbinden, wenn man den Spannungsabfall des BJT berücksichtigt?
Nein, das wird nicht funktionieren - die negative Rückkopplung "misst" die Spannung über dem Emitterwiderstand. Der Operationsverstärker arbeitet, um die Spannung über dem Emitterwiderstand auf 1 V zu halten. Dies geschieht durch die Verwendung des Transistors, und es ist so, dass der Emitterstrom praktisch gleich dem Kollektorstrom ist.
@Andyaka Ok jetzt bin ich überzeugt. Am Montag werde ich meine Schaltung auf einem Stripboard realisieren. Der letzte Zweifel ist der Lärm. Ein so kleiner Strom kann durch Umgebungsgeräusche und auch durch die Stripboard-Schaltung selbst gestört werden.
Wenn Sie Rauschen sehen, das sich auf die Ergebnisse auswirkt, stellen Sie zunächst sicher, dass das, was Sie zum Erzeugen der 1 V zwischen Vin + und der positiven Stromschiene (5 V?) Verwenden, einen anständigen Kondensator wie 100 nF hat. Die einzige andere erwähnenswerte Rauschquelle ist der Operationsverstärker - wenn Sie einen Kondensator vom Kollektor zur Masse zulassen können, wird das Rauschen wirklich niedrig.

Dies geht zwar nicht direkt auf Ihre Frage ein, beschreibt aber ein Problem, auf das Sie in naher Zukunft stoßen werden.

Grundsätzlich sind die ATxmega-ADCs ziemlich unbrauchbar , wenn sie an die interne 1,0-V-Referenz des xmega angeschlossen sind. Sie erhalten ungefähr 16 Geräusche, egal was Sie tun.

Der allgemeine Konsens scheint zu sein, dass Sie wirklich eine externe Referenz verwenden müssen , wenn Sie den internen ADC von ADxmega verwenden möchten . Im Idealfall könnten Sie den gesamten Bereich von 0 bis 3,3 V verwenden, aber der ADC unterstützt nur Referenzen bis zu Vcc - 0,6 V, daher sind 2,5 V wahrscheinlich die beste Idee.

Ich habe kürzlich an einem Projekt gearbeitet, das einige Potentiometer für die Benutzeroberfläche hatte, die mit den xmega ADCs verbunden waren. Ich hatte tatsächlich Probleme mit dem Rauschen. Ich konnte sie durch massives Oversampling (x4096-mal!) lösen, aber es gab mir immer noch nur vielleicht 10 Bit nutzbare Auflösung.
Nun, mein Layout war wirklich, wirklich nicht ideal (das UI-Zeug wurde hinzugefügt, nachdem ich die Boards zum Fabben geschickt hatte, es wurde an etwas gehängt, das nur ein Debugging-Port sein sollte , und hatte überall Drähte und so weiter).

Atmel hat angeblich die ADC-Probleme bei Teilen mit dem Suffix „u“ (wie ATxmega32A4U vs. ATxmega32A4) „behoben“, aber ich hatte keine Änderung, um mit den „U“-Teilen zu arbeiten.

Vielen Dank, ich habe auf Avrfreaks über diese Probleme mit der internen 1-V-Referenz gelesen. Meine Idee ist es, es zu testen und herauszufinden, ob der ATXMega256A3BU eine feste interne ADC-Referenz hat. Ich denke, wenn die Konditionierungsschaltung und der Treiber gut ausgelegt sind, ist es möglich, ein zweites Mal eine externe Referenz einzufügen, Widerstände zu ändern und ein paar Codezeilen. Sind Sie mit diesem Plan einverstanden? Haben Sie schon einmal erlebt, dass ADC-Spannungen an einem Widerstand abgelesen werden? Sie haben Stromerregung oder Spannungsteiler verwendet?
@Mark - Ich habe gerade ADC-Messungen eines direkten Spannungsteilers im Single-Ended-Modus ohne externe Referenz vorgenommen (ich hatte die Pins nicht!), Daher kann ich die Realisierbarkeit anderer Optionen nicht wirklich kommentieren aus erster Hand.
Wenn ich in Ihrer Situation wäre, würde ich die PCB-Footprints hinzufügen, um eine kostengünstige 2,5-V-Referenz auf der PCB hinzuzufügen, und einige optionale 0-Ω-Widerstands-Footprints haben, damit Sie sie installieren und anschließen können, wenn Ihr Plan für die Signalkonditionierung nicht schwenkt aus. Es ist erwähnenswert, dass die Filterung am analogen Eingang wahrscheinlich nicht viel hilft, da das Rauschen im ADC intern ist . Ihre Optionen sind wirklich nur: 1. Verwenden Sie eine externe vRef, 2. Verwenden Sie den internen Spannungsteiler von Vcc und 3. Verwenden Sie die interne vRef und dezimieren Sie sie zum Teufel.
Es gibt einige wirklich, wirklich billige Spannungsreferenzen da draußen. Der LM336Z25 kostet 0,51 $ in Einzelstückzahlen auf digikey. Das, ein Widerstand und eine Kappe wären alles, was Sie brauchen.

Ja, Sie können die Eingänge zum Differenzverstärker puffern, und es kann Gründe dafür geben. Ein Instrumentationsverstärker wie der AD620 ist jedoch bereits vorgepuffert und verfügt über leicht einstellbare Verstärkungen. Wenn Sie einseitige Rail-to-Rail-Funktionalität (eine Stromversorgung) benötigen, gibt es den AD623.

Die niedrigen Kosten sind ein wichtiges Merkmal für dieses Projekt. Offensichtlich ohne Leistungsverlust. Ich habe den TL072IP vorgeschlagen, weil er zwei Kanäle hat und es möglich ist, einen Kanal zum Puffern des negativen Eingangs und den anderen Kanal für den Differenzbetrieb zu verwenden. Und es kostete 0,68€ gegenüber den 5,14€ des AD623.