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):
- alimenté en 5V
- avec interface I²C: le nombre de broche est fixe
et limité quel que soit le nombre de capteur sur le bus (SDA, SCL, GND, +5V)
- avec configuration facile de l'adresse I²C (Support de plusieurs capteurs 360° sur le même bus I²C)
- lecture rapide (500µs max)
- résolution d'au moins 12 bits (4096 pas pour 360°
==> 0.088° par pas)
- en boîtier type "potentiomètre" idéalement sur
roulement à bille: viable mécaniquement
- pas trop exotique afin d'être facilement
approvisionnable
- bas coût
Malheureusement, un tel capteur 360° est actuellement
introuvable, on trouve seulement:
- des capteurs 360°:
- avec interface SPI: en plus des signaux Data et
Clock, il faut un signal SS de sélection par esclave, donc par capteur
- avec interface 4-20mA: nécessite une résistance
et une voie analogique par capteur ainsi qu'un étalonnage
- avec interface SSI: interface série synchrone
point à point, donc beaucoup de fils par capteur
- avec interface analogique 0-5V: nécessite une
voie analogique par capteur ainsi qu'un étalonnage
- des circuits intégrés directement interfaçable en I²C:
- Allegro A1335: interface I²C, mais nécessite une
intégration mécanique complexe, aimant, axe...
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€:
 | 
|
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):
- une alimentation 5V
- des entrées analogiques ayant 10 bits de
résolution (0-5V ==> 0-1023)
- un contrôleur I²C hardware pouvant être configuré
en esclave
- horloge interne à 16 MHz (PLL activée)
 |
 |
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

|
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

|
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 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:
- Etalonner le capteur: en effet, la tension de
sortie du capteur n'est pas exactement 0V pour 0°, ni exactement 5V
pour 360°.
- Définir l'adresse I²C: si plusieurs capteurs
360° doivent être connectés sur un même bus I²C, chacun de ces capteurs doit
avoir une adresse qui lui est propre (sinon, il y a conflit d'adresse).
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°
- Maintenir appuyé le bouton-poussoir et mettre le
capteur sous tension
- Dès que la LED flashe un coup, relâcher le bouton-poussoir
- Pendant 10 secondes, tourner lentement l'axe
(faire plusieurs tours)
- Ça
y est: le capteur est étalonné, les angles de 0° à 360° correspondent
désormais respectivement aux valeurs numériques 0 et 4095!
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.
- Maintenir appuyé le bouton-poussoir et mettre le
capteur sous tension
- Dès que la LED a flashé 2 coups, relâcher le bouton-poussoir: une fenêtre de 10 secondes s'ouvre pour
définir l'offset à l'aide du bouton-poussoir
- Appuyer N fois sur le
bouton-poussoir et l'adresse I²C devient 0x0C + N (si l'offset désiré
vaut 0, ne pas appuyer)
- Dès que l'offset désiré est atteint, attendre la
fin de la fenêtre de 10 secondes
- Ça y est: l'adresse I²C du capteur 360° est configurée!
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:
La lecture de l'angle se fait la manière suivante:
- Ouverture d'une session I²C en écriture à l'adresse 7 bits (0x0C + 4 = 0x10) esclave,
- Ecriture de la valeur 0x20 (N° de registre),
- Ouverture d'une session I²C en lecture à l'adresse 7 bits (0x0C + 4 = 0x10) esclave,
- 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!

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