Flax a écrit :Donc j'en suis là, prochaines étapes :
- Déverminer la détection de l'encodeur.
[...]
[ce message a été étendu et inclut désormais quelques éléments de vulgarisation, pour que le plus grand nombre puisse comprendre de quoi il retourne et découvrir comment les difficultés rencontrées dans la conception de la station de soudage sont peu à peu résolues. Les gourous du Lab n'ont évidemment pas besoin de ces informations additionnelles, mais comme certains lecteurs de ce forum sont encore apprentis gourous, faut aussi penser à eux. Comme de mise sur l'ensemble du forum, ce thread est bien évidemment ouvert aux questions que d'aucuns pourraient se poser]
Tous les interrupteurs, contacts de relais et encodeurs mécaniques ont des rebonds qui rendent difficile la lecture de leurs états par un µC, car ces derniers sont suffisamment rapides pour lire/traiter des impulsions très courtes (<< 100µs). Là ou l'humain appuie une fois sur le bouton, le µC voit dix appuis, ce qui - si ce n'est pas pris en compte - créent des situations inattendues - comme peut-être chez @flax ou les pas/crans de son encodeur ne sont pas lus systématiquement. Il se peut que lorsqu'il y a trop de rebonds, le programme se bloque temporairement et ne prends plus rien en compte.
Ces rebonds sont définis techniquement comme des temps de
bounce et de chattering. L'action d'éliminer ou de gérer ces rebonds s'appelle du 'débouce'.
L'encodeur ALPS recommandé par KAIR.US ayant pour
N° d'article 'STEC12E08' chez Reichelt (ref ALPS 402097) à 2,32 EUR est
spécifié en chattering <=10 ms.
Il fournit 24 impulsions et dispose de 24 crans par tour.
Durée de vie : 20000 tours.
Le N° d'article '
STEC11B03' (ref ALPS 401588), toujours chez Reichelt, à 4,69 EUR est spécifié en
chattering a <=2ms et en bounce aussi <=2ms.
Il fournit 30 impulsions et dispose de 15 crans par tour. Un peu curieux qu'il y ait deux fois plus d'impulsions que de crans
Durée de vie : 15000 tours.
Pour gérer tout type d'encodeur et anticiper son vieillissement, débouncer les signaux A et B à 15-20 ms devrait convenir (et améliorer la lecture de l'encodeur de @flax).
On peut aussi mettre des cellules RC passe-bas sur A et B mais faudra ajouter du
trigger de Schmitt en aval. C'est aussi disponible en version
inverseur (tout ça est en stock chez Mouser).
Monsieur
Schmitt, qui - comme son nom ne le présage pas spontanément - était américain, est l'inventeur de ce bidule (et
d'autres choses encore).
Fonctionnellement parlant, un trigger de Schmitt correspond à un
comparateur à hystérésis, une bascule dont le seuil de basculement (en tension) est différent, selon que le signal à l'entrée voit sa tension croître ou décroître, ce que montre le 'cycle d'hystérésis' (figure 32) dans le doc ci-avant. L'axe des abscisses représente la tension d'entrée et non le temps, comme indiqué par erreur sur le diagramme.
C'est ainsi l'occasion de rebondir sur quelques articles relatifs aux techniques de débounce (hardware ou software).
11 Myths About Switch Bounce/Debounce Arduino : comment gérer les rebonds d’un interrupteur dans vos programmes ? Ultimate Guide to Switch Debounce (article en 9 parties ! Changer le chiffre à la fin de l'URL, de 1 jusqu'à 9)
A Guide to Debouncing Can multiple Schmitt triggers in series fully debounce a switch?How to implement hardware debounce for switches and relays (article de Digikey)
A Guide to Debouncing, by Jack Ganssle (partie 1) et
partie 2 Débounce à bascule de Schmitt (vidéo de Texas 2 min) Switch Debouncing How to Switch De-bounce an Electronic Circuit Dans ce dernier lien, on voit le schéma le plus élaboré (schéma D) d'un débouncer hardware avec un trigger de Schmitt. Il requiert en sus de la porte logique (inverseuse ou non), deux résistances, un condensateur et une diode. La porte logique est bien évidemment à alimenter en 5V. C'est assez courant de ne pas représenter les fils d'alimentation des portes logiques sur les schémas simples.
Il existe encore d'autre schémas pour directement décoder les signaux A et B en quadrature d'un encodeur rotatif. En utilisant des bascules D, on peut obtenir deux informations bien utiles ('pas' et 'direction' ou encore
'compter' et 'décompter' ) assez faciles à gérer dans le logiciel d'un µC. Mais dans ce cas aussi, il faut débouncer préalablement. Une bascule D ultra classique de type 74HCT74 est spécifiée sur son entrée 'clock' pour un temps de transition maximum de 6 ns.
Y connecter un contact mécanique (comme celui d'un encodeur) directement (donc sans débouncer) ne fonctionnera probablement pas correctement : ce dernier a un temps de bounce qui est environ 10 000 à 100 000 fois supérieur à ce qu'accepte la bascule D.
Eric
... crée l'impulsion
[update #1 à #3 : typo]