Así que 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 ahora estás usando R_fixed al 0.1% para calcular efectivamente R_x, pero quieres 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 incrementado, ¿no es así?
La forma en que terminas haciendo esto es poniendo un byte en EEPROM (o alguna otra memoria no volátil) que actúa como un "desplazamiento" en tu cálculo, y es una cosa perfectamente viable de hacer. La cosa es que le costará algún tiempo durante la producción hacer la actividad de calibración. Para realizar la calibración, necesitará uno de esos 0,1% de resistencias (llámelo R_cal) de valor nominal comparable a su 1% de resistencia para sustituir a R_x en el circuito. Midiendo V_sensed, puede inferir con mayor precisión el valor de R_fixed (es decir, a algo como 0.2%).
Si R_cal y R_fixed son nominalmente el mismo valor, usted 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 lo agregará a V_sensed como lo percibe su ADC.
El error, como lo veo, es que hay un montón de trabajo involucrado en hacer la medición y, posteriormente, en almacenar el valor. Otra cosa que se debe considerar como una trampa es que la temperatura puede jugar un papel en la resistencia a desviarse de su valor nominal, por lo que querrá un entorno de calibración razonablemente bien controlado por temperatura. Por último, no olvide utilizar equipos de medición calibrados, ya que esa es otra fuente potencial de error aditivo. Una última dificultad 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 calibración deben ser "Vcc / 2 ^ 12 Voltios") .
Editar
Si está utilizando dos resistencias fijas para dividir un voltaje grande a una escala más baja 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 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, en realidad tiene una pendiente de función de transferencia diferente a la que pronosticaría a partir de los valores de resistencia. La desviación de la función de transferencia de divisor predicha será lineal con respecto al voltaje de entrada, y puede asumir con seguridad que 0V le dará 0V fuera, por lo que realizar una medición de referencia de voltaje de precisión le dará 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 slope_actual como su valor calibrado para determinar el voltaje en función del voltaje medido.
debajo de la cortesía de @markrages
Para obtener la sensibilidad real de la pendiente a los valores de la resistencia se requiere una diferenciación parcial: