Imprimer
Affichages : 608

Après seulement 2 années de service, mon rotor d'antenne G-450 C tombe en panne.
Après démontage et mesure, il s'avère que le potentiomètre du moteur est HS ainsi que la carte de commande du contrôleur.

Pièces de rechange chez Yeasu : néant ... 

Le fonctionnement  du G-450 s'avère relativement simple : pour une rotation de 0° à 450°, la valeur du potientiomètre moteur varie de 0 à 450 Ohm.

J'ai remplacé le potiomètre à l'intérieur du rotor. 
J'ai ensuite débranché les connecteurs de la carte de contrôle Yeasu (sauf le +12V qui fonctionne encore)  et je l'ai remplacée par un micro-controleur Arduino UNO R3.( ou équivalement)  
Les explications qui suivent requièrent une connaissance de base préalable des micro-contrôleurs Arduino, de nombreux tutoriels sont disponibles sur internet.

Je décline toute responsabilité quant aux conséquences de l'utilisation de ce montage.

Une solution Arduino ultra-simpe

Principe :

Toujours la règle du KISS (Keep It Simple Stupid)

La mesure s'effectue via un pont diviseur de tension (dont une des résistances varie avec la rotation du moteur) alimenté par la tension de 5V délivrée par l'Arduino  et est envoyé à une des entrées analogiques de l'Arduino (en l'occurence ici sur A0) 

En fonction de la valeur lue, je détermine une valeur début de course (c.à.d = rotor à 0°) et une valeur fin de course (c.à.d. = rotor à 450°) .Ces deux valeurs enclencheront deux relais qui arrêteront la rotation du moteur soit dans un ou l'autre sens.

 

Schéma : pont diviseur simple

Diviseur Yeasu 450C

