Encodeur rotatif et rebonds

Peut-être connaissez-vous la bibliothèque (library) NewEncoder.
Lien : https://github.com/gfvalvo/NewEncoder

Elle gère un encodeur rotatif en utilisant 2 pins d'interruptions.
Le résultat est l'absence totale de rebonds.

Mes montages précédents incluaient un debounce effectué par un circuit RC et un 74HC14.
J'ai utilisé cette bibliothèque avec, par précaution, un simple RC (schéma ci-dessous) ; le résultat est parfait.

Schéma

ce ne serait pas plutôt dû à la présence des condensateur que l'on voit sur le schéma ??

j'utilise la bibliothèque encoder et je n'ai pas non plus de souci de rebonds

@J_M_L

Non, les capas sont justement présentes pour lisser les rebonds.

OK donc la bibliothèque n'y est pour rien. Vous supprimez bien les rebonds côté matériel. (votre premier post est ambigu sur ce point)

En fait, vous doublez les précautions n'est-ce pas?

Par precaution, un circuit RC.

A mon avis, vous auriez pus vous économiser et faciliter le câblage sans R2, R4, R6, voir même en utilisant les résistances de PULLUP_INTERNE, à tester.
Et provoquer une interruption sur front descendant (dècharge de C) qui est sûrement plus raide que le front montant (ayant 1 RC).

A voir.

Bonsoir standardUser

Je plussoie @J-M-L , avec la bibliothèque encoder.h, plus besoin de composants pour l'anti-rebonds, la bibliothèque s'occupe de tout, y compris l'initialisation des pin (les contacts A et B) à GND).
Si c'est. un codeur rotatif manuel, on peut même se passer d'entrées avec interruption

Cordialement
jpbbricole

C'est dommage, @standardUser nous parle d'une bibliothéque qui s'appelle

Et vous lui répondez par

Et vous vantez même la bib que vous avez l'habitude d'utiliser (qui n'est pas celle que veut présenter standardUser) par des infos telles que

Alors que le concepteur de la dite bibliothéque (encoder) spécifié lui même que

" Encoders have 2 signals, which must be connected to 2 pins. There are three options.

  1. Best Performance: Both signals connect to interrupt pins.
  2. Good Performance: First signal connects to an interrupt pin, second to a non-interrupt pin.
  3. Low Performance: Both signals connect to non-interrupt pins"

Bref, les 2 bibliothéques, NewEncoder ou encoder utilisent les interruptions.

Je n’ai pas répondu que cela - vous sortez cette phrase du contexte

Mon point était que @standardUser a écrit à propos de la bibliothèque dont il parle

Je faisais remarquer qu’il n’y avait pas de souci non plus de rebond avec une autre bibliothèque qui sait gérer par interruption (ou sans) et que son test ne mettait rien en évidence sur la qualité de la dite bibliothèque à éviter les rebonds puisque son montage incluait un anti rebond matériel.
C’est pour cela que j’ai écrit

La bibliothèque de gfvalvo (qui est présent sur le forum anglophone ) est intéressante mais elle ne fonctionne qu’avec des pins gérant les interruptions extérieures (donc un seul encodeur sur uno par exemple) et il a récupéré le code de l’autre bibliothèque dont je parlais (encoder library ) de PJRC pour la gestion des pins.

L’approche du debounce est intéressante et différente entre les deux bibliothèques et comme il ne gère pas les pins sans interruption la bibliothèque est plus compacte.

Bonjour jef59

Bref, non!
Encoder ne nécessite pas forcément des pin avec interruptions, si tu lis la doc jusqu'au bout, il est dit:
The first pin should be capable of interrupts. If both pins have interrupt capability, both will be used for best performance. Encoder will also work in low performance polling mode if neither pin has interrupts.
Es si l'on s'en réfère au schéma de @standardUser, il utilise un codeur manuel
image
qui se contente de Low Performance vu que, avec, on ne fait qu'augmenter ou diminuer une valeur.

@jef59
J'aurai dû écrire :
"J'ai laissé les circuits RC parce que je n'avais pas du tout envie (le courage) de réouvrir le boîtier et dessouder quelques composants, qui, de toutes façons, ne sont pas gênants'".

Toutefois, je n'utilise jamais les résistance de pull-up internes parce que :

  1. Je n'y pense jamais.
  2. Mais surtout, je ne les ai jamais utilisées par ignorance de leur fonctionnement.

Ma question :
Si l'on déclare une entrée avec une résistance de pull-up activée, est-ce que l'Arduino conserve cette configuration en mémoire (lire ces résistances seront encore activées par défaut pour un autre programme téléversé) ou cette activation cesse une fois un autre programme téléversé ?

Merci pour votre réponse.

Bonjour standardUser

Excellent raison, d'autant plus que pour un codeur manuel, ça ne va pas beaucoup gêner :wink:

Ces résistances sont activées pour autant qu'il y en a la commande dans le programme:
pinMode(bpPin[b], INPUT_PULLUP);
Si dans le prochain programme chargé dans cet Arduino il y a:
pinMode(bpPin[b], INPUT);
La PULLUP interne n'est pas activée.

A+
Cordialement
jpbbricole

Si vous ne faites rien dans votre setup, par défaut les pins seront juste en INPUT lors du boot.

Attention sur AVR, une pin qui n'a pas été déclarée en OUTPUT et qui est passée en HIGH dans le setup est alors en INPUT_PULLUP (mettre à HIGH une INPUT revient à activer le pullup).

@jpbbricole et J-M-L
Merci pour vos réponses.
Je vais considérer cette facilité de pull-up plus sereinement...

Bonjour à tous,

Effectivement, tout cela, c'est clairement écrit dans les docs de NewEncoder.

L'intention de mon discours était dire que si une "nouvelle" bibliothéque était suggérée par un intervenant du forum, c'était plus pertinent de parler de ses avantages ou inconvénients plutôt que de ceux d'une autre bibliothéque.

Et à ce propos, c'est vrai que (je n'ai pas tout lu) je n'ai vu chez NewEncoder que des modes utilisant des interruptions, c'est clairement dit par son créateur.

