Работа с микросхемой LIS302DL

Кружок юных, и не только, радиолюбителей

Работа с микросхемой LIS302DL

Сообщение Fireman » 04 июн 2012, 19:48

Небольшое предисловие.

Решил заняться изучением микросхем акселерометров. Ну и купил LIS302DL, т.к. она была одна из доступных, а также наличие в ней интерфейса I2C, что, как я считаю, упрощает работу. И не требуется использование ADC - ножки будут свободные :-).
Но не тут-то было. Сперва оказалось, надо разобраться с расчётом углов :wo_ol: , а математику я забыл уже... давно. С расчётом углов вроде разобрался. Нашёл формулы:
УголX = arctan(Ax/(sqr(Ay*Ay + Az*Az)))
УголY = arctan(Ay/(sqr(Ax*Ax + Az*Az)))
УголZ = arctan(Az/(sqr(Ax*Ax + Ay*Ay)))
,где A мы получаем от микросхемы с небольшим перерасчётом, байт полученных данных умножить на чувствительность на бит. В случае FS = 0, +-2,3g -> чувствительность составит ~0,018. Дальше всё :-(
Появились непонятки. Микросхема установлена на макетке. Макетка находится в спокойном положении, никто её не трогает, даже если её прижать пальцем к столу, данные по осям поступают с точностью +-2, т.е. непостоянны. Как с этим бороться, не знаю. Ещё по понятна работа регистра STATUS_REG, он всегда читается 255, даже если по некоторым осям данные не меняются. То, что они не меняются, оцениваю по считанным данным. Хотя я их считываю раз в две секунды. Возможно там они уже поменялись кучу раз :du_ma_et: Или на этот регистр проще забить и с заданным периодом читать данные? Для меня стоит вопрос, можно ли уменьшить дребезг показаний и надо ли? И стоит ли обрабатывать STATUS_REG. Прерывания не хочу использовать от микросхемы, т.к. считаю это лишнее.

В приборе Примус введена калибровка. Вот по этому вопросу у меня полная загвоздка. Как вообще правильно проводить калибровку при работе с этой микросхемой и что это даёт? Подскажите пожалуйста.

Наткнувшись на данный форум, увидел, что slav0n разобрался с данной микросхемой. Поэтому и решил спросить здесь :-): Т.к. на просторах инета не нашёл ничего внятного по работе с данной микросхемой, не говорят уже о калибровке. Коды встречались, но в большинстве народ просто выкладывает код чтения данных по I2C или SPI, в некоторых мелькает калибровка, но ни комментариев (что зачем и почему ) ни подключенных файлов с константами нет.

Давайте разберём, как с ней работать, думаю многим будет интересно :)
Fireman
 
Сообщения: 2
Зарегистрирован: 17 янв 2012, 06:22
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

Re: Работа с микросхемой LIS302DL

Сообщение slav0n » 05 июн 2012, 06:07

Fireman писал(а):данные по осям поступают с точностью +-2, т.е. непостоянны. Как с этим бороться

с железной стороны - поставить фильтрующий конденсатор на питание
с программной стороны - использовать какой либо сглаживающий алгоритм.
Лично мне нравится этот -
output[i] = output[i-1] + (input[i] - output[i-1]) / 3
while(1||!1);
slav0n
Site Admin
 
Сообщения: 4674
Зарегистрирован: 15 ноя 2009, 18:43
Благодарил (а): 24 раз.
Поблагодарили: 412 раз.

Сообщение Fireman » 05 июн 2012, 06:17

slav0n писал(а):с железной стороны - поставить фильтрующий конденсатор на питание

Стоит тантал на 10,0 и керамика на 0,1. Но, т.к. макетка и проводки кругом, о большей стабильности видимо не может быть речи.

slav0n писал(а):с программной стороны - использовать какой либо сглаживающий алгоритм.
Лично мне нравится этот -
output[i] = output[i-1] + (input[i] - output[i-1]) / 3

Ок.

Хочу сделать электронный уровень. Расскажите про калибровку в вашем приборе. Как я понимаю, это требуется для нормальной работы микросхемы и получения реальных данных.
Fireman
 
Сообщения: 2
Зарегистрирован: 17 янв 2012, 06:22
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

Re: Работа с микросхемой LIS302DL

Сообщение slav0n » 05 июн 2012, 06:40

Fireman писал(а):И стоит ли обрабатывать STATUS_REG.

я этот регистр не использую
Fireman писал(а):В приборе Примус введена калибровка. Вот по этому вопросу у меня полная загвоздка.

Всё просто - калибровка это всего лишь запись в память значения калибруемой оси. Это значение является смещением оси от нуля и оно в дальнейшем вычитается из показаний регистра оси.
while(1||!1);
slav0n
Site Admin
 
Сообщения: 4674
Зарегистрирован: 15 ноя 2009, 18:43
Благодарил (а): 24 раз.
Поблагодарили: 412 раз.


Вернуться в Я не волшебник, я только учусь...

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 1

cron