Как измерить и передать данные без потерь на stm32?

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Как измерить и передать данные без потерь на stm32?

Сообщение FireProoF »

Здравствуйте. Необходимо получать данные с ДУС L3gd20 на stm32f3-discovery и передавать их на компьютер. ДУС настроен на частоту измерения 960Гц. Настроил таймер на 2кГц(т-ма Котельникова), где читаю выходные регистры датчика и передаю через UART. До этого стояла скорость передачи 9600 бод/с. Понял, что UART не успевает за таймером (хотя коллизий нету, странно). Только со скоростью 230400 бод/с, частота передачи UART достигла ~1.8кГц.
Сдаётся мне, что всё это неправильно, и надо организовывать буфер, где будут хранятся данные с датчика. Потом эти данные можно неспешно передавать. (онлайн не нужен).
Подскажите, как организовать буфер?
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Как измерить и передать данные без потерь на stm32?

Сообщение Аlex »

FireProoF писал(а):Потом эти данные можно неспешно передавать.
А в это время буфер будет неспешно переполняться :)
FireProoF писал(а):как организовать буфер?
Массив. Не ?
Реклама
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Как измерить и передать данные без потерь на stm32?

Сообщение FireProoF »

Тогда еще один вопрос. Если у меня uart не успевает за таймером, то должны быть коллизии. Т.е. не закончилась предыдущая передача, а начинается новая. Да, и как быть уверенным, что данные не теряются пока передаются?
установил скорость uart 9600 и передаю 10 пакетов. занимает это 41,5мс. Вот теперь еще вопрос. Какова частота дискретизации? 2кГц, как и должно быть или 1/41,5мс= 240Гц?
Я понимаю, что здесь нужен FIFO-стек, но может есть уже готовые аппаратные велосипеды?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Как измерить и передать данные без потерь на stm32?

Сообщение Аlex »

Зачем гемор наживать ? Передавайте с такой скоростью, которая полюбому обеспечит непрерывную передачу данных, при вашей частоте опроса датчика. Если хотите снизить скорость передачи - снижайте частоту выборки данных.
Нереально передавать данные с более низкой скоростью, чем выборка этих данных, не потеряв их. И никакие аппаратные средства не помогут, ибо это физически невозможно. Это как наливать в бочку воду с одним расходом, а забирать из неё с более меньшим, надеясь, что она не переполнится.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Как измерить и передать данные без потерь на stm32?

Сообщение Z_h_e »

Если данные избыточны, то можно их ужать. Например передавать не абсолютные величины, а только на сколько они изменились. Алгоритм правда в таком случае усложняется.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Как измерить и передать данные без потерь на stm32?

Сообщение FireProoF »

Аlex писал(а):Зачем гемор наживать ? Передавайте с такой скоростью, которая полюбому обеспечит непрерывную передачу данных, при вашей частоте опроса датчика. Если хотите снизить скорость передачи - снижайте частоту выборки данных.
Нереально передавать данные с более низкой скоростью, чем выборка этих данных, не потеряв их. И никакие аппаратные средства не помогут, ибо это физически невозможно. Это как наливать в бочку воду с одним расходом, а забирать из неё с более меньшим, надеясь, что она не переполнится.
Действительно) Прост по инерции захотел получать данные на предельных частотах)
Z_h_e писал(а):Если данные избыточны, то можно их ужать. Например передавать не абсолютные величины, а только на сколько они изменились. Алгоритм правда в таком случае усложняется.
Очень полезная идея! В моём случае таким образом можно увеличить частоту на 40%)
Реклама
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Как измерить и передать данные без потерь на stm32?

Сообщение Z_h_e »

FireProoF писал(а):Очень полезная идея!
Каким-то образом нужно будет отслеживать целостность данных, а то вдруг пакет утерян и все остальное соответственно тоже идет неверно. Например раз в N времени передавать абсолютные значения для сравнения и корректировке при необходимости.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
misyachniy
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт июл 02, 2013 09:17:49

Re: Как измерить и передать данные без потерь на stm32?

Сообщение misyachniy »

Если есть USB, то зачем мучиться через UART?
USB Кроме более высокой скорости гарантирует целостность данных.
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Как измерить и передать данные без потерь на stm32?

Сообщение FireProoF »

Ну да. Уже методом тыка освоил передачу по usb. Правда там приходится всю информацию перед отправкой собирать в пакет, так как терминал отображает концевики отдельных пакетов.
Ответить

Вернуться в «ARM»