C'est 1 inconvénient à relever, bien qu'on puisse se poser la question de l'intérêt de tester une bibliothéque pour encodeur avec uniquement un encodeur manuel précablé.

Car si j'ai bien compris, il est précablé:

Le sujet de la présentation de NewEncoder était en quelque sorte tué dans l'oeuf non?

Du genre:
"J'utilise NewEncoder avec 1 encoder et circuit RC inclut, mais je n'ai pas besoin des circuits RC.
ET
NewEnvoder utilise uniquement les broches d'interuption, mais à vrai dire, pour ce que j'ai à faire avec mon encodeur, ce n'était pas vraiment utile
...
Donc en fait, j'utilise NewEncoder, j'en ais pas vraiment besoin, mais en tout cas Le résultat est l'absence totale de rebonds."

oui mais ce n'est pas ce qu'il a fait...

C'était ce que je disais... On ne sait pas trop ce que @standardUser voulait dire ou prouver.
➜ c'était l'objectif de ma réponse. lui faire exprimer les différences

Oki.

J'aimerais aussi connaître les différences, voir les avantages de l'une sur l'autre.

Comme dit @jpbbricole, ne pas avoir à monopoliser 2 broches d'intefuptilns pour un encoder manuel, c'est un avantage en faveur de encoder

c'est ce que je disais précédemment

à noter que sur AVR la version de PJRC peut utiliser une partie de code en assembleur ce qui gagne en vitesse (selon ses tests)

Dans le cas d'un codeur rotatif de position, avec une techno optique, peut-on considérer qu'il n'y a pas de rebond?

Ensuite, sur 1 codeur optique, il y a voie A et voie B qui permettent de déterminer le sens de rotation.

Mais aussi Z ou Top tour, 1 top par tour.

Quelles voies doivent être mise sur une broche d'interuption?

De mes souvenirs lointain de la robotique, le top tour n'est pas facile à "choper" si on n'espére le choper sur une entrée digital standard!

Le signal Z / dit de top, est activé une fois par tour complet du codeur. Cela peut être utilisé pour déterminer la position absolue du codeur ou pour recalibrer le système si nécessaire.

Vous pouvez également connecter ce signal à une broche d'interruption si vous avez besoin de détecter précisément chaque tour complet du codeur

généralement oui - les signaux optiques sont beaucoup plus nets et stables que les signaux électriques produits par les contacts mécaniques.

Qui sont très utiles au contraire ! ! ! ! ! ! !

Leur fonctionnement : les résistances de tirage au Vcc (pull-up) sont données à ± 30 % selon le lot de fabrication. Dispersion tout à fait normale dans les fabrications de circuits intégrés.

Pour éviter qu'un fil soit en l'air, elles sont parfaitement fonctionnelles, c'est d'ailleurs la fonction officielle d'une pull up ou down.

Pour les utiliser en tant que composant dans un montage électronique, il faut être joueur où savoir parfaitement ce que l'on fait.

Dans le cas particulier d'un anti-rebond, elles ont une valeur théorique suffisamment élevée pour que la valeur mini ne soit pas un souci.
Notez que cette affirmation est justifiée par une explication technique.
Attention : aux affirmations à l'emporte-pièce : tous les microcontrôleurs n'ont pas les mêmes valeurs théoriques : il faut vérifier systématiquement.

Bibliothèque pour encodeur.
Déjà il y a deux types d'encodeur : les contacts A et B ne sont pas gérés de la même façon : le schéma en #1 est ambiguë. => voir documentation Alps.
Il y a aussi des encodeurs avec des positions stables (crans) et des encodeurs sans point fixes : les deux ne se gèrent pas de la même façon, la deuxième forme est plus complexe.

Attention aussi : EC11, EC12,...,ECx ne veut rien dire sur le fonctionnement : 11, 12,...,x sont les dimensions en mm du produit.
Tout comme Nema17, Nema 23 qui ne renseigne que sur la dimension de la semelle de fixation.

J'ai fait "un truc" avec un encodeur sans bibliothèque et regardant de la doc sur l'évolution des signaux pour des encodeurs à crans, (plus simples).
J'utilisais une seule interruption.
Comme être en 5V m'arrangeait, j'ai sorti une nano de la poussière et utilisé une interruption directe.
Il en reste donc une de libre, plus les interruptions PCINT qui concernent toutes les pins sauf A6 et A7 qui ne sont pas reliées à un port numérique.

Si j'avais pris un micro d'aujourd'hui, au lieu de prendre un micro du siècle passé, j'aurais eu de nombreux E/S capable d'interruption.

Économiser une pin d'interruption n'est pas un argument pour moi, on a changé de siècle.
Il y a des fatalités qui n'en sont plus, il faut évoluer et c'est un vieux qui vous le dit :laughing:.

1 Like