У меня есть установка, подключающая сенсорную плату Razor IMU с платой RS-485 к последовательному интерфейсу USB-RS485 через USB-кабель к моему ноутбуку. Я запускаю программное обеспечение на ноутбуке (Max / MSP), которое отправляет сообщения опроса на датчик, ожидает данные ответа и при получении ответа автоматически запускает новое сообщение опроса. Это постоянный цикл:
- отправить сообщение для голосования
- ждать ответа
- в ответ перейдите к 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.
Эта проблема звучит знакомо никому ??
Ответы:
Это связано с таймером задержки 16 мс драйвера FTDI и тем фактом, что мои ответы на опрос не были достаточно длинными, чтобы заполнить 64-байтовый буфер для автоматического запуска его очистки. Прочитайте AN232B-04_DataLatencyFlow.pdf, если вам интересно, или просто зайдите в диспетчер устройств и измените настройки в свойствах вашего USB-последовательного порта.
источник
Не зная многих деталей (которые я на самом деле не хочу знать), я бы обвинял адаптер USB-RS-485. У нас была похожая проблема на процессоре Intel Q7 под управлением Linux с одним из этих адаптеров.
Мы временно использовали адаптер, пока наше оборудование не было готово. Наше пользовательское оборудование использует канал PCIe и FPGA для того же интерфейса RS-485 (и многих других). Программное обеспечение не изменилось для адаптера и нашего специального оборудования. Когда мы переключились на нестандартное оборудование, проблема ушла.
источник