A propos de calibration

A propos de calibration

Tous nos modules capteurs USB effectuent leurs mesures à l'aide de puces "capteurs" numériques, calibrées d'usine. C'est notre recette pour garantir la précision annoncée de nos modules, même lorsque les capteurs sont déportés. Pourtant, nous avons récemment introduit dans tous nos modules une fonction d'ajustement additionnelle, permettant d'effectuer au vol une correction aux mesures. Alors, à quoi bon corriger une mesure si elle est déjà juste? Cette recalibration ne risque-t-elle pas de réduire la précision de la mesure plutôt que de l'augmenter ?

Pour commencer, soyons clair: il ne s'agit pas de changer matériellement les paramètres originaux du capteur numérique, mais simplement d'apporter une correction numérique (transformation) sur la valeur retournée par le capteur. Bien qu'effectuée dans le module, la transformation est purement logicielle et entièrement réversible.

La principale raison de corriger a posteriori la mesure du chip capteur est d'intégrer à la valeur retournée par le module une réalité physique extérieure au capteur. Par exemple, si on place un Yocto-Light dans un boîtier transparent, la valeur retournée par le chip capteur de lumière sera légèrement inférieure à la lumière ambiante, car une partie de la lumière sera absorbée par le boîtier. Mais comme la proportion de lumière absorbée par le boîtier ne change pas, il suffit de faire "apprendre" au module la correspondance entre la valeur brute retournée par le capteur et la valeur physique effective pour obtenir automatiquement une valeur corrigée.

La valeur retournée par un luxmètre dans un boîtier est légèrement altérée, mais peut être corrigée par le module lui-même
La valeur retournée par un luxmètre dans un boîtier est légèrement altérée, mais peut être corrigée par le module lui-même



La correction est configurée dans le module en lui indiquant simplement la correspondance entre valeur brute et valeur corrigée pour un ou plusieurs points de mesure. Lorsqu'un seul point de correction est donné, la correction appliquée est un simple décalage. Lorsque plusieurs points sont donnés, la correction est automatiquement interpolée entre les points:

Effet d'une correction linéaire par 1, 2 et 5 points
Effet d'une correction linéaire par 1, 2 et 5 points


Le module Yoctopuce est capable de calculer lui-même de manière autonome l'interpolation linéaire de la correction, qui est stockée dans sa mémoire flash. Si vous aviez besoin d'une fonction d'interpolation plus subtile, il est aussi possible d'enregistrer dans l'API de programmation votre propre fonction de correction (utilisant par exemple une interpolation quadratique ou par spline).

Ce mécanisme de correction peut par ailleurs être détourné à d'autres fins. Par exemple, supposons que vous ayez acheté un ampèremètre USB Yocto-Amp, spécifié pour max 10A en continu (17A en pointe) en raison de l'échauffement du shunt à travers lequel passe le courant mesuré. Vous voudriez augmenter sa plage de mesures, quitte à diminuer un peu la précision pour les faibles courants. Voyons comment faire...

Dans un ampèremètre, le capteur mesure la minuscule différence de potentiel aux bornes du shunt et en déduit le courant à l'aide de la loi d'Ohm, I = U / R. Si on remplace le shunt de 0,01 Ohm par une résistance encore plus petite de 0,005 Ohm (qui chauffe deux fois moins) on peut faire passer plus de courant dans l’ampèremètre, mais la valeur retournée par l'ampèremètre sera réduite de moitié par rapport à la réalité. La calibration permet de corriger ce problème.

Pour transformer un Yocto-Amp 10A en Yocto-Amp  20A, il faut une resistance de 0.005 Ohm
Pour transformer un Yocto-Amp 10A en Yocto-Amp 20A, il faut une resistance de 0.005 Ohm


On enlève la résistance d'origine
On enlève la résistance d'origine


Et on la remplace par la nouvelle
Et on la remplace par la nouvelle



Pour que le module tienne compte de la modification matérielle, il suffit de donner les deux valeurs corrigées aux extrémités de la plage de mesures. Cette calibration étant enregistrée dans la mémoire flash du module, il n'y a besoin de la faire qu'une seule fois. Voici l'exemple de calibration écrit en Python: il se contente de dire au module que les valeurs -16000mA et 16000mA doivent être respectivement transformées en -32000mA et 32000mA. Le module sera alors capable d'en déduire les correction pour les valeurs intermédiaires.

#!/usr/bin/python
from yocto_api import *
from yocto_current import *

errmsg = YRefParam()
if YAPI.RegisterHub("usb", errmsg) != YAPI.SUCCESS:
    sys.exit("init error: "+errmsg.value)

# Look for a specific Yocto-Amp
serial = 'YAMPMK01-00001'
yoctoamp = YModule.FindModule(serial)
if not yoctoamp.isOnline():
    sys.exit("Yocto-Amp module not found!")

# Rescale DC measure
dc_ammeter = YCurrent.FindCurrent(serial+'.current1')
print("Raw measure: "+str(dc_ammeter.get_currentRawValue()))
dc_ammeter.calibrateFromPoints([-16000,16000], [-32000,32000])
print("Scaled measure: "+str(dc_ammeter.get_currentValue()))

# Rescale AC measure
ac_ammeter = YCurrent.FindCurrent(serial+'.current2')
print("Raw measure: "+str(ac_ammeter.get_currentRawValue()))
ac_ammeter.calibrateFromPoints([-16000,16000], [-32000,32000])
print("Scaled measure: "+str(ac_ammeter.get_currentValue()))

# Save changes to device flash
yoctoamp.saveToFlash()



Notez que le fait d'avoir utilisé une résistance plus basse réduit de moitié la précision des mesures à très bas courant (la résolution n'est plus que de 4mA environ), raison pour laquelle nous avons utilisé 0,01 Ohm dans notre produit. Bien sûr, la précision de la mesure dépend aussi directement de la précision de la résistance, qui doit être garantie à 1% pour obtenir une mesure à 1% avec le code ci-dessus. Bien sûr, si vous disposez d'un Ohmmètre ou d'un autre ampèremètre assez précis, rien ne vous empêche d'acheter une résistance 5%, moins chère, et d'intégrer une calibration supplémentaire dans la correction effectuée par le module...

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.