Principe : la tension du diviseur est constante (+:- 5V en provenance de l'Arduino) et la résistance d'entrée varie -> la tension à l'entrée de l'Arduino varie.

Pour calculer la résistance, on utilise toujours la même formule que pour le pont diviseur. Ici, une des résistances varie et par conséquent  le rapport varie.

Rapport = VR1/(R1+VR1)          (1)

Si on intègre les tensions impliquées, on a :

la Tension Divisée (= la tension lue à la sortie du pont diviseur)

la Tension Entrée, 5V pour un Arduino.

On obtient  : Tension Divisée = Tension Entrée x Rapport

Si onremplace Rapport par sa valeur (1) :  Tension Divisée = Tension Entrée x VR1 (2)
                                                                                                                 R1+VR1

Comme on cherche la valeur de RV1, après transformation on obtient la formule suivante (2)

VR1 =             Tension Divisée X R1        
           Tension Entrée - Tension Divisée
mais encore :
VR1 =  R1  X           Tension Divisée              
                       Tension Entrée - Tension Divisée
 
Cette dernière formulation est TRES intéressante car c'est un rapport de TENSIONS.
Ca veut dire qu'importe la tension d'entrée fournie par l'Arduino le résultat est un rapport de tension, donc si la tension fournie par l'Arduino varie ce n'est pas important.
On peut directement utiliser cette valeur lue (comprise en 0 et 1023 et non pas entre 0 et 5). Dans le code vous verrez qu'on applique directement la valeur qui est lue. Cette formule est valable quel que soit la tension d'entrée !  (Faites attention de ne pas dépasser 5v à l'entrée analogique de votre micro-contrôleur, sinon ca va fumer et bye bye... )
Bon, c'est tout ? Pas tout à fait ...
Vous remarquerez que la valeur de RV1 affichée par votre Arduino ne correspond pas à celle que vous mesureriez avec un ohm-mètre. Pourquoi ? il faut étaloner votre pont diviseur, je vous rappele que votre résistance R1 à une tolérance qui va souvent de 5 à10%, forcément cela fausse la lecture. 
Pour remédier à cela on va remplacer la résistance R1 par une résistance R3 + un mini potentiomètre de réglage VR2 ; la somme de R3 et de VR2 sera proche de 1.2 à 1.4 X celle de R1.
De plus la résistance R3 offre une protection de court-circuit à l'entrée du micro-contrôleur au cas ou VR2 et VR1 seraient égales à 0.
 

Schéma : pont diviseur + potentiomètre de calibration

 

Diviseur 2 Yeasu 450C
 Etalonnage du pont diviseur : 

Le choix de R1 (ou RV2 + R3) :

J'ai choisi des valeurs pour R1 proches de celles du potentiomètre à mesurer. Dans mon cas R à mesurer est max 480Ω, j'ai choisi R3=390Ω  et RV2 = 100Ω
 
VR1 est la résistance qui se trouve dans le moteur du G 450 : elle varie en fonction de la rotation du moteur par le biais d'un système réducteur d'engrenages. Grosso-modo : le moteur peut tourner de 0° à 450° par la droite et revenir à 0° par la gauche. Deux butées mécaniques empêchent le moteur de tourner au-delà. Une rotation mécanique de 0 à 450° correspondra à une valeur du potentiomètre allant de 0Ω à 450Ω.
Le moteur  possède 2 enroulement AC alimenté par une tension de +/- 30 AC (tension mesurée à vide) ces deux enroulements  séparés déterminent le sens de rotation.
 

Schéma général 

 
 
 
 
VR1 à mesurer est branchée entre les broches 2-3 du control box connector.
Les boutons poussoirs RIGHT CW et LEFT CCW alimentent alternativement les enroulements gauche et droite du moteur. CW =  broche 4 et CCW broche 5
L'entrée analogique (la mesure de VR1) du micro-controleur s'effectue sur l'entrée A0 de l'Arduino.
Les sorties digitales D3, D4, D5 sont activées et désactivées en fonction de la valeur calculée par l'Arduino.
Tant que la valeur affichée est <1 la sortie D3 passe à 5V et fait basculer le relais qui coupe l'alimentation de l'enroulement  CCW du moteur, le moteur ne fonctionnera qui si on le fait tourner CW. 
Inversement, tant que la valeur affichée est > 450 la sortie D5  passe à 5V et fait basculer l'autre relais qui coupera l'alimentation de l'enroulement CW du moteur.
La sortie D4 passe à 5V lorsque la valeur affichée est > 360 indique que le moteur est en overlap (LED)
Les sorties digitales D3 et D5, constituent des fins de course logiques.Ceci empêche le dépassement des limites mécaniques du rotor, protégant ainsi les efforts sur l'axe du potentiomètre quand on est en fin de course, la surchauffe des enroulements, et des efforts sur les pignons mécaniques.
 
 
 
CODE AVEC AFFICHAGE EN RANCAIS

// LCD IIC I2C TWI

// Pin SDA to A4
// Pin SLC to A5


#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address

int analogInput = 0; // define analog input 0
float R1 =390;

void setup()
{
lcd.begin(16,2); // iInit the LCD for 16 chars 2 lines
lcd.clear();
lcd.backlight(); // Turn on the backligt (try lcd.noBaklight() to turn it off)
lcd.setCursor(0,0 ); //First col, first line
lcd.print("AZIMUT");

pinMode(3,OUTPUT); // define digital pin 3 as output
pinMode(4,OUTPUT); // define digital pin 4 as output
pinMode(5,OUTPUT); // define digital pin 5 as output
}

void loop()
{


float valeurLue = (float) analogRead (analogInput); // readed value on analog input 0
float resistanceLue = (valeurLue * R1)/(1023 - valeurLue); // apply the formula see explanations about divider bridge
float resistanceAffichee = ( int)((resistanceLue * 10.0 + 0.5)/10.0) ;
lcd.setCursor(8,0); //col 8 line 1

if (int(resistanceAffichee) > 360) {lcd.print("+");lcd.print(int(resistanceAffichee)-360);lcd.print((char)223);lcd.print("OVER");}
else {
lcd.print(int(resistanceAffichee));lcd.print((char)223);}

if (int(resistanceAffichee) >= 360) {digitalWrite(4,HIGH);}
else {digitalWrite(4,LOW);}

if (int(resistanceAffichee) <= 2) {digitalWrite(3,LOW);lcd.setCursor(0,1);lcd.print("SVP ROTATION CW");} //col 1, line 2
else if (int(resistanceAffichee) >= 2) {digitalWrite(3,HIGH);}

if (int(resistanceAffichee) >= 448 ){digitalWrite(5,LOW);lcd.setCursor(0,1);lcd.print("SVP ROTATION CCW");}
else if (int(resistanceAffichee) <= 448) {digitalWrite(5,HIGH);}


delay (800); // wait 800msec between readings

lcd.setCursor(8,0); //1st line
lcd.print(" ");
lcd.setCursor(0,1); //2d line
lcd.print(" ");
}