Ich verwende einen ADC MCP3008 und ein digitales Potentiometer MCP4131-103 (10k), um zu versuchen, eine Art "einstellbaren Spannungsteiler" zu erstellen.
Für das Projekt wird der Widerstand, den ich messe, variieren, und ich hoffte, den MCP4131 verwenden zu können, um meinen Referenzwiderstand im laufenden Betrieb anzupassen. Nämlich:
Vin
|
R1
|
|--Vout
R2
|
GND
Ich messe und protokolliere R1
(ein Material) im Laufe der Zeit, und es steigt von vielleicht 500 bis 20 kOhm über die Dauer des Interesses. Wenn ich einen Festwiderstand für verwende R2
, erhalte ich eine schlechte Auflösung, wenn der Wert nicht mit dem aktuellen Wert von übereinstimmt R1
. Ich hatte gehofft, dass sich der digitale Poti basierend auf dem laufenden Durchschnitt anpasst, damit ich auch meine Auflösung behalte.
Ich glaube, ich habe sowohl den MCP3008 ADC als auch den MCP4131, die einzeln mit meinem Raspberry Pi 3 über SPI arbeiten, aber sie scheinen nicht so zu funktionieren, wie ich es in einem Spannungsteiler-Setup erwarte.
Beim Verkabeln des MCP3008 wie in dieser Adafruit-Anleitung habe ich einen Spannungsteiler mit einem 10k-Widerstand R2
verwendet, um die folgende Formel zu finden R1
:
v_out = adc * 3.3/1024
R1 = R2*(3.3 - v_out)/v_out
| resistor used | calculated |
|---------------+-------------|
| 1000 | 1010 |
| 4700 | 4628 |
| 47000 | 46574 |
Das bestätigte, dass mein ADC gut zu funktionieren scheint.
Außerdem habe ich die Einstellungen für den MCP4131 durchlaufen und den Wert zwischen Hoch (3,3 V) und Wischer mit einem Multimeter manuell gelesen. In jedem Fall sende ich einen Wert von target resistance * 128/10000
. Ich habe die Ergebnisse aufgetragen und bekomme:
Das sah gut genug aus, um zu glauben, dass der Topf auch angeschlossen ist und korrekt funktioniert.
Wenn ich jetzt versuche, einen Spannungsteiler wie den obigen einzurichten, um sowohl das digitale Poti als auch den ADC zusammen zu testen, erhalte ich wackelige Ergebnisse. Ich habe zwei Konfigurationen zur Fehlerbehebung ausprobiert und den 4131 entweder als R1 oder R2 durch einen Festwiderstand als den anderen verwendeten ersetzt:
wiper pin of 4131 --|-- resistor -- GND
|
|
ADC
3.3V -- resistor --|-- wiper pin of 4131
|
|
ADC
Wenn ich in der ersten Konfiguration einen 10k-Widerstand verwende und das digitale Poti auf 5k einstelle, erhalte ich einen ADC-Rohwert von 403 oder 1,3 V. Ich hätte erwartet:
3.3V * (10000 / (10000+5000)) = 2.2V
Daraus ergibt sich eine Berechnung von:
10000*(3.3 - v_out)/v_out = 15384 # should be 5000
Wenn ich die Dinge vertausche und die zweite Konfiguration verwende, erhalte ich einen ADC-Wert von 624 oder 2,01 V. Ich erwarte einen Wert von:
3.3V * (5000 / (10000+5000)) = 1.1V
Daraus ergibt sich eine Berechnung von:
5000*(3.3 - v_out)/v_out = 3209 # should be 10000
Ich frage mich, ob das Potentiometer an und für sich wirklich ein Spannungsteiler ist und sich nicht so verhält, wie ich es erwarte. Sollte ich zum Beispiel meinen ADC ändern Aref
oder GND
auf einen der R_a
oder R_b
Pins am Potentiometer? Oder liegt der Fehler vielleicht in meinem Code und ich muss zwei Spannungsteiler hintereinander berücksichtigen?
Ich habe keine Beispiele für die Verwendung eines Potentiometers als einen der Widerstände in einem Spannungsteiler gefunden. Leider ist ein Potentiometer eines , die Suche nach "Verwendung eines Potentiometers in einem Spannungsteiler" erhält eine Menge Treffer, die einfach erklären, was Potis sind.
Vielen Dank für jede Anleitung, und ich freue mich, alle anderen Informationen zu veröffentlichen, die hilfreich wären.
Sie müssen Ihr digitales Potentiometer als Rheostat konfigurieren. Wenn Sie den Schleifer mit einer der Klemmen A oder B verbinden, erhalten Sie einen variablen Widerstand zwischen den beiden Klemmen A und B.
Laut Datenblatt steht der Schleifer auf B, wenn das digitale Potentiometer auf 0 steht, und A auf Vollausschlag. Das bedeutet, dass Sie wählen können, ob der Widerstand nahe 0 sein soll oder 10k wenn Sie den Min/Max-Wert in der Software einstellen, je nachdem, ob Sie A oder B an den Scheibenwischer anschließen. Dies kann Ihre Softwareroutine bequemer machen.
Die Zahlen, die Sie lesen, stimmen fast perfekt mit der Schaltung überein, die Sie gebaut haben (deren Schaltplan Sie leider noch nicht gepostet haben, aber umgekehrt werden können).
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Auf dem ersten:
während auf der zweiten
Ich denke jedoch nicht, dass dies die beste Schaltung zum genauen Messen von Widerständen ist: Der Wischerwiderstand, der normalerweise weit davon entfernt ist, stabil und sowohl in elektromechanischen als auch in elektronischen Potentiometern wiederholbar zu sein, wird wahrscheinlich driften und Ihre Messungen ausgleichen.
1/R_eq = 1/R1 + 1/R2
, richtig? Tatsächlich habe ich die Schaltung nicht wie Sie gezeichnet; Ich habe versucht, meine Konfigurationen zu zeigen, damit es kein Ratespiel war. Entschuldigen Sie die Unannehmlichkeiten und ich werde versuchen, meine Berechnungen auf der Grundlage dieser großartigen Erkenntnis zu aktualisieren!R1
) und meines Referenzwiderstands simuliert R2
. An beiden Extremen sind die Werte unglaublich „steppig“, wobei ein ADC-Wert einen riesigen Bereich von abdeckt v_out
. Ich bin mir nicht sicher, was üblich ist, wenn versucht wird, eine breite Palette potenzieller Widerstände zu messen.Ich weiß, dass dies wahrscheinlich keine großartige Form ist, aber ich wollte zusätzliche Daten / Diagramme für andere erfassen, die darauf stoßen. Ich habe angefangen, es auf die Frage zu setzen, aber das hat es wirklich lang gemacht, also wird es nur als Antwort hier sitzen.
Vielen Dank an awjlogan und carloc für ihre Antworten.
Ich beginne mit Carloc , der ein wunderbares Schema von dem erstellt hat, woran ich nicht denken konnte. In Anbetracht dieser Realität des "doppelten Spannungsteilers" musste ich nur meine Berechnungen ändern, fand jedoch, dass dies aufgrund der äquivalenten Widerstandsformel alles andere als ideal ist. Nehmen Sie dieses Szenario aus der Antwort, das ist die Konfiguration, die ich verwenden wollte:
Für das Schema auf der linken Seite stelle ich mir meinen Pot-Sollwert setpt
als eine Art "vorgeschalteten" Widerstand vor, der vom Wischer erzeugt wird, und ich bekomme einen R2
als meinen "nachgeschalteten" Widerstand. R1
, meine Messung von Interesse und bilden am setpt
Ende einen äquivalenten Widerstand, R_eq
, was Rpar
rechts dargestellt ist. Ich habe verschiedene Bereiche meines Materials von 1000 bis 20 kOhm und eine Reihe von Poti-Sollwerten simuliert. Für alle setpt
:
R2 = 10000 - setpt
R_eq = 1/((1/R1) + (1/setpt))
Hier ist ein Diagramm von R_eq
vs. R2
mit R1
gruppiert/farbig:
Es funktioniert also , aber beachten Sie, dass das Maximum, das R2
ich erreichen kann, viel geringer ist, R1
als es größer wird, weshalb ich diesen Ansatz sowieso ausprobieren wollte.
Allerdings war die Beleuchtung der Rennstrecke goldrichtig und traf den Nagel auf den Kopf in Bezug auf die Messwerte, die ich für so seltsam hielt.
Weiter zu awjlogans Vorschlag, der darin bestand, den Wischerstift und einen von P0A
oder P0B
kurzzuschließen, einen davon (im Gegensatz zum Wischer) als Eingang für meinen ADC zu verwenden. Ich stelle mir eine Schaltung so vor:
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Ich habe das Potentiometer in diesem Fall als zwei Widerstände gezeichnet, und der elektrische Fluss ist aufgrund des Kurzschlusses für die obere Hälfte irgendwie "blind". Auf diese Weise bekomme ich genau das, wonach ich gesucht habe, nämlich einen einfachen Spannungsteiler, bei dem ein Bein einstellbar ist.
carloc wies darauf hin, dass dies zu laut/ungenau/nicht wiederholbar sein könnte und dass einige Überprüfungen erforderlich sind. Für meinen vorläufigen Test habe ich Folgendes mit einigen Widerständen und verschiedenen Potentiometer-Sollwerten erhalten:
Hier die entsprechenden Rohdaten, mit Fehler abs((adc-measured)/adc)
in Prozent:
setpt adc measured error
1 2000 9441.3 9880 4.65
2 4000 9429.5 9880 4.78
3 6000 9515.2 9880 3.83
4 8000 9467.0 9880 4.36
5 10000 9504.8 9880 3.95
1 2000 4340.6 4610 6.21
2 4000 4376.3 4610 5.34
3 6000 4431.2 4610 4.03
4 8000 4431.0 4610 4.04
5 10000 4442.9 4610 3.76
1 2000 913.2 981 7.42
2 4000 934.9 981 4.93
3 6000 958.1 981 2.39
4 8000 914.0 981 7.33
5 10000 998.9 981 1.79
Zum Abschluss werden wir sehen, ob dies für meinen Testfall funktioniert. ~5% ist nicht schlecht, aber auch nicht großartig. Vergleichen Sie das mit einer Wiederholung meines ersten Tests des ADC selbst, angepasst an den gemessenen Wert meines 10k R2 (9880):
adc measured error
0 998 981 1.70
1 4635 4610 0.54
2 46640 46500 0.30
Das lässt 5% ziemlich schlecht aussehen!
Ich werde eine neue Frage stellen, wie ich den Widerstand eines variablen Materials messen kann, aber das war eine lustige Übung und hoffentlich hilft es jemandem auf dem Weg.
awjlogan
Szidor
Hendy
R1
(was ich messe). Die Bereiche sollten zwischen dem liegen, was ich aufgelistet habe: 500-20k Ohm. Ich habe noch einmal überprüft, ob ich "Impedanz" verstehe und es scheint sich auf Wechselstromkreise zu beziehen ... Entschuldigung, wenn ich falsch verstehe (Mech Engr hier!); Ich bin davon ausgegangen, dass Sie angedeutet haben, dass die Zuführung zu meinem ADC-Kanal einen Mindestwiderstand aufweist.Szidor
Szidor
Hendy
spidev
habe ich derzeitspi.max_speed_hz = 976000
; sieht so aus, als könnte ich das um ein Haar fallen lassen, wenn ich mir Sorgen um die 10k-Seite mache. Meine Testergebnisse sind nah genug, dass ich keinen Grund zu der Annahme sehe, dass ich in Bezug auf den Eingangswiderstand, den dieser Chip verarbeiten kann, weit daneben liege.awjlogan
Szidor
awjlogan
Szidor
awjlogan
Szidor
awjlogan
Szidor
awjlogan
Szidor
awjlogan