Sie haben also:
R_x R_fixed
Vcc -----^v^v^----+----^v^v^------- Gnd
|
|
+--- V_sensed --- ADC input
Rx ist ein unbekannter Widerstand (wahrscheinlich ein Sensor). Und Sie verwenden R_fixed derzeit bei 0,1%, um R_x effektiv zu berechnen, möchten jedoch einen günstigeren Festwiderstand mit einer geringeren Toleranz von möglicherweise 1% verwenden. Dabei möchten Sie während der Produktion eine Art Kalibrierung durchführen, um den erhöhten Fehler zu korrigieren. Ist das richtig?
Die Art und Weise, wie Sie dies tun, besteht darin, ein Byte in das EEPROM (oder einen anderen nichtflüchtigen Speicher) zu legen, das als "Offset" in Ihrer Berechnung fungiert, und dies ist eine durchaus praktikable Sache. Die Sache ist, dass es Sie einige Zeit während der Produktion kosten wird, die Kalibrierungsaktivität durchzuführen. Um die Kalibrierung durchzuführen, benötigen Sie einen dieser 0,1% -Widerstände (nennen Sie es R_cal) mit einem nominell vergleichbaren Wert wie Ihr 1% -Widerstand, um R_x in die Schaltung zu ersetzen. Wenn Sie V_sensed messen, können Sie den Wert von R_fixed genauer ableiten (dh auf etwa 0,2%).
Wenn R_cal und R_fixed nominell der gleiche Wert sind, würden Sie erwarten, dass V_sensed gleich Vcc / 2 ist. Sie würden die gemessene Abweichung von Vcc / 2 als Kalibrierungsversatzbyte speichern und sie immer zu V_sensed hinzufügen, wie von Ihrem ADC wahrgenommen.
Die Gefahr besteht meines Erachtens darin, dass die Durchführung der Messung und die anschließende Speicherung des Werts eine Menge Arbeit erfordern. Eine andere Sache, die als Fallstricke betrachtet werden sollte, ist, dass die Temperatur eine Rolle dabei spielen kann, dass ein Widerstand vom Nennwert abweicht. Daher möchten Sie eine einigermaßen gut temperaturgesteuerte Kalibrierungsumgebung. Vergessen Sie nicht, kalibrierte Messgeräte zu verwenden, da dies eine weitere mögliche Quelle für additive Fehler ist. Eine letzte Gefahr, die ich mir vorstellen kann, ist, dass das Kalibrierungsbyte in Einheiten des lsb Ihres ADC gespeichert werden sollte (wenn Sie also einen 12-Bit-ADC haben, sollten die Einheiten des Kalibrierungsoffsetbytes "Vcc / 2 ^ 12 Volt" sein). .
Bearbeiten
Wenn Sie zwei Festwiderstände verwenden, um eine große Spannung wie folgt auf eine niedrigere Skala aufzuteilen:
R1_fixed R2_fixed
V_in -----^v^v^----+----^v^v^------- Gnd
|
|
+--- V_sensed --- ADC input
Überarbeiteter Abschnitt
Nun möchten Sie eine Präzisionsspannungsreferenz (V_cal) verwenden, um V_in während eines Kalibrierungsschritts in der Produktion zu stimulieren. Was Sie dort haben, ist theoretisch:
V_sensed = V_predicted = V_cal * R2_fixed / (R1_fixed + R2_fixed) = V_cal * slope_fixed
Aber was Sie in Wirklichkeit haben, ist:
V_sensed = V_measured = V_cal * R2_actual / (R1_actual + R2_actual) = V_cal * slope_actual
Tatsächlich haben Sie in der Realität eine andere Steigung der Übertragungsfunktion als anhand der Widerstandswerte vorhergesagt. Die Abweichung von der vorhergesagten Teilerübertragungsfunktion ist in Bezug auf die Eingangsspannung linear, und Sie können davon ausgehen, dass 0 V Eingang 0 V Ausgang ergibt. Wenn Sie also eine präzise Spannungsreferenzmessung durchführen, sollten Sie genügend Informationen erhalten, um diesen linearen Skalierungsfaktor zu charakterisieren . Nämlich:
V_measured / V_predicted = slope_fixed / slope_actual
slope_actual = slope_fixed * V_measured / V_predicted
Und Sie würden Steigung_Aktual als Ihren kalibrierten Wert verwenden, um die Spannung in Abhängigkeit von der gemessenen Spannung zu bestimmen.
unten mit freundlicher Genehmigung von @markrages
Um die tatsächliche Steigungsempfindlichkeit gegenüber Widerstandswerten zu erhalten, ist eine teilweise Differenzierung erforderlich: