mbed Nucleo f 401 re - недостаточная скорость передачи данных

Тема в разделе "Arduino & Shields", создана пользователем f1nder, 17 май 2015.

  1. f1nder

    f1nder Нуб

    Доброго времени суток! На основе платы было изготовлено устройство, собирающее информацию с датчиков. Задействованы 6 каналов АЦП. Удалось довести частоту опроса всех 6 каналов до 1 кгц (период строго 1 мс с доводкой). Логика работы: каждый цикл программа единовременно опрашивает 6 входов АЦП и отправляет данные в виртуальный COM-порт, если времени прошло меньше 1 миллисекунды, то идет "дожидание" до 1 мс и начало следующего цикла. Скорость COM-порта - 921600 бод, хватает впритык.
    Задача: увеличить частоту опроса датчиков (а соответственно и вывода показаний) в 10 раз.
    Опытным путем было установлено, что сам опрос вместе с форматированием чисел ацп занимает 50-60 микросекунд. Весь цикл должен быь в пределах 100 микросекунд.
    В инфе к плате сказано, что nucleo обладает 3мя UART портами: "Наиболее востребованных UART-интерфейсов на плате целых три, два из них работают на скоростях до 10 500 000 бод, а третий — до 5 250 000 бод"

    Так вот, я не понимаю, как эту скорость выставить. при попытке выставить скорость больше 921600 устройство перестает работать.

    Я не знаком с особенностями программно-аппаратной реализации данных интерфейсов, но предполагаю что на виртуальном COM-порте скорость ограничена аппаратно, а указанные скорости действуют на определенных пинах, соответствующих UART-портам. Однако в таком случае я не нашел адаптера под ПК, который поддерживал бы такую скорость. Необходима скорость 10 500 000 бод. Подскажите, как реализовать данное требование?

    Кстати, была испробована библиотека USB Host совместно с USB Msd, данные писались на флешку, но это результата не дало, скорость низкая, тип передачи Bulk. Кто что думает?
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Перестает работать передача с контроллера или прием на ПК?
    Через COM-порт скорее всего не получится.

    Попробуйте посмотреть в сторону Ethernet на микросхеме Wiznet, только не берите готовый модуль, делайте свою железку. Модули работают по SPI и там много скорости выжать не получится. Сама микросхема умеет в параллельную передачу, получается шустрее. Нужно курить даташит и считать.
     
  3. f1nder

    f1nder Нуб

    Когда пытался скорость (5 250 000, 10 500 000) выставить на Virtual COM - плата переставала реагировать на кнопку запуска, назначенную программно на юзербаттон.
    Мне подойдет любой способ, лишь бы можно было эту информацию в реальном времени либо передать на пк, либо сохранить на флешку. Забыл сказать, что был еще 1 способ. Посчитали объем данных - получилось примерно 400 кб за 4 секунды (если не получается постоянно реал-тайм передавать, то хотя бы чтобы за 4 секунды устройство сохраняло весь массив данных с последующим сливом на комп) - смотрел в сторону использования внутренней флеш памяти, однако разобраться в том как ей пользоваться так и не смог.

    На мой взгляд, проще всего было бы разогнать COM до 10,5 Мбод, однако я не догоняю где взять такой скоростной адаптер, в сети не нашел.

    Через USB тоже ниче не выходит, скорости не хватает, хотя 100 Кбайт в секунду не так уж и много

    Проблема еще в том, что если выбирать какой то способ, нужно быть на сто процентов уверенным, что он заработает, времени очень мало, не имею возможности экспериментировать.
    Кто нибудь работал с внутренней памятью?
     
    Последнее редактирование: 17 май 2015
  4. ANV

    ANV Гуру

    В описании платы написано что у нее OTG FS USB, это значит что канальная скорость 12мбод. Выдавливать из 12 канальных мегабод 10 реальных неразумно, надо переходить с Full speed на High Speed.
    Самое простое что можно сделать - это взять внешнюю микросхему для Virtual COM порта, например FT2232H
     
  5. f1nder

    f1nder Нуб

    ANV, насколько я понял, Nucleo, как таковые High Speed не поддерживают. Поскольку я по специальности не микроэлектронщик и даже не программист, не могли бы вы поподробнее объяснить, каким образом данную микросхему применить в составе собираемого устройства?
     
  6. ANV

    ANV Гуру

    На плате есть несколько UART, пара из которых умеет работать с ваших слов на скорости 10500000 бод. Вот к этому UART и надо подключить FT2232H. Хватит трех проводов - gnd, tx и rx. Надо помнить что в UART TX и RX считаются со "своей стороны". Это значит что TX на плате пойдет на RX на FT2232, а RX на TX. Питание микросхема возьмет с USB. Если не электронщик, то надо покупать не микросхему, а сразу спаянный модуль.
    Но сначала прочитать документацию на FT2232H и свою плату и убедиться что у них есть общие скорости.
     
  7. f1nder

    f1nder Нуб

    Спасибо. спаять без проблем при желании. Инфу по скорости взял с оф. сайта амперки, на сайте стм пока не найду конкретной таблицы скоростей. только для виртуал ком.
    Тогда еще вопрос: Если в документации не обозначены поддеживаемые скорости serial портов, то как проверить реальную поддерживаемую скорость?
     
    Последнее редактирование: 17 май 2015