Скорость последовательной связи (UART) датчика выше, чем скорость обработки микроконтроллера.
У меня есть IMU-датчик Vector Nav VN100, который отправляет данные последовательно через UART. Я подключил его к ATmega32. Он получает данные (угол ROLL) от датчика и в соответствии с углом ROLL управляет серводвигателем.
Мой вопрос: если скорость отправки выше, чем скорость обработки ATmega32, то некоторые данные с датчика будут удалены. Как решить эту проблему?
@mohamed, 👍-3
Обсуждение1 ответ
При использовании аппаратного обеспечения встроенного процессора, реализованного UART, часто бывает так, что скорость, с которой программное обеспечение обрабатывает данные, составляет часть общая скорость передачи данных, иногда называемая Скорость передачи. Если UART настроен на работу с 8-битным RS-232, где общая скорость передачи составляет 10 000 бит в секунду, процессор должен обрабатывать данные только на части этой скорости. Возможно, 1/10 с учетом нескольких битов заголовка и пробела между символами.
Вмешательство процессора можно уменьшить, если аппаратный UART содержит несколько байтов буферизации. При каждом удвоении числа байтов буферизации, поддерживаемых оборудованием, количество вмешательств процессора сокращается вдвое.
Помимо этого, существуют встроенные процессоры, в которых UART поддерживает DMA или прямой доступ к памяти. Здесь аппаратный UART будет записывать полученные данные непосредственно в память процессора без необходимости вмешательства процессора. Эта функция обычно доступна только на многофункциональных встроенных процессорах.
Изучите этот PDF-файл, чтобы понять возможности и ограничения процессора ATmega32. В частности, раздел USART, начинающийся на странице 140.
- о том, как разделить один внешний последовательный EEprom с помощью двух микроконтроллеров?
- о том, как записать данные во весь EEprom?
- Arduino EEPROM сохраняет старые данные после прошивки новой программой
- Как работает стирание EEPROM?
- Не получается читать из / писать в EEPROM
- EEPROM.get возвращает неверные данные
- О UART один передатчик несколько приемников
- Serial.println не будет форматировать DEC
Если данные приходят быстрее, что их можно обработать и вы не можете изменить скорость, вам придется сбросить данные или использовать более быструю плату, @chrisl
@chrisl Разве нет другого способа, например, использовать буфер вместо удаления данных?, @mohamed
Даже если вы используете буфер. Когда он заполнен, вам нужно удалить данные. Каковы ваши точные требования? Чтение данных непрерывно? Или только на ограниченный период времени?, @chrisl
@chrisl только на ограниченное время, @mohamed
Какая у вас скорость входящих данных? Это какая скорость передачи данных вы будете использовать? Как часто будет отправляться «угол крена»? И насколько велико каждое сообщение (в байтах)?, @GMc
@GMc Скорость передачи данных составляет 921600, @mohamed
Там было три вопроса... как часто будут отправляться сообщения? И какова длина каждого сообщения в байтах? Если скорость передачи составляет 921600 бод, но вы получаете только 1 сообщение в секунду длиной всего 2 байта и используете UART (например), то **вероятно** ответ будет «*с вами все будет в порядке*». С другой стороны, если существует непрерывный устойчивый поток данных с такой скоростью передачи данных без пауз между сообщениями, тогда **вероятно** ответ будет «*у вас нет шансов*». Есть несколько факторов, которые определяют ответ на ваш вопрос., @GMc