Comment optimiser la précision de lecture analogique d'un capteur?

Bonjour,
Je suis tout nouveau. J'ai une carte Leonardo et un module à effet Hall ST022 équipé d'un capteur SS49E.

J'ai comme projet de faire un joystick fait maison. Je voudrais utiliser le capteur pour mesurer les mouvement du manche. Il s'agit de petits mouvements. j'ai donc besoin d'une grande précision dans la mesure.

Pour le moment je n'ai fait qu'un test tout simple pour voir comment varie la valeur du capteur quand je bouge un aimant devant.
j'ai une valeur de 511 quand je suis loin et 560 quand je suis prêt (environ).
Ca ne me fait vraiment pas beaucoup de point de mesure. Du coup le retour du joystick va être tout saccadé. J'aimerais faire quelque chose de plus lisse. Il faudrait que j'augmente le nombre de point entre le min et le max. Vous avez une idée de comment faire ?

Bonjour et Bienvenue !

En arrivant sur le forum il est demandé de consulter les Bonnes Pratiques du Forum Francophone :

https://forum.arduino.cc/t/les-bonnes-pratiques-du-forum-francophone/861014

Il y est, entre autres, indiqué quelles informations fournir pour avoir de l'aide.

Bonjour et bienvenue.

Il faudrait que tu expliques la finalité de ce que tu veux faire avant de parler de réalisation réalisation pratique.

Pour ta demande il faut déjà comprendre le fonctionnement d'un convertisseur analogique numérique(CAN).

Dans un CAN il y a deux paramètres principaux :

  • La tension de référence
  • Le nombre de bits.
    Les microcontrôleurs avr sont doté d'un CAD 10 bits c'est à dire, comme 2 puissance 10 = 1024, qu'il capable de découper la tension de référence en 1023 pas de mesure.

Le CAD des microcontroleurs avr peut fonctionner avec 3 sources de tension de référence :

  • le Vcc du micro (5 V) -> c'est la valeur par défaut à l’allumage du microcontroleur.
  • une référence externe à appliquer sur la pin Aref
  • une référence interne de 1,1 V ± 10% -> heureusement il est possible de la mesurer pour plus de précision.

Les pas de mesure seront de Vcc/1023 = 5 mV ou de 1,1/1023 = 1mV.
C'est tout ce que peut faire un microcontroleur avr.

Si tu as besoin de plus il existe des CAN avec plus de bits qui peuvent s'approvisionner en module et qui dialoguent avec le microcontroleur en I2C ou SPI.

Mais ce pas le plus important !
En matière de mesure physiques le plus important est de bien comprendre la différence entre l'exactitude en valeur absolue et la sensibilité.
Un bon exemple est un thermomètre il peut indiquer la température absolue à ± 1 °C mais être suffisamment sensible pour être capable de discerner une variation de 0,1 °C avec une précision de ± 0,01 °C.

Dernier point, essentiel !
Ce n'est pas parce que le CAN va te donner 511 que ce sera réellement 511.
Si tu regardes la datasheet du micro qui équipe la Léonardo, datasheet à télécharger sur le site de Microchip, tu verra que le concepteur du micro expose toutes les sources d'erreurs.

Il existe des erreurs aléatoire, dues aux bruits électriques et des erreurs systématiques dues à la précision de conception et de fabrication du CAN.
Il ne faut pas aussi oublier l'influence de la température.

Il y a toujours la distinction à faire entre mesures en valeurs absolue et mesure en relatif.
En valeur absolue il est illusoire de croire que le résultats est à moins de ± 10 pas près.
En valeur relative la précision sera meilleure les erreurs systématique s’éliminant par une différence pour la plus part des cas.

Il ne faut pas prendre le CAN d'un microcontroleur pour un appareil de mesure.
Dans l'ordre de précision descendante :

  • le voltmètre avec entre autre ses indispensables filtres de mesure, mais la réactivité est faible.
  • Le module CAN externe.
  • Le CAN intégré au microcontroleur.

Je conclue comme j'ai commencé : quelle est la finalité de cette mesure ?

Un peu de littérature. Ce n'est pas ton capteur mais les infos sont assez générales pour être transposées.

