Bonjour,
Je viens poster sur le forum car, après plusieurs semaines de recherches et vains tripatouillages, je ne sais plus que faire pour résoudre mon problème.
Le projet concerné est un système embarqué contrôlé par une developpement board (Olimex A20) avec un système Debian (3.4) sur micro-SD fourni par le constructeur de la board.
Un programme en C++/Qt4 contrôle un moteur pas-à-pas en envoyant des ordres réguliers (il faut envoyer un ordre pour chaque pas).
Je précise pour détail de programmation que la boucle de contrôle a son propre thread et ne fait rien d'autre qu'envoyer l'ordre puis attendre une durée précise.
Le problème que j'ai se situe au niveau de cette durée qui, justement, n'est pas précise du tout. Pour être plus exact, j'ai pu mesurer à l'oscilloscope que l'attente effective sera systématiquement supérieure à l'attente ordonnée. Comme c'est cette durée qui conditionne la vitesse de déplacement du moteur, cela pose un sérieux problème car, non seulement il ne se déplace pas à la vitesse souhaitée, mais en plus il plafonne bien avant d'atteindre sa vitesse maximale.
J'ai pu constater également que cela ne semble pas être une limitation matérielle car, en supprimant la fonction d'attente (on envoie les ordres successifs aussi rapidement que le système en est capable), la fréquence des ordres est nettement supérieure à ce dont j'ai besoin. Mais dès que j'ordonne une attente entre les signaux, je vois apparaître une latence supplémentaire à l'attente. Par exemple, si j'ordonne 2 ms se latence, j'en aurais 5, et si j'ordonne 200 ms de latence, j'en aurait 250.
C'est pour moi un problème bloquant et là je suis... ben bloqué.
Partager