Quindi hai:
R_x R_fixed
Vcc -----^v^v^----+----^v^v^------- Gnd
|
|
+--- V_sensed --- ADC input
Rx è una resistenza sconosciuta (probabilmente un sensore di qualche tipo). E stai usando R_fixed allo 0.1% in questo momento per calcolare efficacemente R_x, ma vuoi usare un resistore fisso più economico con una tolleranza inferiore forse dell'1%. Nel fare ciò, si desidera eseguire una sorta di calibrazione durante la produzione per correggere l'errore aumentato, giusto?
Il modo in cui finisci per farlo è inserire un byte in EEPROM (o qualche altra memoria non volatile) che funge da "offset" nel tuo calcolo, ed è una cosa perfettamente praticabile da fare. Il fatto è che ti costerà del tempo durante la produzione per svolgere l'attività di calibrazione. Per eseguire la calibrazione, avrai bisogno di uno di quei resistori dello 0,1% (chiamalo R_cal) di valore nominale comparabile al tuo resistore dell'1% per sostituire R_x nel circuito. Misurando V_sensed, puoi dedurre più precisamente il valore di R_fixed (cioè a qualcosa come 0,2%).
Se R_cal e R_fixed hanno lo stesso valore nominale, ti aspetteresti che V_sensed sia uguale a Vcc / 2. Memorizzeresti la deviazione misurata da Vcc / 2 come byte di offset di calibrazione e lo aggiungeresti sempre a V_sensed come percepito dal tuo ADC.
Il problema, a mio modo di vedere, è che c'è un sacco di lavoro coinvolto nello svolgimento della misurazione e successivamente nella memorizzazione del valore. Un'altra cosa da considerare come una trappola è che la temperatura può svolgere un ruolo nel causare una resistenza che devia dal suo valore nominale, quindi avrai bisogno di un ambiente di calibrazione ragionevolmente ben controllato. Infine, non dimenticare di utilizzare apparecchiature di misurazione calibrate, poiché questa è un'altra potenziale fonte di errore additivo. Un'ultima trappola a cui riesco a pensare è che il byte di calibrazione dovrebbe essere memorizzato in unità dell'sb del tuo ADC (quindi se hai un ADC a 12 bit, le unità del byte di offset della calibrazione dovrebbero essere "Vcc / 2 ^ 12 Volt") .
modificare
Se si utilizzano due resistori fissi per dividere una grande tensione in basso su una scala inferiore come segue:
R1_fixed R2_fixed
V_in -----^v^v^----+----^v^v^------- Gnd
|
|
+--- V_sensed --- ADC input
Sezione modificata
Quindi ora vuoi usare un riferimento di tensione di precisione (chiamalo V_cal) per stimolare V_in durante una fase di calibrazione in produzione. Quello che hai lì è in teoria:
V_sensed = V_predicted = V_cal * R2_fixed / (R1_fixed + R2_fixed) = V_cal * slope_fixed
Ma quello che hai nella realtà è:
V_sensed = V_measured = V_cal * R2_actual / (R1_actual + R2_actual) = V_cal * slope_actual
In effetti, in realtà hai una pendenza della funzione di trasferimento diversa da quella che prevederesti dai valori della resistenza. La deviazione dalla funzione di trasferimento del divisore prevista sarà lineare rispetto alla tensione di ingresso e si può presumere che 0 V in entrata fornirà 0 V in uscita, quindi effettuare una misurazione di riferimento della tensione di precisione dovrebbe fornire informazioni sufficienti per caratterizzare questo fattore di scala lineare . Vale a dire:
V_measured / V_predicted = slope_fixed / slope_actual
slope_actual = slope_fixed * V_measured / V_predicted
E useresti la pendenza_attuale come valore calibrato per determinare la tensione in funzione della tensione misurata.
sotto per gentile concessione di @markrages
Per ottenere la sensibilità della pendenza effettiva ai valori della resistenza è necessario differenziare parzialmente: