Re: [Avr-list] Nouveau module de gestion des encodeurs
GMail wrote: > En fait là ça devrait être très rapide, vu que lire la valeur d'un > codeur prend 1 octet d'instruction et 4 octets de réponse, et que le bus > tient 1mo/s sans problème (enfin c'est ce que je crois ;). par exemple: 5 octets * 4 codeurs = 20 octets Si la freq de la SPI est à 1Mhz (c'était notre cas), alors ça fait 20 * 8 microsecondes = 160us. ou même pour un seul codeur = 40us > En plus, vu > que la valeur est sur 32 bits, aucun problème de tour de compteur ! Certes > Il faut encore que j'approfondisse le sujet, mais je crois que ces chips > ont une pin de trigger qui permet de sauvegarder la valeur du compteur > dans un registre pour la lire plus tard. Ça devrait permettre de > définitivement regler le problème non ? Si c'est un registre différent de celui ou tu lis habituellement, alors oui ça règle le problème (et en plus ça sera très précis) :) Si ce n'est pas le cas, tu as plusieurs solutions: 1/ retourner la derniere position lue sur timer. -> problème de précision 2/ faire la lecture des codeurs dans l'interruption. -> que se passe-t-il si ton évènement asynchrone se produit pendant la lecture périodique ? 3/ même chose mais en vérouillant les interruptions pour éviter d'être préempté -> tu perds beaucoup de temps avec les interruptions vérouillées, c'est en général dangeureux ou non souhaité pour le reste du prog. 4/ Même chose que 1/ mais en interpollant par rapport au temps et aux deux dernières valeurs lues. -> légèrement plus lent mais au moins tu n'es pas embêté :) Olivier ___ Avr-list mailing list Avr-list@droids-corp.org CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive WIKI : http://wiki.droids-corp.org/index.php/Aversive DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/ BUGZILLA : http://bugzilla.droids-corp.org COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog
Re: [Avr-list] Nouveau module de gestion des encodeurs
En fait là ça devrait être très rapide, vu que lire la valeur d'un codeur prend 1 octet d'instruction et 4 octets de réponse, et que le bus tient 1mo/s sans problème (enfin c'est ce que je crois ;). En plus, vu que la valeur est sur 32 bits, aucun problème de tour de compteur ! Il faut encore que j'approfondisse le sujet, mais je crois que ces chips ont une pin de trigger qui permet de sauvegarder la valeur du compteur dans un registre pour la lire plus tard. Ça devrait permettre de définitivement regler le problème non ? Antoine Le 28 juin 2009 à 16:57, Olivier MATZ a écrit : Salut Antoine, Merci pour le patch ! j'avoue que pour le moment je l'ai juste parcouru et pas encore regardé en détail. Je fais ça dès que j'ai un peu de temps. Une petite interrogation sur le principe : nous avons nous aussi un module qui permet de récupérer la valeurs des codeurs par spi. Je voulais juste te mettre en garde sur un inconvénient du système (qui se contourne je te rassure): L'an dernier on faisait du polling sur les codeurs toutes les 128us car la valeur lue était sur 8 bits, elle pouvait donc boucler rapidement. On perdait pas mal de temps CPU à faire ça. Cette année, la lecture des codeurs prend un certain temps (plusieurs dizaines de microsecondes) rendant impossible de faire un polling aussi rapide, mais comme les valeurs sont sur 16 bits, on peut se permettre de la lire que toutes les 5ms (à chaque periode d'asservissement). Ca ne pose aucun problème pour asservir le moteur. Par contre, si on veut lire la position du moteur sur un évenement asynchrone, comme dans le cas des balises par exemple, alors la précision de la valeur lue est faible, puisqu'elle n'est mise à jour que toutes les 5ms. Pour pallier à ce problème, on a mis en place une interpollation linéaire pour la balise et le scanner, ça marche très bien. ++ Olivier Antoine albertelli wrote: Hello, Pour l'année prochaine, je fais (avec mon club) une carte de régul ation de moteurs basée sur Aversive. On a donc dû faire une solution de lecture de codeur, vu que pas mal d'équipe ont des problèmes pour ça, et on pense avoir trouvé une solution intéressante : les LS7366 de LS I/CSI. Ce sont des compteurs de signaux en quadrature, 32 bits, interfaça ble par SPI, qui peuvent recevoir des signaux jusqu'à 40 MHz sur les 4 fronts des signaux. J'ai donc fait un petit module (pas encore testé complète ment, uniquement avec un seul codeur au lieu de 3) qui permet de communiquer avec ces chips. A+ Antoine --- - ___ Avr-list mailing list Avr-list@droids-corp.org CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive WIKI : http://wiki.droids-corp.org/index.php/Aversive DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/ BUGZILLA : http://bugzilla.droids-corp.org COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog ___ Avr-list mailing list Avr-list@droids-corp.org CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive WIKI : http://wiki.droids-corp.org/index.php/Aversive DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/ BUGZILLA : http://bugzilla.droids-corp.org COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog ___ Avr-list mailing list Avr-list@droids-corp.org CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive WIKI : http://wiki.droids-corp.org/index.php/Aversive DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/ BUGZILLA : http://bugzilla.droids-corp.org COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog
Re: [Avr-list] Nouveau module de gestion des encodeurs
Salut Antoine, Merci pour le patch ! j'avoue que pour le moment je l'ai juste parcouru et pas encore regardé en détail. Je fais ça dès que j'ai un peu de temps. Une petite interrogation sur le principe : nous avons nous aussi un module qui permet de récupérer la valeurs des codeurs par spi. Je voulais juste te mettre en garde sur un inconvénient du système (qui se contourne je te rassure): L'an dernier on faisait du polling sur les codeurs toutes les 128us car la valeur lue était sur 8 bits, elle pouvait donc boucler rapidement. On perdait pas mal de temps CPU à faire ça. Cette année, la lecture des codeurs prend un certain temps (plusieurs dizaines de microsecondes) rendant impossible de faire un polling aussi rapide, mais comme les valeurs sont sur 16 bits, on peut se permettre de la lire que toutes les 5ms (à chaque periode d'asservissement). Ca ne pose aucun problème pour asservir le moteur. Par contre, si on veut lire la position du moteur sur un évenement asynchrone, comme dans le cas des balises par exemple, alors la précision de la valeur lue est faible, puisqu'elle n'est mise à jour que toutes les 5ms. Pour pallier à ce problème, on a mis en place une interpollation linéaire pour la balise et le scanner, ça marche très bien. ++ Olivier Antoine albertelli wrote: > Hello, > Pour l'année prochaine, je fais (avec mon club) une carte de régulation > de moteurs basée sur Aversive. On a donc dû faire une solution de > lecture de codeur, vu que pas mal d'équipe ont des problèmes pour ça, et > on pense avoir trouvé une solution intéressante : les LS7366 de LSI/CSI. > Ce sont des compteurs de signaux en quadrature, 32 bits, interfaçable > par SPI, qui peuvent recevoir des signaux jusqu'à 40 MHz sur les 4 > fronts des > signaux. J'ai donc fait un petit module (pas encore testé complètement, > uniquement avec un seul codeur au lieu de 3) qui permet de communiquer > avec ces chips. > A+ > > Antoine > > > > > ___ > Avr-list mailing list > Avr-list@droids-corp.org > CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive > WIKI : http://wiki.droids-corp.org/index.php/Aversive > DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/ > BUGZILLA : http://bugzilla.droids-corp.org > COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog ___ Avr-list mailing list Avr-list@droids-corp.org CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive WIKI : http://wiki.droids-corp.org/index.php/Aversive DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/ BUGZILLA : http://bugzilla.droids-corp.org COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog
[Avr-list] Nouveau module de gestion des encodeurs
Hello,Pour l'année prochaine, je fais (avec mon club) une carte de régulation de moteurs basée sur Aversive. On a donc dû faire une solution de lecture de codeur, vu que pas mal d'équipe ont des problèmes pour ça, et on pense avoir trouvé une solution intéressante : les LS7366 de LSI/CSI. Ce sont des compteurs de signaux en quadrature, 32 bits, interfaçable par SPI, qui peuvent recevoir des signaux jusqu'à 40 MHz sur les 4 fronts des signaux. J'ai donc fait un petit module (pas encore testé complètement, uniquement avec un seul codeur au lieu de 3) qui permet de communiquer avec ces chips. A+ Antoine encoders_cvra_add.patch Description: Binary data ___ Avr-list mailing list Avr-list@droids-corp.org CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive WIKI : http://wiki.droids-corp.org/index.php/Aversive DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/ BUGZILLA : http://bugzilla.droids-corp.org COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog