Verwenden eines digitalen Eingangsstifts zum Lesen des variablen Widerstands vom Sensor, der Versorgungsspannung benötigt

Ich beabsichtige, den Luftschadstoffsensor TGS 2602 einzusetzen . Der Innenwiderstand ändert sich, wenn ein bestimmtes Gas erkannt wird. Für den Betrieb ist eine Eingangsspannung erforderlich V_C = 5V.

Gemäß den Spezifikationen ist die grundlegende Messschaltung:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Das Problem, mit dem ich konfrontiert bin, ist, dass ich die Messungen mit digitalen IO-Pins lesen möchte, insbesondere möchte ich Raspberry Pi dafür verwenden. Ich habe hier eine einfache Lösung für ein ähnliches Problem gefunden: Lesen analoger Sensoren mit einem GPIO-Pin . Im Wesentlichen geht es darum, eine RC-Schaltung zu verwenden und die verstrichene Zeit zu messen, bis an unserem digitalen Pin eine "hohe" Spannung auftritt.

Lesen analoger Sensoren mit einem GPIO-Pin - Bild

In diesem Fall wäre ich dann geneigt, einfach R_Lmit einem Kondensator zu schalten, aber damit würde ich schnell die Versorgungsspannung für den Sensor unterbrechen (erfordert V_C). Ich dachte dann, ich sollte vielleicht den Kondensator parallel zu schalten R_L. Aber der R_LSpannungsabfall ist gering, daher würde ich niemals die "hohe" Spannung am Kondensator erreichen, um sie mit meinem digitalen Pin lesen zu können. Sollte ich vielleicht einen Operationsverstärker verwenden, um das hochzufahren V_RL? Aber verkompliziert es die Dinge nicht zu sehr?

Meine Frage ist dann, wie soll ich den Wert R_Smit einem digitalen Lesegerät messen?

Antworten (2)

Beachten Sie zunächst, dass Ihr Sensor sowohl für die Heizung als auch für den Sensor eine 5-V-Versorgung mit + -0,2 V benötigt. Das RPI sollte +5 V zur Verfügung haben.
Die von Ihnen vorgeschlagene Kondensatorentladungsmethode ist eine der wenigen, die RPI zur Verfügung steht, um ein analoges Signal in eine digitale Darstellung umzuwandeln. RPI-GPIO-Pins erfordern einen Spannungsbereich zwischen 0 und +3,3 V. Laut Datenblatt beträgt der Mindestlastwiderstand 450 Ohm. Kein Maximum, daher könnte eine Kondensatorlast akzeptabel sein:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Diese Schaltung auf der linken Seite könnte funktionieren, wenn Sie die Schaltung mit GPIO als Ausgang im Leerlauf lassen und eine logische Null programmieren, die R1 zwingt, den Zellenwiderstand R2 nach unten zu ziehen, bis Sie einen Messwert eingeben möchten. Das Lesen kann schnell genug gehen, um den Widerstand der R2-Zelle nicht zu sehr zu stören.


Wenn Sie den Zellenbetrieb nicht durch den vorgeschriebenen Lastkreis stören möchten, kann der Verstärker rechts eine ähnliche Methode zum Laden/Timing von Kondensatoren ermöglichen. Ein schneller Lauf mit LTSPICE schlägt einen Zeitbereich zwischen 800 uS für einen Sensorwiderstand von 100 kOhm und etwa einer Sekunde für einen Sensorwiderstand von 10 kOhm vor. Der Zellenwiderstand R4 bleibt immer in der Nähe von 5 V.
Beachten Sie jedoch, dass die GPIO-Messsequenz einen Polaritätsschalter erfordert: C2 muss entladen werden, indem GPIO auf logisch hoch gesetzt wird, dann zieht Transistor Q1 ihn langsam nach unten in Richtung logisch 0

