Codeur incrémental réalisé à partir d'une souris à bille

Introduction
Le positionnement est une des applications les plus courantes de l'automation.
Dans ce type d'asservissement, la position est déterminée par rapport à une référence et s'exprime par une distance, un angle ou les deux.
Le positionnement nécessite donc de mesurer ces grandeurs avec des capteurs linéaires ou angulaires.


En pratique dans l'industrie, on distingue capteur et détecteur. Le premier fournit une valeur proportionnelle à la grandeur mesurée.

Le second fournit un signal ''tout-ou-rien'' et le basculement s'effectue par rapport à un seuil de détection.
Ainsi, selon l'usage, un fin-de-course est un détecteur de position et non pas un capteur de position.
Le terme senseur, Sensor en anglais, désigne aussi bien un capteur qu'un détecteur, quelle que soit la grandeur physique mesurée.

Les capteurs les plus fréquents peuvent être classés d'après les techniques de mesures utilisées :
résistifs (potentiomètres, jauges de contrainte...), capacitifs, inductifs, ultrasoniques, optiques (Infrarouge/PIR, laser...), ioniques, etc.
Les signaux électriques délivrés par les capteurs peuvent être analogiques ou numériques.
Sur certains sites de vente en ligne, on peut trouver de nombreux capteurs avec des rapports qualité/prix abordables.

Dans le domaine du positionnement, le choix d'un type de capteur plutôt qu'un autre dépendra de multiples facteurs :
précision recherchée, gamme de mesure, encombrement, sensibilité à l'environnement, robustesse, prix de revient, etc.


Parmi les systèmes de mesure angulaire, on rencontre le codeur incrémental ou ''impulseur'', et le codeur absolu. Ce sont tous deux des systèmes digitaux.
Les bricoleurs intéressés par l'acquisition d'un tel système se sont déjà rendu compte que le prix est directement lié aux performances, ce genre de matériel étant le plus souvent réservé à un usage professionnel.

Les illustrations et schémas ci-après décrivent la conception d'un ''impulseur'' à partir d'une ancienne souris à bille ou d'une trackball.


Réalisation

Impulseur
    Dans une souris à bille, cette dernière entraînait par friction le rouleau (arbre rotatif) d'un disque à fentes.
    Une telle souris possédait 2 disques à fentes, un pour le déplacement horizontal et un pour le déplacement vertical.
    L'émetteur (LED) était généralement distinct du récepteur (phototransistor).

Rappel du principe de fonctionnement d'une souris à bille
Dans chacun des sens de déplacement de la souris, la lumière émise par l'émetteur (diode électroluminescente) est captée par le récepteur (phototransistor) à travers les fentes du disque rotatif. Entre ces fentes, la lumière est interrompue par la partie pleine du disque. Le signal généré par le récepteur est périodique et sa fréquence dépend de la vitesse de déplacement de la souris.  Après mise en forme, le signal est impulsionnel et est envoyé à l'ordinateur.
 

Après avoir récupéré un disque à fentes, ainsi que son système émetteur-récepteur optique, on peut réaliser le simple montage électronique ci-dessous.
On peut aussi se procurer un boîtier en fourche contenant à la fois l'émetteur et le récepteur.
    Le choix du transistor MOSFET n'est pas critique. Il a pour rôle de convertir le signal analogique présent à la borne 1 en un train d'impulsions à la borne 3.













































Remarques :
Si on ne dispose pas de machine-outil pour réaliser les flasques avant et arrière, de simples rondelles d'acier suffisent.
L'entretoise glissée sur l'axe de rotation du disque à fente peut être une simple paille. Son rôle est de maintenir le disque au centre de la fourche optique.
La bride d'assemblage en forme de U peut être remplacée par tout type d'équerre de fixation en utilisant des vis plus longues sur le flasque avant.
La partie filetée de celui-ci et son écrou sont alors superflus, ce qui facilite la réalisation.


La fréquence du train d'impulsions délivré par le transistor sera fonction du nombre de fentes du disque utilisé.
Le comptage des impulsions peut être réalisé aisément par un microcontrôleur ARDUINO, PICAXE ou autre.


Exemple d'utilisation avec ARDUINO

/*
  Consigne en [pas] introduite au clavier
  Step Motor 28BYJ-48 (5V dc) avec module de puissance à ULN2003
  Arduino Out_10 to In_1
  Arduino Out_11 to In_3
  Arduino Out_12 to In_2
  Arduino Out_13 to In_4
*/

const byte interruptPin = 2;
int pulse;
String inString = "";
int nombre;
int tempo=1;                               // Interval en [mS] entre les pas successifs

void setup() {
   pinMode(10,OUTPUT);
   pinMode(11,OUTPUT);
   pinMode(12,OUTPUT);
   pinMode(13,OUTPUT);
   pinMode(interruptPin, INPUT_PULLUP);
   attachInterrupt(digitalPinToInterrupt(interruptPin), count_pulse, RISING);
   Serial.begin(9600);
}

void loop() {
   while (Serial.available() > 0) {
     int inChar = Serial.read();
     if (isDigit(inChar)) {
       inString += (char)inChar;
       nombre=inString.toInt();      // Nb pas demandés (consigne entrée au clavier)
     }
     if (inChar == '\n') {                 // Lecture du clavier jusqu'à 'ENTER' (CR)
       inString = "";
       while(pulse<nombre){         // Rotation jusqu'à la valeur de consigne
        rotation_PAP();
       }
      pulse=0;
     }
   }
}

void count_pulse(){                    // Totalisation des impulsions
  pulse++; }

void rotation_PAP() {                 // Série de 8 demis-Pas
          digitalWrite(11, HIGH);
          delay(tempo);
          digitalWrite(12, LOW);
          delay(tempo);
          digitalWrite(13, HIGH);
          delay(tempo);
          digitalWrite(11, LOW);
          delay(tempo);
          digitalWrite(10, HIGH);
          delay(tempo);
          digitalWrite(13, LOW);
          delay(tempo);
          digitalWrite(12, HIGH);
          delay(tempo);
          digitalWrite(10, LOW);
          delay(tempo); }







Aucun commentaire:

Enregistrer un commentaire

Les commentaires constructifs sont les bienvenus.
Contact par mail via mon profil dans la colonne de droite.