Récupération des ticks
J'ai présenté sur cette autre page le programme en assembleur PIC pour la gestion d'un encodeur numérique, ce programme donne la direction de rotation mais n'est pas assez précis si on cherche à récupérer les ticks, pour la commande d'un moteur par exemple.
Le principe de l'encodeur en quadrature c'est la détection du déphasage entre deux signaux, en général les routines de détection des encodeurs numériques se contentent de détecter quel signal est en avance sur l'autre pour donner le sens, quand on pose la table de vérité d'un encodeur on s'aperçoit lors d'une séquence on a 4 possibilités de détection, ce qui augmente la précision de l'encodeur par rapport à la méthode habituelle.
Tables de vérité en rotation horaire et anti-horaire, on aurait pu tracer les tableaux de Karnaugh mais les équations se suffisent à elles-mêmes. En orange la position au moment T, en jaune la position à T-1:
Rotation sens horaire:
Rotation sens anti-horaire:
De ces deux équations nous pouvons tirer l'algorigramme suivant, à noter que si la résolution de comptage est trop importante (en asm par exemple ou compter au-dela de 256 complique un peu les routines), on peut réduire les tables de vérité en commentant dans le code les tests aux labels e1/e8 et e3/e10 (en jaune dans l'algorigramme), on ne détectera plus que 2 ticks par séquence au lieu de 4.
Le code .asm pour un PIC18F2525. Il renseigne trois variables ("sensH" pour la rotation horaire, "sensAH" pour la rotation anti-horaire et "immo" si l'encodeur n'a pas bougé). Pour récupérer les ticks il suffit d'incrémenter une variable suivant l'incrémentation de sensH ou sensAH
Le fichier Fusibles.asm (paramétrages du PIC)
Le fichier init.asm
Le fichier main.asm
Le fichier Routines.asm