Der rechte ist ein guter analoger Verstärker. Ich würde drei Änderungen daran vornehmen: 1) Ich würde diese Diode aus demselben Transistor wie Q1 bilden, um Vbe-Disparitäten zu minimieren. 2) Ich würde R6 mit der Basis von Q1 verbinden, um eine negative Rückkopplung einzuführen. Ich würde auch einen größeren Wert verwenden; 3) Ich würde einen kleineren Widerstand mit dem gleichen / ähnlichen Wert wie R5 einfügen.
Die Schaltung funktioniert, weil die Diode die erforderliche Vorspannung liefert, um die Basis von Q1 anzuheben, damit sie ein kleines Signal verstärken kann. Als solches ist es empfindlich gegenüber Unterschieden zwischen dieser Diode und Q1. Alles, was ich zu tun versuchte, war, einen sichereren Schutz zu entwerfen, um solche Unterschiede zu minimieren.
Zum OP: Sie sollten bei der Auswahl von R5 vorsichtig sein: Sein Wert wird durch den kleinstmöglichen Wert des Sensors, die Versorgungsspannung und die Mindestspannung bestimmt, die der Sensor zum Arbeiten benötigt. Bei einem Mindestwiderstand von 10k, 5V Rail und 0,2V Headroom beträgt der Maximalwert von R5 0,2 / (5V / 10k) = ...
@dannyf Der Verstärker rechts liefert Timing-Ergebnisse, die von der Transistor-HFE-MCU-Softwarekalibrierung abhängen. Ihr Vorschlag, D2 zu einem ähnlichen Transistor zu machen, ist gut. Die Verstärkung kann so wie sie ist etwas höher als nötig sein. Vielleicht R5 reduzieren?
glen_geek - Ich habe 2 Fragen, wenn ich darf. 1) Warum müssen wir auf dem Weg von C2 zur Erde keine Widerstände hinzufügen? Wird es nicht sofort entladen? Das ist ein Problem, das ich habe. Nach der Bemerkung von @ dannnyf habe ich anstelle der Diode denselben Transistor wie Q1 verwendet (obwohl ich bc548 anstelle von 2N2222 verwendet habe). Ich kann einen größeren Kondensator verwenden, um dies zu überwinden. Bei 10 uF dauert es ~ 0,3 s, um sich bei R2 = 100 k auf niedrig zu entladen, und ~ 0,003 s bei R2 = 10 k. 2) Warum überhaupt Vdd = 3,3 V verwenden? Kann ich es nicht einfach an Masse anschließen? Ich muss GPIO im 'High'-Modus verwenden, um den Kondensator trotzdem aufzuladen.
Wenn GPIO auf High-Z geht, führt der einzige Entladepfad von C2 über den Kollektorstrom von Q2. C2 sollte nicht so groß wie 10uf sein: Es belastet GPIO zum Aufladen. Und C2 sollte kein polarisierter Typ sein. Halten Sie C2 kleiner, stellen Sie die Entladezeit ein, indem Sie R6 erhöhen. 2) Ja, Sie können C2 vom Kollektor von Q2 auf Masse legen. GPIO geht zum Kollektor zum Laden auf Vdd (RPI Vdd = 3,3 V). Lassen Sie GPIO mindestens 20 uS Zeit, um C2 vollständig auf Vdd aufzuladen, bevor Sie Ihren Timer starten und GPIO in seinen High-Z-Zustand versetzen.

Ziemlich einfach. Ihr Sensor ähnelt eher einem CCS, dessen Ausgangsstrom mit dem Gas variiert, das er erkennt.

Verwenden Sie also das CCS, um einen Kondensator aufzuladen, und die Zeit, die das gpio benötigt, um hoch zu werden, variiert mit dem CCS-Strom, daher ist sein Widerstand.

Das Verfahren geht so, vorausgesetzt, das GPIO ist mit dem Kondensator und Ihrem Sensor verbunden.

1. Geben Sie ein Low auf dem gpio aus und schalten Sie es als Ausgang. warte ein kleines bisschen. Dadurch wird der Kondensator entladen.

  1. Schalten Sie das gpio als Eingang ein. Dadurch kann der Kondensator aufgeladen werden.

  2. Zählen Sie die Zeit, bis das gpio hoch geht.

  3. Die Zeitmessung ist eine Funktion des Stroms.

Der älteste Trick, den es gibt, ist, dass die MCU analog mit einem ADC liest.

Ja, aber ich sehe hier ein mögliches Problem. Wenn ich den Kondensator in Reihe schalte, wird der Sensor beim Aufladen fast sofort ausgeschaltet (erfordert V_C = 5 V + - 0,2 V). Wenn ich es andererseits parallel zu R_L lege, wird die Spannung am Kondensator niemals hoch genug sein, um am GPIO "high" zu erreichen. Oder verstehe ich etwas falsch?
das wäre ein Problem. Aber das gleiche Prinzip kann auf (analoge) Komparatoren angewendet werden. Sie können die Spannung über dem Kondensator mit einer Referenzspannung vergleichen - entweder extern eingestellt oder intern erzeugt. Einige MCUs können Spannungsreferenzen bis zu 200 mV oder sogar weniger liefern. Wieder das gleiche Prinzip, aber andere Hardware.