Interrogation du capteur via l'interface série USB-RS485 bloquée à 16 ms, même si elle devrait être plus rapide

8

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:

  1. envoyer un message de sondage
  2. attendre une réponse
  3. 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).

entrez la description de l'image ici

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 ??

evsc
la source
Donc, l'interrogation se produit toujours à partir d'un ordinateur exécutant OSX ou Windows 7? Le délai sur USB peut être assez important quel que soit le langage de programmation que vous utilisez.
Kellenjb
en ce moment, nous testons sur Windows 7 et sur OSX. à la fin, il fonctionnera sur Windows 7.
evsc
2
Au lieu de modifier votre question, vous pouvez répondre à votre propre question. Cela vous permettra de le sélectionner comme réponse et même d'obtenir des votes positifs!
Kellenjb
dans 7 heures je le ferai! :) <.... Les utilisateurs ayant moins de 100 points de réputation ne peuvent pas répondre à leur propre question pendant 8 heures après avoir demandé. Vous pouvez répondre vous-même en 7 heures. En attendant, veuillez utiliser des commentaires ou modifier votre question à la place.>
evsc

Réponses:

5

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.

evsc
la source
2

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
Oui! vient de comprendre que je peux changer un tas de choses dans les paramètres du port série USB (en particulier le minuteur de latence) et puis tout
s'accélère