[ Accueil ] [ CONTACT ] [ PLAN du Site ] [ RCNV ] [ Publications ] [ Chantiers Bateaux ] [ Technique Modélisme ] [ Electronique ] [ Radios Vintage ] [ Multi-Switch ] [ Vrac ] [ Astuces ] [ Liens ] [ Base ] [ Compteur ]
 

        ... rgl

 

Contrôle de position d'un servo

 par commande ADC

Picaxe Application

(c)  R.LEGAT  

 

SOMMAIRE:

01 -  Contrôle d'un servo

02 - Taux de rafraîchissement

03 - Contrôle par ADC

04 - Equations mathématiques

05 - Codes

  

      Contrôle d'un servo

Nous allons analyser la procédure de contrôle d'un servo commandé par la rotation d'un potentiomère de positionnement.

Le servo passera ainsi d'une position minimale (Gauche) à  maximale (Droite) lorsque le potentiomètre est déplacé d'une extrémité  à l'autre.

D'une manière générale, on admet qu'un servo est piloté par un train d'impulsions espacéees de 20msec.

Ces impulsions, ont une valeur variant de 1msc à  2msec, pour une plage de rotation de l'ordre de 90°.

On peut aisément augmenter le débattement jusqu'à  environ 180° en faisant varier les impulsions de 0,75 à  2,25 msec !

Nous allons d'ailleurs utiliser ces valeurs dans cet exposé.

La position médiane, appelée Neutre, restant fixée à 1,5 msec.

        

     Brochage des servos usuels  

              

          

 

     Taux de rafraîchissement 

Plus le taux de rafraîhissement du data servo sera élevé et plus le servo opposera une résistance de stabilité.
Il est communément admis que la période de rafraîchissement est typiquement de 20msec.

Mais d'où vient cette valeur de 20msec ?
Dans les émetteurs de radiocommande de type PWM un train de 8 impulsions (variant de 1 à  2msec) est envoyé vers le récepteur.
Chaque impulsion est séparée par un silence de 300µsec et le train complet est suivi d'un silence de synchronisation jusqu'à la prochaine période.
 
Si on fait un rapide calcul, on voit que si on transmet 8 impulsions de 2msec, séparées d'un silence de 300µsec et un silence final de synchro de plus de 2msec,
on arrive un rien au-dessus de 20msec.
Admettant qu'il sera improbable de transmettre 8 data de 2msec, une période de 20msec sera suffisante.
Pour ma part, j'ai généralement mesuré une valeur de 21msec sur mes émetteurs classiques de radiocommande utilisés en modélisme.

  

     Contrôle par ADC   (Analogic to Digital Converter) 

 

Le principe consiste à  mesurer une tension, comprise entre 0 et 5V, avec un potentiomètre dont le curseur est branché sur l'entrée ADC
de notre MicroContrôleur.

En mode 8 bits, le convertisseur ADC donnera alors des valeurs de 0 à 255 pour une mesure de 0 à 5V et quelle que soit la fréquence de travail du µC.

Finalement, les valeurs à transmettre au servo devront valoir de 75 à 225 (0,75 msec à 2,25msec).

 

Nous constatons donc qu'il va falloir user d'un artifice mathématique pour convertir la plage 0/255 en 75/225 afin de disposer de toute la plage utile du potentiomètre et
en évitant d'occasionner des dégâts au servo qui forcerait au delà de ses butées.

En effet, à défaut de cette converson mathématique, les plages comprises avant 1,5V et après 4,5V ne sont pas exploitables car dangereuses pour le servo pour cause de débattement excessif.

              Réponse de l'ADC sans traitement mathématique. Toute la plage du potentiomètre n'est pas exploitable et peut être dangereuse pour le servo

 

La réponse de notre système devra donc être conforme au tableau de ci-dessous pour pouvoir utiliser toute la plage de déplacement du potentiomètre:

 

 En reportant ces valeurs dans un tableur Excel, l'équation répondant à nos critères est donnée par la droite de tendance:: y = 0,5882 + 75

Or, il se fait que 0,5882 correspond exactement à 150 / 255 !  càd la valeur du  Neutre / ADC max.

Mais 0,5882 correspond aussi au ratio de :

   0,5582 =  (Data.Servo.Max - Data.Servo.Min) / (Max.ADC - Min.ADC)    ' (225-75) / (255-0)

Et si la position Neutre était décalée (comme cela survient parfois sur les servos) il suffirait alors de juste agir sur la valeur d'offset, qui est égale à  +75 (Neutre/2) dans le cas d'un servo «parfait».

 

     Equations mathématiques

 Par analyse de la courbe de réponse on peut déduire diverses équations utiles :

   ADC (8 bits) = Vin x 51

   Data Servo Pos. = ((Max.Servo.Pos - Min.Servo.Pos) x ADC/255) + Min.Servo.Pos    ' avec Max.Servo.Pos = 225 et Min.Servo.Pos = 75

Et la formule simplifiée devient :  Data Servo Position = (ADC x 150/255) + 75   '75 = valeur de l'OffSet (Neutre/2)

Notons que 150/255 étant égal à 0,588235... on peut réduire ce coefficient à la valeur arrondie de 59/100

Il est sera donc aussi possible d'utiliser la formule suivante :    Data Servo Position = (ADC x 59/100) + 75

Le tableau comparatif suivant démontre qu'il n'y a pas de différence de résultat.
En effet le µC Picaxe calculant en Mode Entier, il arrondit toujours les résultats en ignorant les décimales lors des divisions.

Une variable Word devra cependant toujours être utilisée pour le calcul. 

     Codes

 
ReadAdc POTAR, b0
  b1= MAX_SERVO - MIN_SERVO * b0 / 255 + MIN_SERVO
Servo SERVO_PIN, b1
 
Les MIN_SERVO et MAX_SERVO peuvent être des constantes numériques (indiquées dans le code ou définies par des commandes SYMBOL) ou des valeurs
contenues dans des variables d'octet ou de mot.

Lorsque la plage complète du potentiomètre se situe entre MIN_POT et MAX_POT plutôt que 0 et 255, les calculs deviennent :
 
ReadAdc POTAR, b0
  b1= MAX_POT - MIN_POT
  b1= b0 Min MIN_POT - MIN_POT Max b1 * 255 / b1
  b1= MAX_SERVO - MIN_SERVO * b1 /255 + MIN_SERVO
Servo SERVO_PIN, b1
 
Mais le code simplifié reste :
 
ReadAdc POTAR, b0
 b1= b0 * 150/255 + OffSet ‘  normal OffSet = 75
Servo SERVO_PIN, b1

 

     x

 

 


 

--------------------------------------------------------------------------------------------------------------

 

 

 
[ Electronique ]
Copyright © Roger LEGAT - 2008 - Tous Droits réservés - (Thds V2)