Aller au contenu


Photo
- - - - -

HCTL2032

vraiment utile ?

7 réponses à ce sujet

#1 mysterious

mysterious

    Membre

  • Membres
  • 27 messages

Posté 26 juin 2016 - 01:03

J'ai lu récemment qu'il existe des CI spécialisé dans le comptage + décodage du sens de capteurs en quadrature. Je suis vite tombé sur le HCTL2032. En même temps il n'y en a pas des masses.

J'ai vu qu'il pouvait gérer 2 encodeurs, compter sur 32bits maxi, multiplier jusque 4fois la résolution des encodeurs etc, je me suis dit chouette c'est vraiment l'idéal pour mes projets (dont un où il me faudrait gérer 4 encodeurs en quadrature) puis j'ai remarqué qu'il occupe 16 E/S d'un microcontrôleur!!!!!!!!!

(J'ai bien remarqué le LS7366 accessible en SPI mais il est introuvable nulle part donc inutile d'en parler plus). 

 

Bon admettons que j'ai un microcontrôleur qui dispose de 16E/S juste pour ça, est-ce que j'y gagne vraiment à utiliser un machin pareil ?

Parce que j'ai bien compris qu'il sert surtout à décharger le microcontroleur du comptage des incréments mais il faut bien que le micro lise très régulièrement le HCTL2032 pour que l'asservissement (entre autre) soit efficace donc au final quel est le gain réel ?



#2 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 26 juin 2016 - 01:47

Le HCTL2032 est un composant ancien. Il était surtout utile à l'époque où les microcontrôleurs étaient peu puissants (il y a 20 ou 30 ans). Avec un microcontrôleur récent, il est souvent possible de compter/décompter les impulsions d'un codeur directement en logiciel, à l'aide d'interruptions qui se déclenchent sur changement d'état d'une des 2 entrées associées au codeur. C'est vraiment le plus pratique pour nous les bidouilleurs

 

Aujourd'hui, les composants compteur/décodeur d'impulsion sont encore utilisés, mais dans des cas particulier :

* soit parce qu'un unique microcontrôleur doit gérer de nombreux axes (plus de 4 par exemple, ça commence à être compliqué)

* soit parce que la fréquence des signaux issus des codeurs est très élevée (robots industriels de précision) et est impossible à gérer en logiciel. Des signaux à 1MHz maxi mar exemple sont difficiles à compter en logiciel.

 

Pour finir, il existe des composants de comptage/décodage d'impulsion plus modernes que le HCTL2032, et nécessitant beaucoup moins de broches côté microcontrôleur. J'ai utilisé des LS7366 pour mon bipède inachevé BOB5 par exemples. Ils s'interfacent en SPI, ce qui fait économiser beaucoup de broches par rapport à un HCTL2032 (que j'avais utilisé sur BOB3).

Je m'en était procuré chez "2001 Electronics" en Angleterre.

 

Leon.


BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)


#3 mysterious

mysterious

    Membre

  • Membres
  • 27 messages

Posté 26 juin 2016 - 02:15

Pour ce qui est du LS7366 j'ai cherché sur le site que tu précise. Je n'ai rien trouvé. Tant pis il m'aurais été utile. Après il y a toujours moyen d'intercaler un composant du genre PCF8574  entre le HCTL2032 et le micro pour réduire le nombre d'E/S.

 

Sinon d'une manière générale je me demande comment ça se gère du côté software, une idée?



#4 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 27 juin 2016 - 05:16

Sinon d'une manière générale je me demande comment ça se gère du côté software, une idée?

Ta question est bien de savoir comment gérer directement un codeur en soft, sans passer par un composant dédié?

 

Si c'est le cas, c'est assez simple au final.

* il faut programmer une interruption dédiée, déclenchée sur changement d'état d'une ou des 2 voies de ton codeur.1 voie pour obtenir une résolution simple, 2 voies pour obtenir une résolution maxi (mais consomme plus de charge CPU).

De même tu peux choisir de déclencher tes interruptions sur juste les fronts montants, ou alors sur les 2 fronts montants et descendants.

* Si par exemple tu décides de ne déclencher l'interruption que sur les fronts montants de la voie A (c'est le cas le plus simple), alors il faudra coder dans ton interrpution:

    si voie_B = 0 alors compteur = compteur + 1

    sinon compteur = compteur -1

    fin interruption

Et c'est tout! En gros, ici on utilise la voie A pour compter les tops, et la voie B pour donne le sens. Ca fonctionne très bien avec des signaux en quadrature. Si tu veux aussi compter les fronts descendants (résolution double) , il faut configurer l'interrpution, et rajouter un test sur l'état de A, et donc tu auras 4 conditions au lieu de 2.

Si tu veux aussi compter les fronts de B (résolution quadruple), il faut faire la même logique sur la voie B, en faisant bien attention aux signes.

 

Leon.


BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)


#5 mysterious

mysterious

    Membre

  • Membres
  • 27 messages

Posté 27 juin 2016 - 04:41

 

Ta question est bien de savoir comment gérer directement un codeur en soft, sans passer par un composant dédié?

Non c'est l'inverse ^^ : comment ça se passe du côté soft quand on passe par un composant dédié qui compte dans son coin ?



#6 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 27 juin 2016 - 07:33

Non c'est l'inverse ^^ : comment ça se passe du côté soft quand on passe par un composant dédié qui compte dans son coin ?

Dans ce cas, y'a qu'à lire le datasheet, c'est en général assez bien expliqué. Il suffit de faire un petit code d'interface, c'est en général vraiment simple.

Mais je n'ai peut-être pas compris où tu éprouvais une difficulté...

 

Leon.


BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)


#7 X-Robin-X

X-Robin-X

    Nouveau membre

  • Membres
  • 1 messages

Posté 02 août 2017 - 08:26

Salut,

 

A mon avis tu devrais abandonner ce genre de composant, les microcontrôleurs actuel comme les stm32f4 permettent d'utiliser les timers comme décodeur de codeur en quadrature,  ils supportent la multiplication par 4 de la résolution et peuvent compter sur 32 bits sans que l'utilisateur n'ai besoin d'ecrire du soft, tu as juste à lire le registre de comptage du timer pour obtenir le nombre de pas, c'est vraiment pratique :) en plus il est très facile de trouver des cartes de développement pas cher avec un processeur  ( type stm32f4 discovery board ).

 

Bon courage pour ton projet



#8 maximusk

maximusk

    Membre passionné

  • Membres
  • PipPipPip
  • 304 messages
  • Gender:Male
  • Location:Le Mans

Posté 02 août 2017 - 09:23

@Leon : C'est mieux de compter les fronts montants ET descendants. Si tu n'en compte qu'un des deux, et que ton codeur oscille autour d'un changement d'etat (vibrations par exemple), il ne va croire qu'il tourne dans un sens alors qu'en fait il ne bouge pas.

@Mysterious : En general, il utilise les 16 I/O pour representer une valeur sur 16 bits. Après il ne te reste qu'a lire ces 16 bits et a les convertir en valeur. Mais en plus de monopoliser 16 I/O, ils sont chers et compliqués a trouver de nos jours. Maintenant il est plus simple et moins cher d'utiliser directement le microcontrôleur pour ça. Et si vraiment tu ne peux pas, tu peux utiliser un petit microcontrôleur ou CPLD uniquement pour compter les ticks codeurs et te les renvoyer par I2C, SPI, Série...



Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users