Encodeurs rotatifs et code

Salut!
J'ai quelques encodeurs rotatifs à contacts (une fin de stock Bourns, ECW1J-C24-AC0024L), qui semble fonctionner un peu différemment des standards:
ils sont "normally open", càd qu'entre les crans les circuits A et B sont ouverts, et qu'ils se ferment brièvement (évidemment décalés de 90°) entre deux crans (steps).
Deux questions pour le code:
J'imagine un code du type:

  1. Interruption sur A flanc descendant (pin mise à la masse, entre les crans)
  2. lecture de A et B
  3. Si A et B à 0: ++
  4. Si A à 0 et B à 1: --

ça suffit ou on peut optimiser?

J'ai pensé mesurer la vitesse: mesurer en millis() entre les flancs descendants de A et B est une bonne idée?

Merci!

J'ai l'impression que c'est standard:

Ils doivent être du style:
image
Et entre 2 crans on avance de 4 pas. C'est simplement qu'en tournant à la main on progresse de 4 pas en 4 pas et que pour les crans, les 2 intes sont ouvert.

Si il n'y avait pas de rebonds, après un front descendant de A, on a A=0, ce n'est donc pas la peine de vérifier que A=0. Si il y a du rebond, A peut repasser à 1 après le front descendant, mais pas B qui a changé avant. Cela donnerait:

  • Interruption sur A flanc descendant (pin mise à la masse, entre les crans)
  • lecture de B
  • Si B à 0: ++
  • Si B à 1: --

Si on mesure le temps entre un front descendant de A et un front descendant de B, on aura deux valeurs différentes en fonction du sens. Dans le sens CW on mesure 1/4 cran, dans l'autre on a 3/4 crans.
On peut mesurer le temps entre deux fronts descendant de A (la fonction d'interruption sur front descendant de A est déjà présente pour calculer la position). On peut aussi mesure le temps entre un front descendant de A et un changement de B. Mais rien ne garanti que cela fait exactement un quart de cran.
Bien entendu, il faut pour cela supprimer les rebonds, par exemple par un condensateur aux bornes de l'interrupteur (pour la vitesse). Sinon, il faudrait par exemple une fois vu le front descendant de A, attendre que B ne change d'état avant de reprendre en compte un nouveau front descendant de A.

Merci vileroi
Oui c'est exactement le principe de ton schéma

effectivement...
Et quand au rebond, il est garanti à 0.5ms. Je ne sais pas encore si vais le gérer avec un compte millis() ou un bête delay(1) . Ou comme tu le propose un condo: j'ai calculé ~33nF pour une résistance pullup moyenne donnée à 35K pour t=1ms.

Je ferai des tests pour la mesure du temps une fois que tout ça sera en place...

Merci!

PS: quels avantages/inconvénients a un encodeur ouvert au repos face à un modèle 1 cran = 1 pas?

1 "cran" ou 1 click genere 4 etats differents , la plupart des bonnes libs gere çà

perso j'utilise depuis longtemps celle-ci

https://www.pjrc.com/teensy/td_libs_Encoder.html

1 "cran" ou 1 click genere 4 etats differents , la plupart des bonnes libs gere çà

perso j'utilise depuis longtemps celle-ci
www.pjrc.com/teensy/td_libs_Encoder.html

donc un code pour un encodeur avec un tic sur chaque cran ferait 4 itération avec un seul sur le mien. Le code ci-dessus n'est pas plus simple et tout autant efficace?

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.