Перейти к содержанию
    

Акселерометр LIS3DH

Добрый вечер.

Есть акселерометр LIS3DH, показания которого считывают по прерыванию от вывода INT1. Проблема заключается в том, что прерывания о готовности данных идут с неправильной частотой. Задаю 400 Гц по факту вижу 380 Гц, ошибка как-то великовата на мой взгляд. Чем выше частота дискретизации, тем выше больше отклонение от заданного значения. Перерыл документацию ни какой информации по этому поводу не нашел, раньше работал с другими инерциальными датчиками и такой проблемы не замечал, погрешность частоты выдачи сигналов была менее 1%.

Грешили на китайский чип LIS3DH, перепаяли на купленные с официальных складов комплектующих. При заданной частоте 400Гц имеем 390Гц, получается что ST не гарантируются частоту дискретизации от чипа к чипу? Может кто-то сталкивался с подомной проблемой на данном или ином акселерометре? 

На данный думаю завести вывод INT1 на таймер и определять фактическую частоту, но че с этим потом делать не очень понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это нормально.  Измерения тактируются от внутреннего генератора. Как вы понимаете, кварца внутри нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, tgruzd сказал:

Как вы понимаете, кварца внутри нет.

Да это я понимаю. Но я до этого использовал MPU6050, там тоже нет кварца и там с частотой проблем не замечал.

В документации ST про тактирование и его характеристики я не нашел информации. Получается что при изменении температуры результат вообще не предсказуем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 11.11.2022 в 21:46, Sverchok сказал:

что прерывания о готовности данных идут с неправильной частотой.

А зачем вам правильная частота?

Набираете сколько-то, усредняете и получаете нужную величину.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, HardEgor сказал:

А зачем вам правильная частота?

Преобразование Фурье брать надо от данных с акселерометра. А их будет несколько и если каждый будет выдавать с разной частотой, то обрабатывать это будет не здорово.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 11.11.2022 в 16:46, Sverchok сказал:

Чем выше частота дискретизации, тем выше больше отклонение от заданного значения.

Как предположение: Новое преобразование начинается от момента завершения чтения предыдущего значения. Это если внутри датчик не имеет буфера данных для хранения предыдущего измерения. Поэтому чем выше частота - тем сильнее сказываются задержки чтения. К тому-же - не написали: по какому интерфейсу читаете данные? Если I2C, то датчик может задерживать SCL (clock stretching) из-за своих внутренних нужд.

Можно попробовать читать по SPI. К тому-же - запускать транзакцию чтения не программно (в ISR), а аппаратно - стартуя от сигнала готовности данных. Это позволит: и уменьшить задержку старта чтения; и сделать её одинаковой (чтобы на неё не влияли задержки обработки прерывания).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, Sverchok сказал:

Преобразование Фурье брать надо от данных с акселерометра. А их будет несколько и если каждый будет выдавать с разной частотой, то обрабатывать это будет не здорово.

Вы напрямую берете без усреднения? Глупо - их хоть как-то надо усреднять, слишком много шумов.

Вам в любом случае потребуется единая синхронизация всех акселей, значит где-то будет флаг, что все данные собраны и можно обсчитать все датчики.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 сказал:

Вы напрямую берете без усреднения? Глупо - их хоть как-то надо усреднять, слишком много шумов.

Не совсем я планировал использовать ФНЧ, с этого все и началось. При расчетах фильтра хотел убедиться что частота дискретизации стоит верно и тут выяснилось, что она не постоянна, а рассчитывать коэффициенты фильтра в МК не очень хочется. Да и перед преобразованием Фурье еще бы и окно применить не плохо, которое я тоже планировал хранить в виде констант.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если у вас такие "жесткие" требования к "времянке", то может стоит подумать в сторону датчиков с аналоговыми выходами. Вот, например, был такой когда-то: LIS3L02AS5. Заводите его аналоговые выходы на входы АЦП МК. А дальше, уже сами решаете -  в какие моменты времени измерять, с какой частотой и прочее. Опираясь на кварцованную тактовую частоту МК...

 

Изменено пользователем quark

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...