Автор Тема: Работа с микросхемой LIS302DL  (Прочитано 2007 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Fireman

  • .
  • *
  • Сообщений: 2
Работа с микросхемой LIS302DL
« : 04 Июнь 2012, 19:48:53 »
Небольшое предисловие.

Решил заняться изучением микросхем акселерометров. Ну и купил 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, в некоторых мелькает калибровка, но ни комментариев (что зачем и почему ) ни подключенных файлов с константами нет.

Давайте разберём, как с ней работать, думаю многим будет интересно :)

slav0n

  • Администратор
  • .
  • *****
  • Сообщений: 4756
Re: Работа с микросхемой LIS302DL
« Ответ #1 : 05 Июнь 2012, 06:07:02 »
Цитата: "Fireman"
данные по осям поступают с точностью +-2, т.е. непостоянны. Как с этим бороться
с железной стороны - поставить фильтрующий конденсатор на питание
с программной стороны - использовать какой либо сглаживающий алгоритм.
Лично мне нравится этот -
output = output[i-1] + (input - output[i-1]) / 3
while(1||!1);
зберігай спокій

Fireman

  • .
  • *
  • Сообщений: 2
(Нет темы)
« Ответ #2 : 05 Июнь 2012, 06:17:11 »
Цитата: "slav0n"
с железной стороны - поставить фильтрующий конденсатор на питание
Стоит тантал на 10,0 и керамика на 0,1. Но, т.к. макетка и проводки кругом, о большей стабильности видимо не может быть речи.

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

Хочу сделать электронный уровень. Расскажите про калибровку в вашем приборе. Как я понимаю, это требуется для нормальной работы микросхемы и получения реальных данных.

slav0n

  • Администратор
  • .
  • *****
  • Сообщений: 4756
Re: Работа с микросхемой LIS302DL
« Ответ #3 : 05 Июнь 2012, 06:40:22 »
Цитата: "Fireman"
И стоит ли обрабатывать STATUS_REG.
я этот регистр не использую
Цитата: "Fireman"
В приборе Примус введена калибровка. Вот по этому вопросу у меня полная загвоздка.
Всё просто - калибровка это всего лишь запись в память значения калибруемой оси. Это значение является смещением оси от нуля и оно в дальнейшем вычитается из показаний регистра оси.
while(1||!1);
зберігай спокій