Здравствуйте. Необходимо получать данные с ДУС L3gd20 на stm32f3-discovery и передавать их на компьютер. ДУС настроен на частоту измерения 960Гц. Настроил таймер на 2кГц(т-ма Котельникова), где читаю выходные регистры датчика и передаю через UART. До этого стояла скорость передачи 9600 бод/с. Понял, что UART не успевает за таймером (хотя коллизий нету, странно). Только со скоростью 230400 бод/с, частота передачи UART достигла ~1.8кГц.
Сдаётся мне, что всё это неправильно, и надо организовывать буфер, где будут хранятся данные с датчика. Потом эти данные можно неспешно передавать. (онлайн не нужен).
Подскажите, как организовать буфер?
Как измерить и передать данные без потерь на stm32?
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Как измерить и передать данные без потерь на stm32?
А в это время буфер будет неспешно переполнятьсяFireProoF писал(а):Потом эти данные можно неспешно передавать.
Массив. Не ?FireProoF писал(а):как организовать буфер?
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Как измерить и передать данные без потерь на stm32?
Тогда еще один вопрос. Если у меня uart не успевает за таймером, то должны быть коллизии. Т.е. не закончилась предыдущая передача, а начинается новая. Да, и как быть уверенным, что данные не теряются пока передаются?
установил скорость uart 9600 и передаю 10 пакетов. занимает это 41,5мс. Вот теперь еще вопрос. Какова частота дискретизации? 2кГц, как и должно быть или 1/41,5мс= 240Гц?
Я понимаю, что здесь нужен FIFO-стек, но может есть уже готовые аппаратные велосипеды?
установил скорость uart 9600 и передаю 10 пакетов. занимает это 41,5мс. Вот теперь еще вопрос. Какова частота дискретизации? 2кГц, как и должно быть или 1/41,5мс= 240Гц?
Я понимаю, что здесь нужен FIFO-стек, но может есть уже готовые аппаратные велосипеды?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Как измерить и передать данные без потерь на stm32?
Зачем гемор наживать ? Передавайте с такой скоростью, которая полюбому обеспечит непрерывную передачу данных, при вашей частоте опроса датчика. Если хотите снизить скорость передачи - снижайте частоту выборки данных.
Нереально передавать данные с более низкой скоростью, чем выборка этих данных, не потеряв их. И никакие аппаратные средства не помогут, ибо это физически невозможно. Это как наливать в бочку воду с одним расходом, а забирать из неё с более меньшим, надеясь, что она не переполнится.
Нереально передавать данные с более низкой скоростью, чем выборка этих данных, не потеряв их. И никакие аппаратные средства не помогут, ибо это физически невозможно. Это как наливать в бочку воду с одним расходом, а забирать из неё с более меньшим, надеясь, что она не переполнится.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Как измерить и передать данные без потерь на stm32?
Если данные избыточны, то можно их ужать. Например передавать не абсолютные величины, а только на сколько они изменились. Алгоритм правда в таком случае усложняется.
- Реклама
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Как измерить и передать данные без потерь на stm32?
Действительно) Прост по инерции захотел получать данные на предельных частотах)Аlex писал(а):Зачем гемор наживать ? Передавайте с такой скоростью, которая полюбому обеспечит непрерывную передачу данных, при вашей частоте опроса датчика. Если хотите снизить скорость передачи - снижайте частоту выборки данных.
Нереально передавать данные с более низкой скоростью, чем выборка этих данных, не потеряв их. И никакие аппаратные средства не помогут, ибо это физически невозможно. Это как наливать в бочку воду с одним расходом, а забирать из неё с более меньшим, надеясь, что она не переполнится.
Очень полезная идея! В моём случае таким образом можно увеличить частоту на 40%)Z_h_e писал(а):Если данные избыточны, то можно их ужать. Например передавать не абсолютные величины, а только на сколько они изменились. Алгоритм правда в таком случае усложняется.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Как измерить и передать данные без потерь на stm32?
Каким-то образом нужно будет отслеживать целостность данных, а то вдруг пакет утерян и все остальное соответственно тоже идет неверно. Например раз в N времени передавать абсолютные значения для сравнения и корректировке при необходимости.FireProoF писал(а):Очень полезная идея!
-
misyachniy
- Прорезались зубы
- Сообщения: 219
- Зарегистрирован: Вт июл 02, 2013 09:17:49
Re: Как измерить и передать данные без потерь на stm32?
Если есть USB, то зачем мучиться через UART?
USB Кроме более высокой скорости гарантирует целостность данных.
USB Кроме более высокой скорости гарантирует целостность данных.
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Как измерить и передать данные без потерь на stm32?
Ну да. Уже методом тыка освоил передачу по usb. Правда там приходится всю информацию перед отправкой собирать в пакет, так как терминал отображает концевики отдельных пакетов.



