J'ai une configuration, connectant une carte de capteur Razor IMU , avec une carte de dérivation RS-485 , à une interface série USB-RS485 via un câble USB dans mon ordinateur portable. J'exécute un logiciel sur l'ordinateur portable (Max / MSP) qui envoie des messages d'interrogation au capteur, attend les données de réponse et, à la réception de la réponse, déclenche automatiquement un nouveau message d'interrogation. C'est une boucle constante:
- envoyer un message de sondage
- attendre une réponse
- sur réponse, passez à 1.
Je veux que cette interrogation soit aussi rapide que possible, car je devrai brancher 21 de ces capteurs sur le même bus RS485. Le firmware du Razor est programmé avec l' IDE Arduino , et selon le code, il ne devrait y avoir qu'un délai de ~ 2 ms entre le message d'interrogation et l'écriture de la réponse. Le firmware passe également 12 ms toutes les 20 ms à l'allocation et au calcul des capteurs. Ce calcul retarde parfois la réponse au scrutin. J'en suis conscient et tous les résultats sont en conséquence.
Mon problème en ce moment est que l'interrogation du capteur est bloquée à un taux de mise à jour de 15 millisecondes en moyenne. J'ai regardé les données avec mon petit oscillosope USB et j'ai fait un diagramme (> PDF).
Mon oscilloscope se trouve directement sur l'interface USB-RS485 et voit l'interrogation s'éteindre et le message de réponse entrer. Le délai entre ces deux se situe entre 2 et 13 ms. Cette différence s'explique par le fait que parfois le rasoir est occupé à effectuer ses calculs mathématiques de capteur. Le fait étrange est que, même si les réponses arrivent avec des retards différents, l'interrogation semble toujours sortir au même intervalle d'environ 15 ms.
Nous avons également implémenté la même configuration avec
- coder le firmware en C et programmer le rasoir avec avr-dude
- faire l'interrogation logicielle en code Python
- sur Mac OSX et PC Windows 7
Toutes les combinaisons possibles ont abouti au même intervalle de 15 ms. Le problème n'est donc ni dans le code Arduino, ni dans Max / MSP. J'ai le soupçon que le problème pourrait être dû à l'interface série USB-RS485 et / ou au pilote FTDI nécessaire.
Ce problème vous semble-t-il familier ??