воскресенье, 19 августа 2012 г.

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

Я наконец-то разобрался с акселерометром. Дело в том, что для работы с акселерометром я использовал код который нашел на просторах интернета. Код был запущен на STM32F4Discovery и исправно моргал светодиодами. Все было хорошо пока я не снял данные с акселерометра и не построил график.

Как показал график, акселерометр практически через раз выдавал нулевые значения. Изменение интервала опроса акселерометра результатов не дало.

Было решено досконально изучить даташит на LIS302DL. В даташите написано, что кроме возможности получения прерывания от акселерометра при готовности данных, есть возможность проверить состояние готовности данных. Для этого есть специальный однобайтовый регистр STATUS_REG.

Я решил пока обойтись без прерываний и использовать данные из STATUS_REG. Но и это не дало результатов. Я полез смотреть "индусский код" и обнаружил что они получают данные с акселерометра неким магическим способом. Было решено переписать код, вот что было сделано. Теперь график выглядит намного лучше. Красный график это моя попытка аппроксимировать данные по времени. Формула выглядит так:

Xn=k*X+(1-k)*Xn-1

где X - данные полученные с акселерометра; Xn - результат аппроксимации текущего значения; Xn-1 - предыдущий результат аппроксимации; k - коэффициент подобранный опытным путем, у меня он равен 0.2

P.S. Немного видео с 3D моделью http://www.youtube.com/watch?v=2lwjDrFj3OA.

2 комментария:

  1. Привет. Как называется приведенная формула? Это же не фильтр Калмана?

    ОтветитьУдалить
    Ответы
    1. Конечно это не Фильтр Калмана. Это вполне себе обыкновенный СЗ(аппроксимация).

      Удалить