Entonces tienes:
R_x R_fixed
Vcc -----^v^v^----+----^v^v^------- Gnd
|
|
+--- V_sensed --- ADC input
Rx es una resistencia desconocida (probablemente un sensor de algún tipo). Y está usando R_fixed al 0.1% en este momento para calcular efectivamente R_x, pero desea usar una resistencia fija más barata con una tolerancia más baja de quizás 1%. Al hacerlo, desea realizar algún tipo de calibración durante la producción para corregir el error aumentado, ¿es así?
La forma en que termina haciendo esto es poniendo un byte en EEPROM (o alguna otra memoria no volátil) que actúa como un "desplazamiento" en su cálculo, y es algo perfectamente viable. La cuestión es que le costará algo de tiempo durante la producción realizar la actividad de calibración. Para realizar la calibración, necesitará una de esas resistencias de 0.1% (llámela R_cal) de valor nominal comparable a su resistencia de 1% para sustituir R_x en el circuito. Al medir V_sensed, puede inferir con mayor precisión el valor de R_fixed (es decir, a algo así como 0.2%).
Si R_cal y R_fixed son nominalmente el mismo valor, esperaría que V_sensed sea igual a Vcc / 2. Almacenaría la desviación medida de Vcc / 2 como un byte de compensación de calibración, y siempre la agregaría a V_sensed como lo percibe su ADC.
El obstáculo, según lo veo, es que hay un montón de trabajo involucrado en la medición y, posteriormente, en el almacenamiento del valor. Otra cosa a considerar como una trampa es que la temperatura puede desempeñar un papel en hacer que la resistencia se desvíe de su valor nominal, por lo que querrá un entorno de calibración razonablemente bien controlado por temperatura. Finalmente, no olvide usar equipos de medición calibrados, ya que es otra fuente potencial de error aditivo. Una última trampa que se me ocurre es que el byte de calibración debe almacenarse en unidades del lsb de su ADC (por lo tanto, si tiene un ADC de 12 bits, las unidades de byte de compensación de la calibración deben ser "Vcc / 2 ^ 12 voltios") .
Editar
Si está utilizando dos resistencias fijas para dividir un voltaje grande a una escala inferior de la siguiente manera:
R1_fixed R2_fixed
V_in -----^v^v^----+----^v^v^------- Gnd
|
|
+--- V_sensed --- ADC input
Sección reeditada
Entonces, ahora desea utilizar una referencia de voltaje de precisión (llámela V_cal) para estimular V_in durante un paso de calibración en la producción. Lo que tienes allí es en teoría:
V_sensed = V_predicted = V_cal * R2_fixed / (R1_fixed + R2_fixed) = V_cal * slope_fixed
Pero lo que tienes en realidad es:
V_sensed = V_measured = V_cal * R2_actual / (R1_actual + R2_actual) = V_cal * slope_actual
En efecto, tiene una pendiente de función de transferencia diferente en realidad de lo que predeciría a partir de los valores de resistencia. La desviación de la función de transferencia del divisor predicho será lineal con respecto al voltaje de entrada, y puede suponer con seguridad que 0V in le dará 0V out, por lo que realizar una medición de referencia de voltaje de precisión debería proporcionarle suficiente información para caracterizar este factor de escala lineal . A saber:
V_measured / V_predicted = slope_fixed / slope_actual
slope_actual = slope_fixed * V_measured / V_predicted
Y usaría pendiente_actual como su valor calibrado para determinar el voltaje en función del voltaje medido.
a continuación cortesía de @markrages
Para obtener la sensibilidad de pendiente real a los valores de resistencia se requiere una diferenciación parcial: