roue codeuse/codeur rotatif - arduino - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 33 sur 33

roue codeuse/codeur rotatif - arduino



  1. #31
    Yvan_Delaserge

    Re : codeur rotatif incrémental


    ------

    Les signaux A et B sont décalés en quadrature (on dit aussi à 90° ou en Grecque) et chaque période de A (et donc de B) indique que le codeur a fait un pas sachant que le nombre de pas par tour peut aller de 32 à 8096 suivant le prix du codeur.
    Pour détecter le sens de rotation, Il faut regarder si les transitions positives de A sont avant ou après les transitions positives de B . Par contre, si on est un peu futé, on peut augmenter la résolution apparente par quatre en utilisant toutes les transitions.
    Joli tuto, merci Daudet.
    Si chaque variable peut prendre la valeur 1 ou 0, et que l'on a 2 variables, on a seulement quatre possibilités.
    Comme tu l'indiques, on peut à certaines conditions, accroître la résolution en décrétant que chaque fois que l'on a un changement d'état, on a un pas de franchi. On a ainsi 16 pas par tour au lieu de 4. Mais ça devient plus critique à gérer, on n'a rien sans rien.

    J'ai un exemple de programme Arduino pour interfacer un compteur incrémental 2 canaux, mais il est sur un autre ordi. Je vais l'envoyer plus tard...

    Mon programme n'utilise pas d'interruptions. Selon l'initiateur du fil (s'il nous lit encore...)l'Arduino servirait seulement à interfacer la roue codeuse. Inutile dans ce cas d'utiliser des interruptions.

    -----
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  2. #32
    jiherve

    Re : codeur rotatif incrémental

    Bonsoir,
    Bon encore une fois nous parlons de la même chose mais avec des mots differents
    un code assembleur Atmega pondu en 1h il y a quelques jours
    Code:
      PCINT_2:
        xpush0123Y;
        in rmp0,PIND;              read state of optical encoder
        lds YL,sPot_freq_new+1;control value
        lds YH,sPot_freq_new;
        clc;                           to bypass overflow test if false combination on input
        andi rmp0,OPTIC_IN;    0xC0 entries on 23 & 22
        lds rmp1,sOpt_pin;       load old state
        sts sOpt_pin,rmp0;      save new state
        mov rmp2,rmp0;
        eor rmp2,rmp1;           detect change
        sbrc rmp2,6;              test A channel
      rjmp chg_a;
        sbrc rmp2,7;              test B channel
      rjmp chg_b;
      end_pcint:
      brcs end_pcint1;          check of high or low overflow 0xFFFF,0x0000
        sts sPot_freq_new+1,YL;
        sts sPot_freq_new,YH;
      end_pcint1:
        xpop0123Y;
      reti;
     
      chg_a:
        sbrs rmp1,6;              old state was one
      rjmp rise_a;
        ;falling edge
        sbrs rmp0,7;             check B channel
        sbiw YL,1;                dec value
        sbrc rmp0,7;             check B channel
        adiw YL,1;                inc value
      rjmp end_pcint;
    
        ;rising edge
      rise_a:
        sbrc rmp0,7;            check B channel
        sbiw YL,1;               dec value
        sbrs rmp0,7;            check B channel
        adiw YL,1;               inc value
      rjmp end_pcint;
      
      chg_b:
        sbrs rmp1,7;            old state was one
      rjmp rise_b;
        ;falling edge
        sbrc rmp0,6;            check A channel
        sbiw YL,1;               dec value
        sbrs rmp0,6;            check A channel
        adiw YL,1;               inc value
      rjmp end_pcint;
        ;rising edge
      rise_b:
        sbrs rmp0,6;           check A channel
        sbiw YL,1;             dec value
        sbrc rmp0,6;          check A channel
        adiw YL,1;             inc value
      rjmp end_pcint;
    cela fait exactement la même chose que ton tuto, car il n'y a pas beaucoup d'autre possibilité, il faut effectivement se souvenir de l’état antérieur c'est évident.
    cela tourne sans problème sur un encodeur 64 pas/tour manipulé à la main, le temps d’exécution est de qqs µs @16Mhz
    Donc les grands esprit se rencontrent encore.
    J'ai aussi une version à vitesse variable mais celle là je me la garde.
    JR
    l'électronique c'est pas du vaudou!

  3. #33
    invitee05a3fcc

    Re : codeur rotatif incrémental

    Citation Envoyé par Yvan_Delaserge Voir le message
    Si chaque variable peut prendre la valeur 1 ou 0, et que l'on a 2 variables, on a seulement quatre possibilités.
    Non ... je me répète :
    On a deux entrées et la valeur des deux entrées mémorisées au coup précédent . Donc il faut une machine à 16 états (dont certains sont inutiles) En effet, par exemple, on ne peux pas lire A=0 et B=1 si on a mémorisé A=1 et B=0 (une seule entrée peut changer entre deux calculs, si ce n'est pas le cas, c'est que la machine d'état est trop lente et on doit sortir un message d'erreur)

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. roue codeuse
    Par gcortex dans le forum Électronique
    Réponses: 5
    Dernier message: 06/05/2011, 14h26
  2. Roue codeuse
    Par invite8763919d dans le forum Électronique
    Réponses: 3
    Dernier message: 10/03/2010, 09h56
  3. Roue codeuse
    Par invite244b0c93 dans le forum Électronique
    Réponses: 13
    Dernier message: 12/06/2009, 22h34
  4. Roue codeuse
    Par invite99e8052e dans le forum Électronique
    Réponses: 3
    Dernier message: 17/05/2008, 22h54
  5. Roue codeuse + Afficheur = ???
    Par invite8de48731 dans le forum Électronique
    Réponses: 36
    Dernier message: 16/06/2007, 18h56
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...