Polling del sensore tramite interfaccia seriale USB-RS485 bloccato a 16 ms, anche se dovrebbe essere più veloce


8

Ho una configurazione, collegando una scheda sensore IMU Razor , con una scheda Breakout RS-485 , a un'interfaccia seriale USB-RS485 tramite cavo USB nel mio laptop. Eseguo un software sul laptop (Max / MSP) che invia messaggi di polling al sensore, attende i dati di risposta e alla ricezione della risposta attiva automaticamente un nuovo messaggio di polling. È un ciclo costante:

  1. invia un messaggio di polling
  2. attendere una risposta
  3. in risposta vai a 1.

Voglio che questo polling sia il più veloce possibile, poiché dovrò collegare 21 di questi sensori allo stesso bus RS485. Il firmware sul rasoio è programmato con l' IDE di Arduino e secondo il codice dovrebbe esserci solo un ritardo di ~ 2ms tra il messaggio di polling e la scrittura della risposta. Il firmware spende anche 12 ms ogni 20 ms in allocazione e calcolo del sensore. Questo calcolo a volte ritarda la risposta al polling. Ne sono consapevole e tutti i risultati sono di conseguenza.

Il mio problema in questo momento è che il polling del sensore è bloccato a una frequenza di aggiornamento di media 15 millisecondi. Ho guardato i dati con il mio piccolo oscilloscopio USB e ho creato un diagramma (> PDF).

inserisci qui la descrizione dell'immagine

Il mio oscilloscopio si trova direttamente sull'interfaccia USB-RS485 e vede uscire il polling e arriva il messaggio di risposta. Il ritardo tra questi due valori è compreso tra 2 e 13 ms. Questa differenza è spiegabile con il fatto che a volte il rasoio è impegnato a fare i suoi calcoli di matematica dei sensori. Il fatto strano è che, anche se le risposte arrivano con ritardi diversi, il polling sembra sempre uscire allo stesso intervallo di circa 15 ms.

Abbiamo anche implementato la stessa configurazione con

  • codificare il firmware in C e programmare il rasoio con avr-dude
  • eseguendo il polling software nel codice Python
  • su Mac OSX e PC Windows 7

Tutte le possibili combinazioni hanno prodotto lo stesso intervallo di 15 ms. Quindi il problema non è né nel codice Arduino, né all'interno di Max / MSP. Ho il sospetto che il problema potrebbe essere dovuto all'interfaccia seriale USB-RS485 e / o al driver FTDI necessario.

Questo problema sembra familiare a nessuno ??


Quindi il polling si verifica sempre da un computer che esegue OSX o Windows 7? Il ritardo su USB può essere piuttosto elevato indipendentemente dal linguaggio di programmazione che si utilizza.
Kellenjb,

in questo momento stiamo testando su Windows 7 e su OSX. alla fine verrà eseguito su Windows 7.
evsc

2
Invece di modificare la tua domanda, puoi rispondere alla tua stessa domanda. Questo ti permetterà di selezionarlo come risposta e persino ottenere voti!
Kellenjb,

tra 7 ore lo farò! :) <.... Gli utenti con meno di 100 reputazione non possono rispondere alla propria domanda per 8 ore dopo averlo chiesto. Puoi rispondere da solo in 7 ore. Fino ad allora, utilizza i commenti o modifica la tua domanda.>
evsc

Risposte:


5

È dovuto al timer di latenza di 16 ms del driver FTDI e al fatto che le mie risposte di polling non sono state abbastanza lunghe da riempire il buffer a 64 byte per attivare automaticamente lo svuotamento del buffer. Leggi AN232B-04_DataLatencyFlow.pdf se sei interessato, o semplicemente vai a Gestione dispositivi e modifica le impostazioni nelle proprietà della porta seriale USB.


2

Senza conoscere molti dettagli (che non voglio davvero conoscere), darei la colpa all'adattatore da USB a RS-485. Abbiamo riscontrato un problema simile su un processore Intel Q7 con Linux con uno di questi adattatori.

Stavamo usando l'adattatore temporaneamente fino a quando il nostro hardware personalizzato era pronto. Il nostro hardware personalizzato utilizza un collegamento PCIe e un FPGA per eseguire la stessa interfaccia RS-485 (e molto altro). Il software è rimasto lo stesso per l'adattatore e il nostro hardware personalizzato. Quando siamo passati all'hardware personalizzato il problema è scomparso.


sì! ho appena capito che posso cambiare un sacco di cose nelle impostazioni della porta seriale USB (in particolare il timer di latenza) e poi tutto accelera ...
evsc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.