Je développe actuellement sur la arduino due, et je cherche à récupérer des signaux en quadrature de plusieurs codeurs.
Je suis tombé sur ce tuto, qui est assez bien fait, Arduino Playground - RotaryEncoders mais je me demande si cela ne pose aucuns problèmes au µC (SAM3X8E) de récupérer et traiter les signaux de plusieurs encoders (sur des pins d'interruptions) simultanément.
En regardant la datasheet du µC, cela me semble possible puisque ce µC possède pas mal de pin "with external interrupt".
Je sais pas si des personnes ont déjà réalisé ceci et s'ils pourraient par conséquent me faire part de leur expérience.
Je vous remercie d'avance.
je l'ai deja fait, mais pas sur ce controleur.
la gestion des interruptions est plutot bien pensée, toutes architectures confondues.
une interruption sur les voies A ou B d'un codeur ne sera pas perdue si on est en cours de traitement d'une interruption A ou B d'un autre codeur. elle sera soit delayed et attendra la fin du traitement interruptif en cours, soit elle interrompera elle meme l'interruption en cours si elle est de priorité superieure (si le controleur gere la priorité des interruptions).
la seule possibilité de rater une interruption, c'est de la masquer, ou lorsque le signal est trop court pour etre vu (ce qui ne dépend pas de la fréquence d'horloge).
si quelque chose ne fonctionne pas, ce sera pour d'autres raisons.
Merci pour vos réponses.... @fdufnews très intéressants ces topics mais malheureusement ils ne traitent l’acquisition que d'un codeur. @jean-l Du coup tu as travaillé sur un autre type de µC ou alors tu as travaillé avec des CI spécialisés?
En fait, j'aimerais plutôt utiliser un circuit genre hctl-2000 et récupérer directement les bits en parallèle sur mon SAM3x8e.
La DUE peut accepter des interruptions sur toutes ses broches d'après la doc de réference. Du coup je pense que tu dois pouvoir utiliser le code dans le lien que tu as donné dans ton premier post (voir Interrupt Example (the Encoder interrupts the processor). Uses both Interrupt pins).
Bonjour,
J'ai l'impression que tu n'imagines pas la puissance de calcul d'un micro-controleur,
A la grosse louche on peut dire qu'il est capable de gerer plusieurs dizaines de milliers d'interruptions, bien ecrites, chaque seconde.
Alors, 2, 4 , ou plus encodeurs, c'est tres lent pour lui.
Jacques
pour ce qui est des interruptions, j'en ai utilisé a peu pres a chaque fois pour diverses raisons.
pour ce qui est des multiple codeurs, j'ai traité sur de l'arm7 (particulier, car il fallait "retourner" front montant/descendant dans l'interruption elle meme) et du lcp (mbed)
j'ai aussi utilisé le HCTL20xx (sur HC05).
vu ce que tu as dans les mains, comme le precise JMe87, c'est largement suffisant pour gerer plusieurs plusieurs codeurs.
t'a rien a gagner a utiliser le HCTL (pour 2 codeurs, tu bloque plus de pins de communications que necessaires)
soit t'utilise des librairies toutes faites, soit tu t'y colle toi meme.
si tu t'y colle toi meme, je peut te donner des trames exemples, l'avantage sera que tu maitrisera bien ce qu'est un codeur.
@fdunews , Oui, on est d'accord... @JMe87, Ok c'est nikel alors. Je n'ai pas la prétention de tout connaitre des microcontrôleurs mais j'ai misé sur un 32 bit justement pour sa puissance de Calcul. Après je t'avoue que j'ai pas vraiment chercher s'il existait des benchmarks sur les performances de cet ARM.
Mais de toute façon, je ne travaille pas avec des fréquence max en sortie de codeur très très rapides...
@ jean-l, Effectivement, je n'ai rien a gagné avec le hctl.
Oui je vais essayer de m'y coller moi même car j'aime bien maîtriser ce que je fais
Par contre le sam3x8e ne semble pas accepter le 5 V sur ces gpio.
Or les signaux de sorties des codeurs sont souvent en 5V, du coup, j'hésite quant au meilleur moyen pour passer en 3.3V entre:
pont diviseur de tension
-logic level converter à base de transistor mosfet
-Ci genre 74LVC245
Qu'en pensez vous?
Merci
Bonjour,
pourrais-tu nous en dire plus sur tes encodeurs.
Les modeles dont on parle dans le playground dont tu fais reference dans ton 1er message sont de simples switchs, donc independants de la tension.
Le premier modele professionnel que je trouve sur le net, c'est "sorties collecteur ouvert", donc ... independantes de la tension.
Désolé pour ma réponse tardive
Très juste, ils agissent comme de simple switch puisque leurs sorties sont de type "collecteur ouvert" (phototransitor le plus souvent).
Cependant la tension min à appliquer est de 5 volt d'après la datasheet dans mon cas.
Par ailleurs, le 5 volt du collecteur et doit alimenter également la LED, je sais pas du coup si ça peut venir de ça (selon la valeur de la résistance).
JMe87:
Les modeles dont on parle dans le playground dont tu fais reference dans ton 1er message sont de simples switchs, donc independants de la tension.
Dans le lien que j'ai mis ils ont testé sur celui-ci:
This works fine with an ALPS STEC12E08 encoder which has 24 steps per turn.
dont son "switching voltage" semble être également de 5 V.
Concernant mon application, je souhaite juste récupérer la position de moteurs tout simplement.
Si tu veux de l'aide, tu dois en dire plus !!
As-tu deja achete tes encodeurs ? Si oui, lesquels ?
Vitesse de rotation et nombre de moteurs ?
Resolution demandee ou simplement verification du fonctionnement ?
N'imagine pas utiliser un capteur avec des contacts en bout d'axe d'un moteur, duree de vie inferieure a la minute.
Il faut utiliser des encodeurs optiques mais la ce n'est pas le meme tarif !!