Sommaire

Programme de correction du signal du capteur de position :

 

     Très vite, lors des essais il est apparu que le signal venant du capteur comportait des signaux éronés, au début et à la fin des impulsions. Ce phénomène s'explique par le fonctionnement interne du capteur, en effet, il crée des signaux lorsqu'il passe un trou entre le led et le phototransistor. Or, à cause des vibrations du moteur il existe des états intermédiaires, c'est à dire que le capteur voit un trou, rebondit un peu en arrière et revient sur le même trou, de même en sortant du trou. Cela fait que le micro-contrôleur compte plus d'impulsions qu'il ne devrait.

     La solution trouvée est de mesurer la durée des impulsions hautes et bases du capteur, pour toutes les vitesses. Ainsi, quand on detecte un front montant, on le prend en compte et on bloque l'interruption pendant une durée proche du temps minimal de l'état haut mesuré précedement. Après cela on detect le front descendant et on bloque encore une fois l'interruption pendant une durée proche de l'état bas mesuré precedement. Et on ré-autorise l'interruption pour détecter le front montant suivant, et ainsi de suite.

    Ce système à l'inconvénient de devoir changer les valeurs des pulshx et pulselx à chaque fois qu'on modifit les vitesses. Mais il est très efficace, éliminant ainsi une grande partie des impulsions parasites qui apparaissent au début et fin des impulsions, et également durant les état logiques.

   

capteur

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

µC sans correction

0

1

1

2

2

3

3

4

4

5

 

 

 

 

 

 

 

 

 

 

 

temps

 

<pulseh>

<pulsel>

<pulseh>

 

 

 

 

 

 

 

 

 

 

 

µC avec correction

0

1

1

1

1

1

1

2

2

2

 

   En effet ce signal ne donne que 2 réels impulsions, alors que le µC en voyait 5.
   Les variables pulseh et pulsel se déterminent bien sûr en faisant des mesures, pour cela j'ai dû apprendre à utiliser l'analyseur logique suivant (le Logic Dart de HP) :
 
 

 

 

     Les temps mesurés pour la vitesse 2 sont :  

           - état haut :  52 ms

           - état bas : 30 ms

   J'ai alors choisit pulseh = 48 ms et pulsel = 26 ms.

       Pour l'interruption; on a t= 325 µs comme on a pu le voir précédement,

 donc 48/ 0.325 = 150  et 26/0.325 = 82.

On met donc pulseh2 = 150 et pulsel2 = 82.

Et on fait de même avec les autres vitesses.

 

   Ce système fonctionnait parfaitement sans charge sur le moteur, mais lors de la mise en place de l'antenne, il est apparu des piques de tension parasites qui crées des impulsions suplémentaires entre les 2 temps d'interdiction de l'interruption. Il a alors fallut ajouter un système hardware pour empécher cela.

    J'ai choisit d'utiliser un comparateur à ampli-OP ayant un seuil d'environ 2.5 v.

Cela fait parfaitement disparaître les parasites.

 

 

Le schéma est alors le suivant :


 

Programme de réglage de la position :  

 

    On entre un angle et le moteur se positionne automatiquement à la position voulue, renvoyant un message de position atteinte.

 

L'organigramme est le suivant :


Pour le source en assembleur, voir annexe 3.

 

Le programme de reception de l'angle suit l'organigramme suivant :


 

Voir annexe 3 pour le source en assembleur.

 

Le programme de conversion ascii/hexa suit l'organigramme suivant :


 

   Voir annexe 3 pour le source en assembleur.

 

 

Programme de détection de courant trop élevé  :

 

   Sur la broche 8 on a 377µA par ampères dans le moteur, afin de mesurer ce courant j’utilise l’entrée de conversion analogique/numérique Pe1. Car sur la carte d’évalution, la broche Pe0 a une résistance de 10k reliée à la masse, ce qui fait chuter la tension à ses bornes.

     Sur l’entrée CAN la tension ne doit pas dépasser 5v, or le courant dans le moteur peut monter jusqu’à 250 mA. Donc on calcul une résistance de 53 k, afin d’avoir moins de 5 v.

    Mais on s’appercoi qu’à chaque créneaux on a un pique de courant > 250mA d’où U > 5v, on choisit alors une résistance de 15k, on a ainsi U < 5v.

   Par contre le courant  n’est pas stable, cela donne une erreur dans la mesure. J’ai alors muni la sortie d’un filtre passe bas avec R = 10k et C = 470nF, le filtre coupe alors à 5 Hz.

 

    Le courant est mesuré à chaque interruption, je compare la valeur de sortie du CAN et je  la compare à la valeur de Imax. Imax est initialisé ne fonction de la vitesse entrée au début.

 

Sommaire