====== Raymarine ST50 I2C ======
Développement d'une carte I2C d'interface pour le capteur Girouette/Anémomètre Raymarine ST50
===== Objectif =====
Transformer une girouette ST50 en capteur 5v compatible I2C fournissant les données vent :
* Direction (AWA)
* Vitesse (AWS)
===== Présentation du ST50 =====
J'ai hérité d'une magnifique girouette Raymarine ST50, c'est pas tout jeune mais c'est du super matos :
|{{ :electronique:micro_controleurs:attiny85:i2c_wind_sensor:st50_wind.jpg?nolink&400x266 }}|{{ :electronique:micro_controleurs:attiny85:i2c_wind_sensor:st50_eclate.jpg?direct&400x268 }}|
Je l'avais sorti de la poubelle et dépannée en changeant les capteurs à effet hall de la girouette, j'ai fait une bonne affaire ce jour là, au prix où cela s'arrache …\\
Du coup je me suis mis dans la tête de la transformer en capteur I2C. On va regarder qu'est ce que ça sort et ce qu'il y'a dedans.\\
A première vue, de la filasse et une alimentation qui ne colle pas vraiment avec nos microcontrolleurs préférés {{http://doku.floriantales.fr/lib/plugins/ckgedit/ckeditor/plugins/smiley/images/sad_smile.png?nolink&}}:
{{:electronique:micro_controleurs:attiny85:i2c_wind_sensor:st50_wire.png?nolink&600x153}}\\
//Starboard = tribord - Port = babord//
Les mesures du positionnement de la girouette et du mouvement de l'anémo sont assurées par des capteurs à effet Hall :
^Anémomètre : Honeywell SS41^Girouette : 2 capteurs Honeywell SS94A1|
|{{ :electronique:micro_controleurs:attiny85:i2c_wind_sensor:st50_anemo.png?direct&200x194 }}|{{ :electronique:micro_controleurs:attiny85:i2c_wind_sensor:st50_girouette.png?direct&200x204 }}|
D'après la datasheet des composants :
* la tension min des SS94A1 est de 6,6Vdc .. arf, d'où l'alim en 8v {{http://doku.floriantales.fr/lib/plugins/ckgedit/ckeditor/plugins/smiley/images/sad_smile.png?nolink&23x23}}.
* Le SS41 quant à lui peut tourner en 4,5V min.
On va pas se laisser abattre et on va tester tout ça sous 5v parce qu'on est des malades {{http://doku.floriantales.fr/lib/plugins/ckgedit/ckeditor/plugins/smiley/images/tongue_smile.png?nolink&23x23}}!
\\
===== Mesure du ST50 =====
==== Girouette ====
Mesure du capteur girouette (je fais tourner le capteur avec un perceuse pour avoir de belles sinusoïdes) :
^Time Base YT^Time Base XY^Fonction de tranfert constructeur|
|{{ :electronique:micro_controleurs:attiny85:i2c_wind_sensor:mesure_girouette.png?direct&400x240 }}|{{ :electronique:micro_controleurs:attiny85:i2c_wind_sensor:mesure_time_base_xy.png?direct&400x240 }}|{{ :electronique:micro_controleurs:attiny85:i2c_wind_sensor:selection_157.png?nolink&500x237 }}|
^ ^Vmin^Vmax^Déphasage|
^Green (Jaune sur l'oscillo)|1,5|3,5|0°|
^Blue|1,5|3,5|90°|
Et bien il marche très bien ce capteur en 5v !!! En tout cas on pourra en faire quelques chose même si ce n'est pas prévu comme ça.\\
La capture en base de temps XY montre l'ellipse. La déduction du cap se fait par calcul de la [[https://fr.wikipedia.org/wiki/Régression_elliptique|régression elliptique]].\\
J'ai testé en 3,3v mais le signal se casse la figure sérieusement, il serait difficilement exploitable sans un traitement complémentaire (filtre/ampli).
\\
==== Anémomètre ====
La sortie anémomètre est assurée par le SS41 à collecteur ouvert. \\ Ce composant va laisser passer le courant 2 fois par rotation complète de l'anémomètre.
{{:electronique:micro_controleurs:attiny85:i2c_wind_sensor:collecteur_ouvert.png?nolink&150x143}}
Un circuit complémentaire doit assurer la conversion aux niveaux logique TTL : 0 ou 5v. On peut utiliser une résistance en pull-up dans ce cas. \\ Sachant que le SS41 n'accepte que 20mA max une résistance de 100K fait l'affaire. \\ La mesure confirme le bon fonctionnement de l'anémo avec 2 front montants par rotation : \\ {{:electronique:micro_controleurs:attiny85:i2c_wind_sensor:sortie_anemo.png?direct&500x300}}
===== Mise en forme des signaux =====
D'après le manuel de service des instruments Raymarine de la gamme ST60 (compatible), les circuits de mise en forme sont les suivants :
==== Filtrage du câble ====
{{:electronique:micro_controleurs:attiny85:i2c_wind_sensor:selection_155.png?direct&200x214 }}Les entrées du ST50 sont filtrées avec des capas de 1nF pour supprimer les bruits captés par le câble.
==== Girouette ====
=== Conception raymarine ===
{{:electronique:micro_controleurs:attiny85:i2c_wind_sensor:selection_156.png?direct&550x219 }}
Le 1er lot de résistances assure un pont diviseur pour diminuer la tension. \\ Le circuit 74HX4051 est un multiplexeur analogique. Le microcontrôleur peut choisir quelle capteur il veut mesurer. \\ On trouve ensuite une cascade de résistances pour assurer 2 références de tension (une par AOP qui suivent). \\ On passe ensuite dans un AOP IC5A monté en intégrateur différentiel puis dans un comparateur IC5b à hystérésis non inverseur. \\ La sortie ADC_INT rentre dans une entrée interruption d'un microcontrôleur Philips 80C51C de l'an 2000. \\ On est en face d'un convertisseur numérique analogique à intégrale assuré par les AOP et l'UC. \\ Pour dire : ce nanar n'avait pas d'entrée ADC alors que le attiny85 en à 3! {{http://doku.floriantales.fr/lib/plugins/ckgedit/ckeditor/plugins/smiley/images/teeth_smile.png?nolink&}}.
=== Adaptations pour l'attiny85 ===
Suite à l'observation précédente, l'attiny assurera sans problème la conversion analogique/numérique des 2 capteurs sur 2 entrées ADC. \\ L'entrée analogique de l'attiny85 est convertie sur 10 bits (de 0 à Vcc) soit une résolution de 1024 pas de 4,9mv sous 5v. \\ Sachant que le signal mesure 2v crête-crête avec un offset de 1,5v, la lecture pleine échelle en 1024 bits ne peut être assurée en l'état.
Adaptations à prévoir :
* Réduire l'offset du signal pour fournir un signal de 0 à Vcrête-crête
* Ajuster la référence de tension Vref de l'ADC de l'attiny pour une lecture de 0 à Vcrête-crête
Mais voilà, j'ai 2 problèmes avec cela :
* Je n'ai pas envie d'ajouter un montage soustracteur pour supprimer la composante continue.
* Je ne peux pas utiliser la pin AREFque je garde pour l'I2C, il faudrait me contenter de la référence interne 2,56V.
A tout bien y réfléchir, l'attiny dispose encore d'une résolution de 408 pas pour un signal de 2Vcc pour Vref=5V. \\ La mesure du signal de 1,5 à 3,5V correspond à un mouvement de 180° de la girouette. On dispose donc d'une résolution supérieure à 0,5° sans trop batailler. \\ Je propose donc le montage suivant pour l'acquisition girouette : \\ {{:electronique:micro_controleurs:attiny85:i2c_wind_sensor:capture_girouette.png?direct&600x181}}
==== Anémomètre ====
=== Conception Raymarine ===
{{:electronique:micro_controleurs:attiny85:i2c_wind_sensor:selection_154.png?direct&400x206 }}
La partie gauche du schéma ne nous concerne pas. Il s'agit de l'acquision du capteur de type rotavecta.\\
Le signal anémo rentre directement dans un AOP IC4b monté en comparateur à hystérésis inverseur.\\
L'entrée - de l'AOP est polarisée :
* en +12v quand le capteur anémo est bloqué
* en +1,15v en sortie du pont diviseur formé par R6/R10/R13 quand il est passant.
Ce montage assure une conversion TTL propre qui rentre dans l'UC sur une entrée interruption. \\ Pour mesurer la vitesse du vent on mesure la fréquence du signal anémo avec une entrée digitale.
=== Adapations pour l'attiny85 ===
Comme vu pendant la mesure, une simple résistance de pull up pourrait suffire pour notre utilisation. \\ Sachant que l'attiny85 dispose d'une résistance de pull-up sur ses I/O on peut même envisager de l'utiliser directement : \\ {{:electronique:micro_controleurs:attiny85:i2c_wind_sensor:selection_160.png?nolink&600x44}}
Le niveau bas d'une entrée digitale est comprise entre -0,5 et 0,3v max sur attiny85. On remarque à la mesure avec une 100K que l'on est en dessous de 0,2v. C'est bon mais c'est limite.
{{:electronique:micro_controleurs:attiny85:i2c_wind_sensor:selection_161.png?nolink&600x86}}
===== Code de l'acquisition uC =====
\\
Avant d'écrire tous ça j'avais fait quelques tests pour valider le concept avec une arduino UNO : [[https://github.com/floriantales/st50_i2c|GitHub]]\\
Article à suivre …\\
===== Ressources =====
Wind Speed & Direction Sensor - Raymarine Rotavecta : {{:electronique:micro_controleurs:attiny85:i2c_wind_sensor:elektor_332_may_2004_wind_rotavecta.pdf|elektor_332_may_2004_wind_rotavecta.pdf}}
~~socialite~~