Sverchok 1 11 ноября, 2022 Опубликовано 11 ноября, 2022 · Жалоба Добрый вечер. Есть акселерометр LIS3DH, показания которого считывают по прерыванию от вывода INT1. Проблема заключается в том, что прерывания о готовности данных идут с неправильной частотой. Задаю 400 Гц по факту вижу 380 Гц, ошибка как-то великовата на мой взгляд. Чем выше частота дискретизации, тем выше больше отклонение от заданного значения. Перерыл документацию ни какой информации по этому поводу не нашел, раньше работал с другими инерциальными датчиками и такой проблемы не замечал, погрешность частоты выдачи сигналов была менее 1%. Грешили на китайский чип LIS3DH, перепаяли на купленные с официальных складов комплектующих. При заданной частоте 400Гц имеем 390Гц, получается что ST не гарантируются частоту дискретизации от чипа к чипу? Может кто-то сталкивался с подомной проблемой на данном или ином акселерометре? На данный думаю завести вывод INT1 на таймер и определять фактическую частоту, но че с этим потом делать не очень понятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tgruzd 11 11 ноября, 2022 Опубликовано 11 ноября, 2022 · Жалоба Это нормально. Измерения тактируются от внутреннего генератора. Как вы понимаете, кварца внутри нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sverchok 1 11 ноября, 2022 Опубликовано 11 ноября, 2022 · Жалоба 2 минуты назад, tgruzd сказал: Как вы понимаете, кварца внутри нет. Да это я понимаю. Но я до этого использовал MPU6050, там тоже нет кварца и там с частотой проблем не замечал. В документации ST про тактирование и его характеристики я не нашел информации. Получается что при изменении температуры результат вообще не предсказуем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 90 12 ноября, 2022 Опубликовано 12 ноября, 2022 · Жалоба В 11.11.2022 в 21:46, Sverchok сказал: что прерывания о готовности данных идут с неправильной частотой. А зачем вам правильная частота? Набираете сколько-то, усредняете и получаете нужную величину. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sverchok 1 12 ноября, 2022 Опубликовано 12 ноября, 2022 · Жалоба 3 часа назад, HardEgor сказал: А зачем вам правильная частота? Преобразование Фурье брать надо от данных с акселерометра. А их будет несколько и если каждый будет выдавать с разной частотой, то обрабатывать это будет не здорово. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 12 ноября, 2022 Опубликовано 12 ноября, 2022 · Жалоба В 11.11.2022 в 16:46, Sverchok сказал: Чем выше частота дискретизации, тем выше больше отклонение от заданного значения. Как предположение: Новое преобразование начинается от момента завершения чтения предыдущего значения. Это если внутри датчик не имеет буфера данных для хранения предыдущего измерения. Поэтому чем выше частота - тем сильнее сказываются задержки чтения. К тому-же - не написали: по какому интерфейсу читаете данные? Если I2C, то датчик может задерживать SCL (clock stretching) из-за своих внутренних нужд. Можно попробовать читать по SPI. К тому-же - запускать транзакцию чтения не программно (в ISR), а аппаратно - стартуя от сигнала готовности данных. Это позволит: и уменьшить задержку старта чтения; и сделать её одинаковой (чтобы на неё не влияли задержки обработки прерывания). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 90 13 ноября, 2022 Опубликовано 13 ноября, 2022 · Жалоба 7 часов назад, Sverchok сказал: Преобразование Фурье брать надо от данных с акселерометра. А их будет несколько и если каждый будет выдавать с разной частотой, то обрабатывать это будет не здорово. Вы напрямую берете без усреднения? Глупо - их хоть как-то надо усреднять, слишком много шумов. Вам в любом случае потребуется единая синхронизация всех акселей, значит где-то будет флаг, что все данные собраны и можно обсчитать все датчики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sverchok 1 13 ноября, 2022 Опубликовано 13 ноября, 2022 · Жалоба 16 часов назад, jcxz сказал: Можно попробовать читать по SPI. Я сейчас использую SPI. 16 часов назад, jcxz сказал: Как предположение: Да у меня тоже возникло такое предположение. Я изменял частоту самого SPI, что бы данные быстрее считывать, отключал Y и Z ось, чтобы данных было меньше, все это к сожалению не дало результата( На частоту сигнала ready это не влияет. У акселерометра есть FIFO, но нет гарантий, что дам данные с нужно частотой дискретизации лежат. У него еще в настройках есть такой бит Block data update. Default value: 0 (0: continuous update; 1: output registers not updated until MSB and LSB reading) думал в нем проблема, считал этот регистр там стоит 0. 10 часов назад, HardEgor сказал: Вы напрямую берете без усреднения? Глупо - их хоть как-то надо усреднять, слишком много шумов. Не совсем я планировал использовать ФНЧ, с этого все и началось. При расчетах фильтра хотел убедиться что частота дискретизации стоит верно и тут выяснилось, что она не постоянна, а рассчитывать коэффициенты фильтра в МК не очень хочется. Да и перед преобразованием Фурье еще бы и окно применить не плохо, которое я тоже планировал хранить в виде констант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quark 48 13 ноября, 2022 Опубликовано 13 ноября, 2022 (изменено) · Жалоба Если у вас такие "жесткие" требования к "времянке", то может стоит подумать в сторону датчиков с аналоговыми выходами. Вот, например, был такой когда-то: LIS3L02AS5. Заводите его аналоговые выходы на входы АЦП МК. А дальше, уже сами решаете - в какие моменты времени измерять, с какой частотой и прочее. Опираясь на кварцованную тактовую частоту МК... Изменено 13 ноября, 2022 пользователем quark Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться