Опрос датчика через последовательный интерфейс USB-RS485 застрял на 16 мс, хотя он должен быть быстрее


8

У меня есть установка, подключающая сенсорную плату Razor IMU с платой RS-485 к последовательному интерфейсу USB-RS485 через USB-кабель к моему ноутбуку. Я запускаю программное обеспечение на ноутбуке (Max / MSP), которое отправляет сообщения опроса на датчик, ожидает данные ответа и при получении ответа автоматически запускает новое сообщение опроса. Это постоянный цикл:

  1. отправить сообщение для голосования
  2. ждать ответа
  3. в ответ перейдите к 1.

Я хочу, чтобы опрос проводился как можно быстрее, так как мне придется подключить 21 из этих датчиков к одной шине RS485. Микропрограммное обеспечение на Razor программируется с помощью Arduino IDE , и согласно коду, между сообщением об опросе и записью ответа должна быть задержка всего ~ 2 мс. Микропрограмма также тратит 12 мс каждые 20 мс на распределение и расчет датчика. Этот расчет иногда задерживает ответ на опрос. Я знаю об этом, и все результаты соответственно.

Моя проблема сейчас заключается в том, что опрос датчика зависает с частотой обновления в среднем 15 миллисекунд. Я посмотрел на данные с помощью небольшого usb-осциллографа и сделал диаграмму (> PDF).

введите описание изображения здесь

Мой осциллограф находится непосредственно на интерфейсе USB-RS485 и видит, что опрос завершается, и приходит ответное сообщение. Задержка между этими двумя значениями составляет от 2 до 13 мс. Эта разница объясняется тем фактом, что иногда бритва занята своими математическими вычислениями. Странный факт заключается в том, что, хотя ответы приходят с разными задержками, опрос всегда проходит с одинаковым интервалом около 15 мс.

Мы также реализовали ту же настройку с

  • кодирование прошивки на C и программирование Razor с помощью avr-dude
  • делать программный опрос в коде Python
  • на Mac OSX и ПК с Windows 7

Все возможные комбинации приводили к одному и тому же интервалу 15 мс. Так что проблема не в Arduino-коде, ни в Max / MSP. У меня есть подозрение, что проблема может быть связана с последовательным интерфейсом USB-RS485 и / или необходимым драйвером FTDI.

Эта проблема звучит знакомо никому ??


Таким образом, опрос всегда происходит с компьютера под управлением OSX или Windows 7? Задержка на USB может быть довольно большой независимо от используемого вами языка программирования.
Келленжб

сейчас мы тестируем на Windows 7 и OSX. в итоге он будет работать на Windows 7.
evsc

2
Вместо того, чтобы редактировать свой вопрос, вы можете ответить на свой вопрос. Это позволит вам выбрать его в качестве ответа и даже получить голосов!
Келленжб

через 7 часов я буду! :) <.... Пользователи с репутацией менее 100 не могут ответить на свой вопрос в течение 8 часов после запроса. Вы можете самостоятельно ответить за 7 часов. До тех пор, пожалуйста, используйте комментарии или измените свой вопрос.>
evsc

Ответы:


5

Это связано с таймером задержки 16 мс драйвера FTDI и тем фактом, что мои ответы на опрос не были достаточно длинными, чтобы заполнить 64-байтовый буфер для автоматического запуска его очистки. Прочитайте AN232B-04_DataLatencyFlow.pdf, если вам интересно, или просто зайдите в диспетчер устройств и измените настройки в свойствах вашего USB-последовательного порта.


2

Не зная многих деталей (которые я на самом деле не хочу знать), я бы обвинял адаптер USB-RS-485. У нас была похожая проблема на процессоре Intel Q7 под управлением Linux с одним из этих адаптеров.

Мы временно использовали адаптер, пока наше оборудование не было готово. Наше пользовательское оборудование использует канал PCIe и FPGA для того же интерфейса RS-485 (и многих других). Программное обеспечение не изменилось для адаптера и нашего специального оборудования. Когда мы переключились на нестандартное оборудование, проблема ушла.


да! только что понял, что я могу изменить кучу вещей в настройках USB-последовательного порта (особенно таймер задержки), и тогда все ускоряется ...
evsc
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.