En lisant en diagonale la note en question, on voit que la variation du champ magnétique est assez faible de l'ordre de 25mT par rapport à la valeur du champ spécifiée pour l'aimant choisi 390mT. A noter aussi que la géométrie de l'aimant est importante car elle peut entraîner des non-linéarités importantes.
Ton capteur délivre 2,5V en l'absence de champ magnétique. Et il a une sensibilité de 1,4mV/Gauss et une dynamique de +/- 1000 Gauss.
Pour info, 1000 Gauss = 100mT.
Tout ça pour dire que tu ne vas exploiter qu'une petite partie de la dynamique de ton capteur.
Il va donc falloir amplifier le signal sans augmenter le bruit de mesure. Tout en prenant en compte le fait qu'il y a un offset de 2,5V.

A vue de nez, je dirais qu'il va falloir utiliser un ADC externe si tu veux avoir une résolution suffisante sur des mouvements limités du joystick.

Bonsoir thomas_c_moi

Tu as combien d'axes à gérer dans le même joystick?
Avec le capteurs indiqués dans le post #1, tu vas galérer!
Pourquoi absolument magnétique?
Quelle est l'amplitude, en degrés, du mouvement?

Côté magnétique, regardes du côté de l'AS5600, il a 12 bits de résolution sur 360°

Cordialement
jpbbricole

Merci de ta réponse.
Je souhaite faire ça:

Je ne comprends pas comment il peux avoir une variation de signal allant de 0 a 5 v avec son montage.

Bonjour thomas_c_moi et bonne année

C'est plus clair avec la vidéo, c'est le capteur SS496A1 qui fait tout, c'est un "ratiometric linear hall-effect Sensor has ratiometric output voltage" qui délivre une tension de 0 à 5V en fonction de la force magnétique, d'où le montage.
image
Qui, lu via la bibliothèque joystick, donne une valeur de 0 à 1023.

Cordialement
jpbbricole

Bonjour
Déjà la sortie du composant ne peut évoluer qu'entre 0 et 4 V

Il faut déjà utiliser un "aimant adéquat" et le positionner correctement (AMHA l'aimant doit surement être magnétisé diamétralement)

la fonction de transfert est celle-ci
le capteur renvoie 2.5V pour "une absence de champ magnétique ce qui semble cohérent avec ta mesure à 511

image

Bonjour Artouste et bonne année

dans le datasheet il disent 4,5V pour l'exemple (les exemples sont donnés en 5V.) et c'est dépendant de la tension d'alimentation.

Dans la doc du simulateur, c'est un cubique qui est préconisé.

Cordialement
jpbbricole

l'utilisation de 2 aimants cubiques me semble inutilement complexe et possible source d'erreur de positionnement.

1 seul positionné comme çà doit faire l'affaire

Sans doute mais il faut prendre la doc du composant proposé par @thomas_c_moi

Et pour lui, la dynamique est telle qu'indiqué par @Artouste .

Bonjour, bonne année à tous et encore une fois merci pour vos réponses.

En fait, je pense que je me suis un peu emmêlé les pinceaux.
Pour faire mon essai j'ai utilisé ça comme aimant :
https://www.manomano.fr/p/set-de-3-barres-magnetiques-porte-outils-mural-en-acier-bleu-7232270?model_id=7232270

je pensais que ça irait pour faire un test.
Mais les valeurs que je récupère ne varie que de 400 à 600 environ. avec une valeur de 511 quand il n'y a pas l'aimant.

Du coup je comprenais pas comment il avait une plus grande amplitude de signal avec des petits aimant comme ça.

c'est surement parce que les aimants sont tous dans une enveloppe en fer et que je ne peux pas les manipuler comme je veux.

Je vais acheter des aimants cubes mais du coup je me demandais comment trouver un aimant qui arrive a faire un champ magnétique de 1000 Gauss pour arriver a utiliser l'amplitude max de détection du capteur.

non çà ne convient pas du tout
regarde par exemple ici

Bonjour fdufnews

Ah! OK, je me basai sur la documentation de la vidéo du projet qui est dans les vues de @thomas_c_moi.

Cordialement
jpbbricole

commande d'aimant effectué reste plus qu'a attendre la livraison merci a tous