Numérisation I²C d'un capteur angulaire absolu 360° analogique

I. PRESENTATION

Cela faisait un moment que je cherchais un capteur angulaire absolu sur 360° sans butée (rotation infinie):

Malheureusement, un tel capteur 360° est actuellement introuvable, on trouve seulement:

 

II. SOLUTION

Parmi  tous ces capteurs 360°, le plus courant est celui avec interface analogique 0-5V.

Il y a par exemple le P3022-V1-CW360 que l'on peut trouver sur les sites de vente en ligne pour moins de 15€:

P3022-V1-CW360Brochage P3022-V1-CW360
Le capteur angulaire absolu 360° avec sortie analogique 0-5V P3022-V1-CW360
Le brochage très simple:
GND: -
VCC: +5V
OUT: Sortie analogique 0-5V

Certes, il ne possède pas d'interface I²C, mais alors, pourquoi ne pas en ajouter une?

II.1 Le microncontrôleur ATtiny85 utilisé en esclave I²C

Le microcontrôleur ATtiny85 d'ATMEL/Microchip possède (entres autres):
ATtiny85 (8 broches) Brochage "arduino" de l'ATtiny85
Le microcontrôleur ATtiny85 et son brochage "Arduino" (Pin0=SDA, Pin2=SCL)


Les entrées analogiques de l'ATtiny85 n'ont qu'une résolution de 10 bits, mais il est possible de monter artificiellement cette
résolution à 12 bits.
La technique de sur-échantillonnage est expliquée ici.

La bibliothèque arduino TinyWireS permet de transformer très facilement un ATtiny85 en esclave I²C.
Très bien conçue, cette bibliothèque permet d'émuler les registres en lecture et/ou écriture d'un périphérique I²C.

Par facilité et rapidité, le programme est écrit en environnement arduino.


III. SCHEMA DE L'INTERFACE I²C POUR CAPTEUR 360° ANALOGIQUE

Ana to I²C Sensor Schematic
Lecture de la sortie analogique 0-5V P3022-V1-CW360, conversion en I²C, un BP et une LED!


IV. INTEGRATION DE L'INTERFACE I²C SUR LE CAPTEUR 360° ANALOGIQUE

Intégration interface I²C
Vue du dessous: tout est câblé en volant, sortie sur connecteur 4 points (GND, +5V, SDA, SCL)

La valeur analogique ne se promène que sur environ 5mm: elle est numérisée au plus près de la source, ce qui limite l'influence des parasites.

Vue générale du capteur avec interface I²C
Vue générale du capteur angulaire absolu avec interface I²C et sa résolution 12 bits (0-4095: un pas = 0.088°).


V. ETALONNAGE ET CONFIGURATION DE L'ADRESSE I²C DU CAPTEUR 360°

Le bouton poussoir et la LED de ce capteur ainsi modifié permettent très facilement de:

Ces 2 opérations ne sont à effectuer qu'une seule fois. Il est bien sûr possible de les refaire autant de fois que l'on veut, par exemple pour changer l'adresse I²C.

V.1. Procédure d'étalonnage du capteur 360°

V.2. Procédure de configuration de l'adresse I²C du capteur 360°

L'adresse I²C 7 bits de base du capteur 360° est 0x0C. Le bouton-poussoir permet d'ajouter un offset à cette valeur.
A la fin de la fenêtre de 10 secondes, un flash est émis, puis la LED s'allume avec la valeur de l'offset de l'adresse I²C.
Par exemple, si l'offset désiré était 2, donc pour une adresse désirée de 0x0E (0x0C + 2 = 0x0E), la LED va s'allumer 2 fois après le flash.
Ceci sera vrai à chaque mise sous tension du capteur: il est ainsi très facile de contrôler l'adresse I²C courante du capteur 360°.

VI. VISUALISATION DE L'ANGLE COURANT ET DU 0° DU CAPTEUR 360°

Une fois étalonné, plus l'angle augmente, plus la luminosité de la LED augmente. La LED est éteinte pour 0° et a la luminosité maximale pour 360°.
Il est donc très facile de déterminer le 0° mécanique: il est au passage de la luminosité maximale à l'extinction de la LED!


VII. TEST DU CAPTEUR 360° I²C

Le capteur 360° a été testé avec un arduino Mega en guise de maître I²C:

Sketch de test du capteur I²C

La lecture de l'angle se fait la manière suivante:

  1. Ouverture d'une session I²C en écriture à l'adresse 7 bits (0x0C + 4 = 0x10) esclave,
  2. Ecriture de la valeur 0x20 (N° de registre),
  3. Ouverture d'une session I²C en lecture à l'adresse 7 bits (0x0C + 4 = 0x10) esclave,
  4. Lecture de 2 octets (MSB + LSB) de la valeur de l'angle courant.

Notes:

- La valeur d'adresse I²C et de N° de registre correspondent à ceux d'un chip Allegro de type A1335.

- La valeur numérique retournée se situe entre 0 et 4095 pour des angles respectifs de 0° et 360°.

La sortie sur la console série: ça marche!

Sortie sur console série
Fastoche!

Le capteur 360° est prêt à être intégré dans le projet OpenAVRc pour la fonctionnalité X-Any!

Retour