Vous avez donc:
R_x R_fixed
Vcc -----^v^v^----+----^v^v^------- Gnd
|
|
+--- V_sensed --- ADC input
Rx est une résistance inconnue (probablement un capteur quelconque). Et vous utilisez R_fixed à 0,1% en ce moment afin de calculer efficacement R_x, mais vous souhaitez utiliser une résistance fixe moins chère avec une tolérance inférieure de peut-être 1%. Ce faisant, vous souhaitez effectuer une sorte d'étalonnage pendant la production pour corriger l'erreur accrue, n'est-ce pas?
La façon dont vous finissez par le faire est de mettre un octet dans l'EEPROM (ou une autre mémoire non volatile) qui agit comme un "décalage" dans votre calcul, et c'est une chose parfaitement viable à faire. Le truc, c'est que ça va vous coûter un peu de temps pendant la production pour faire l'activité d'étalonnage. Pour effectuer l'étalonnage, vous aurez besoin d'une de ces résistances à 0,1% (appelez-la R_cal) de valeur nominale comparable à votre résistance à 1% pour remplacer le circuit par R_x dans le circuit. En mesurant V_sensed, vous pouvez déduire plus précisément la valeur de R_fixed (c'est-à-dire quelque chose comme 0,2%).
Si R_cal et R_fixed ont nominalement la même valeur, vous vous attendriez à ce que V_sensed soit égal à Vcc / 2. Vous stockeriez l'écart mesuré par rapport à Vcc / 2 comme octet de décalage d'étalonnage et l'ajoutez toujours à V_sensed tel qu'il est perçu par votre ADC.
Le piège, selon moi, est qu'il y a beaucoup de travail impliqué dans la mesure et ensuite dans le stockage de la valeur. Une autre chose à considérer comme un écueil est que la température peut jouer un rôle en faisant dévier une résistance de sa valeur nominale, vous voudrez donc un environnement d'étalonnage à température contrôlée raisonnablement bien. Enfin, n'oubliez pas d'utiliser un équipement de mesure calibré, car c'est une autre source potentielle d'erreur additive. Un dernier écueil auquel je peux penser est que l'octet d'étalonnage doit être stocké dans les unités du LSB de votre ADC (donc si vous avez un ADC 12 bits, les unités d'octet de décalage d'étalonnage doivent être "Vcc / 2 ^ 12 Volts") .
Éditer
Si vous utilisez deux résistances fixes pour diviser une tension élevée à une échelle inférieure comme suit:
R1_fixed R2_fixed
V_in -----^v^v^----+----^v^v^------- Gnd
|
|
+--- V_sensed --- ADC input
Section rééditée
Alors maintenant, vous voulez utiliser une référence de tension de précision (appelez-la V_cal) pour stimuler V_in lors d'une étape de calibration en production. Ce que vous avez là est en théorie:
V_sensed = V_predicted = V_cal * R2_fixed / (R1_fixed + R2_fixed) = V_cal * slope_fixed
Mais ce que vous avez en réalité, c'est:
V_sensed = V_measured = V_cal * R2_actual / (R1_actual + R2_actual) = V_cal * slope_actual
En effet, vous avez en réalité une pente de fonction de transfert différente de celle que vous prédisez à partir des valeurs de résistance. L'écart par rapport à la fonction de transfert du diviseur prévu sera linéaire par rapport à la tension d'entrée, et vous pouvez supposer en toute sécurité que 0 V en entrée vous donnera 0 V en sortie, donc faire une mesure de référence de tension de précision devrait vous donner suffisamment d'informations pour caractériser ce facteur d'échelle linéaire . À savoir:
V_measured / V_predicted = slope_fixed / slope_actual
slope_actual = slope_fixed * V_measured / V_predicted
Et vous utiliseriez pente_actual comme valeur calibrée pour déterminer la tension en fonction de la tension mesurée.
ci-dessous avec l'aimable autorisation de @markrages
Pour obtenir la sensibilité réelle de la pente aux valeurs de résistance, une différenciation partielle est nécessaire: