Страница 1 из 1
Как измерить и передать данные без потерь на stm32?
Добавлено: Вт май 03, 2016 08:47:16
FireProoF
Здравствуйте. Необходимо получать данные с ДУС L3gd20 на stm32f3-discovery и передавать их на компьютер. ДУС настроен на частоту измерения 960Гц. Настроил таймер на 2кГц(т-ма Котельникова), где читаю выходные регистры датчика и передаю через UART. До этого стояла скорость передачи 9600 бод/с. Понял, что UART не успевает за таймером (хотя коллизий нету, странно). Только со скоростью 230400 бод/с, частота передачи UART достигла ~1.8кГц.
Сдаётся мне, что всё это неправильно, и надо организовывать буфер, где будут хранятся данные с датчика. Потом эти данные можно неспешно передавать. (онлайн не нужен).
Подскажите, как организовать буфер?
Re: Как измерить и передать данные без потерь на stm32?
Добавлено: Вт май 03, 2016 09:19:42
Аlex
FireProoF писал(а):Потом эти данные можно неспешно передавать.
А в это время буфер будет неспешно переполняться
FireProoF писал(а):как организовать буфер?
Массив. Не ?
Re: Как измерить и передать данные без потерь на stm32?
Добавлено: Вт май 03, 2016 09:23:33
FireProoF
Тогда еще один вопрос. Если у меня uart не успевает за таймером, то должны быть коллизии. Т.е. не закончилась предыдущая передача, а начинается новая. Да, и как быть уверенным, что данные не теряются пока передаются?
установил скорость uart 9600 и передаю 10 пакетов. занимает это 41,5мс. Вот теперь еще вопрос. Какова частота дискретизации? 2кГц, как и должно быть или 1/41,5мс= 240Гц?
Я понимаю, что здесь нужен FIFO-стек, но может есть уже готовые аппаратные велосипеды?
Re: Как измерить и передать данные без потерь на stm32?
Добавлено: Вт май 03, 2016 09:58:49
Аlex
Зачем гемор наживать ? Передавайте с такой скоростью, которая полюбому обеспечит непрерывную передачу данных, при вашей частоте опроса датчика. Если хотите снизить скорость передачи - снижайте частоту выборки данных.
Нереально передавать данные с более низкой скоростью, чем выборка этих данных, не потеряв их. И никакие аппаратные средства не помогут, ибо это физически невозможно. Это как наливать в бочку воду с одним расходом, а забирать из неё с более меньшим, надеясь, что она не переполнится.
Re: Как измерить и передать данные без потерь на stm32?
Добавлено: Вт май 03, 2016 10:44:06
Z_h_e
Если данные избыточны, то можно их ужать. Например передавать не абсолютные величины, а только на сколько они изменились. Алгоритм правда в таком случае усложняется.
Re: Как измерить и передать данные без потерь на stm32?
Добавлено: Вт май 03, 2016 12:49:43
FireProoF
Аlex писал(а):Зачем гемор наживать ? Передавайте с такой скоростью, которая полюбому обеспечит непрерывную передачу данных, при вашей частоте опроса датчика. Если хотите снизить скорость передачи - снижайте частоту выборки данных.
Нереально передавать данные с более низкой скоростью, чем выборка этих данных, не потеряв их. И никакие аппаратные средства не помогут, ибо это физически невозможно. Это как наливать в бочку воду с одним расходом, а забирать из неё с более меньшим, надеясь, что она не переполнится.
Действительно) Прост по инерции захотел получать данные на предельных частотах)
Z_h_e писал(а):Если данные избыточны, то можно их ужать. Например передавать не абсолютные величины, а только на сколько они изменились. Алгоритм правда в таком случае усложняется.
Очень полезная идея! В моём случае таким образом можно увеличить частоту на 40%)
Re: Как измерить и передать данные без потерь на stm32?
Добавлено: Вт май 03, 2016 13:08:07
Z_h_e
FireProoF писал(а):Очень полезная идея!
Каким-то образом нужно будет отслеживать целостность данных, а то вдруг пакет утерян и все остальное соответственно тоже идет неверно. Например раз в N времени передавать абсолютные значения для сравнения и корректировке при необходимости.
Re: Как измерить и передать данные без потерь на stm32?
Добавлено: Пн май 09, 2016 10:27:42
misyachniy
Если есть USB, то зачем мучиться через UART?
USB Кроме более высокой скорости гарантирует целостность данных.
Re: Как измерить и передать данные без потерь на stm32?
Добавлено: Вт май 10, 2016 17:54:28
FireProoF
Ну да. Уже методом тыка освоил передачу по usb. Правда там приходится всю информацию перед отправкой собирать в пакет, так как терминал отображает концевики отдельных пакетов.