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 ??
Réponses:
Cela est dû à la minuterie de latence de 16 ms du pilote FTDI et au fait que mes réponses à l'interrogation n'étaient pas assez longues pour remplir le tampon de 64 octets pour déclencher automatiquement la vidange du tampon. Lisez AN232B-04_DataLatencyFlow.pdf si vous êtes intéressé, ou allez simplement dans votre gestionnaire de périphériques et modifiez les paramètres dans vos propriétés de port série USB.
la source
Sans connaître beaucoup de détails (que je ne veux pas vraiment savoir), je blâmerais l'adaptateur USB vers RS-485. Nous avons eu un problème similaire sur un processeur Intel Q7 exécutant Linux avec l'un de ces adaptateurs.
Nous utilisions l'adaptateur temporairement jusqu'à ce que notre matériel personnalisé soit prêt. Notre matériel personnalisé utilise une liaison PCIe et un FPGA pour faire la même interface RS-485 (et beaucoup plus). Le logiciel est resté le même pour l'adaptateur et notre matériel personnalisé. Lorsque nous sommes passés au matériel personnalisé, le problème a disparu.
la source