Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: непонятность с акселерометром
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
ddd-ekb
пытаюсь сделать датчик перемещения объекта, просто чтоб была коробочка на нём закреплённая и реагировала на любое его перемещение
задачи отследить уж совсем аккуратные действия нет, но чтоб на перекладывание рукой на 10см вбок реагировал
всякие ик и прочие не подходят, должно работать в полной темноте и внутри закрытой коробки
вот купил самый дешманский акселерометр LIS3DH и решил попробовать фиксировать ускорение

а теперь непонятность: постоянно присутствует шумовая помеха на уровне примерно 20% от полной шкалы, никак не могу её отфильтровать
попытка замерить среднее арифметическое по 256 замерам позволяет снизить ну до 15%, но неустойчиво, ложные сработки вылазят
при этом ещё и наклон датчика влияет на уровень помехи
вобщем при отсечке примерно на 30% от полной шкалы всё становится хорошо, никаких ложных сработок и влияния наклона, но при этом реагирует только на довольно резкие толчки, спокойная перестановка рукой не вызывает сработки

вопрос: это надо купить какой то более правильный и дорогой датчик? или что то не так с обработкой сигнала? ну не должно же быть такой сильной помехи, мне кажется
с питанием точно всё в порядке, оно от батарейки, точно без пульсаций и помех, схема примитивнейшая, датчик, пик12 и светодиод
сталкивался кто-нить с акселерометрами? подскажите куда копать
x736C
Как вы его включали в режим?

LIS3DH_SetFullScale
LIS3DH_SetAxis
Эти функции выполняли (или соотв. регистры инициализировали)?

У меня с этим датчиком не было проблем.
Также вспоминаю, что он стоит еще на STM32F407G-Discovery.
И там есть пример управление указателем мышки наклонами платы. И все очень плавно возле нуля.
Alex11
Цитата
с питанием точно всё в порядке, оно от батарейки

А Вы точно в этом уверены? Батарейка - не гарантия. Емкости по питанию достаточные стоят?
ddd-ekb
Цитата(x736C @ Apr 10 2018, 00:19) *
Как вы его включали в режим?

LIS3DH_SetFullScale
LIS3DH_SetAxis
Эти функции выполняли (или соотв. регистры инициализировали)?

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

режим задан без внутренних фильтров, полный диапазон +\-2G
пока обрабатываю только одну ось Х, непрерывно проверяется флаг обновления даннных, они считываются-суммируются, так 256 раз
после этого проверяется результат по модулю и соответственно зажигается или не зажигается светодиод
затем снова полная переинициализация всего и по новой

для светодиода проверяется только старший байт результата, он имеет диапазон +\-127, проверяется по модулю
при значении проверки 10 светодиод горит вообще постоянно, при 15 уже почти нормально, но наклон платы примерно на 20 градусов и загорается, при проверке на 30 уже без всяких ложных сработок


Цитата(Alex11 @ Apr 10 2018, 02:29) *
А Вы точно в этом уверены? Батарейка - не гарантия. Емкости по питанию достаточные стоят?

батарейка литий 2032 на 3в, стоит керамика 10мкф и тантал 100мкф в параллель
отсюда же запитан PIC12F675, работает на внутреннем 4МГц генераторе

Цитата(x736C @ Apr 10 2018, 00:19) *
И там есть пример управление указателем мышки наклонами платы. И все очень плавно возле нуля.

а где можно посмотреть исходник примера? может что то прояснится
Aner
Плату сами собирали (паяли) или купики готовую с этим мемсом? Я к тому, что при самостоятельной сборке, пайки могли неравномерно нагреть сам мемс и пошли шумы из-за этого. Уменя такое было в самом начале работы с этими мемсами. Описаный у вас рецидив похож на тот что был у меня. Также неравномерный, разный шум при наклонах.
ddd-ekb
Цитата(Aner @ Apr 10 2018, 13:28) *
Плату сами собирали (паяли) или купики готовую с этим мемсом? Я к тому, что при самостоятельной сборке, пайки могли неравномерно нагреть сам мемс и пошли шумы из-за этого. Уменя такое было в самом начале работы с этими мемсами. Описаный у вас рецидив похож на тот что был у меня. Также неравномерный, разный шум при наклонах.

сам, на макетке
вроде не перегревал, в касание паял, сначала приклеил контактами вверх, мазнул флюса и по 1 волоску припая от контактов на макетку, а уж с макетки распаял на пик и питание
конечно вариант, хотя вроде больше 30 лет паяю почти ежедневно
сейчас ещё подумалось что может постоянное обращение по шине к кристаллу даёт помеху, надо попробовать настроить опрос по прерыванию готовности данных, а не постоянно проверять статус

главное потвердили что микросхемы принципиально не косячные, буду дальше экспериментировать
jcxz
Цитата(ddd-ekb @ Apr 10 2018, 14:05) *
главное потвердили что микросхемы принципиально не косячные, буду дальше экспериментировать

Мне кажется лучше чем впустую терять время, взять ещё один чип (другой, не LIS3DH) распаять рядом и сравнить показания.
Сам сейчас как раз начинаю работать с MPU-6050. Тоже I2C.
ddd-ekb
уже взял другой с аналоговым выходом, может проще будет через ацп за ним следить

Baser
Применял MMA8453Q и MMA8452Q - это практически то же самое, что и LIS3DH. Никаких проблем не было, заметных шумов тоже не замечал.
Но по поводу монтажа - да, целый аппликейшн есть с описанием ужасов, когда от неправильного прогрева при пайке ведет корпус и последствия от ухода нулей до полной неработоспособности.
Но мне паяли и в ручную феном и в печке - проблем не было.
ddd-ekb
Цитата(jcxz @ Apr 10 2018, 16:24) *
Мне кажется лучше чем впустую терять время, взять ещё один чип (другой, не LIS3DH) распаять рядом и сравнить показания.

пока перепаял другой точно такой же (покупал 2 сразу), очень аккуратно и очень быстро, точно не перегрел
абсолютно ничего не изменилось
вариант кривой пайки явно отпал
esaulenka
У нас в изделии LIS3DH используется как датчик наклона/перемещения.
Какого-то заметного "дребезга" не видно. По температуре заметно плывёт, да.

Если интересно, могу содержимое регистров рассказать. Правда, коллега мой, который это всё делал, решил, что встроенный фильтр - дрянь, и сделал свой. Это показывать не буду, извините.
Alex11
Как-то меня сильно смущает монтаж проводечками и конденсаторы фильтров в стороне. Лучше бы это все далать на плате и фильтры рядом и толстыми дорожками.
ddd-ekb
Цитата(esaulenka @ Apr 11 2018, 01:51) *
Если интересно, могу содержимое регистров рассказать.

в принципе интересно, может я чото явно накосячил
у меня сейчас так
1F,21,22,24,25,26,2E,30,32,33,38,3A,3B,3C,3D - 00H
20 - 97H 1250Гц, все 3 оси разрешены
23 - 08H диапазон +\-2G
частоту менял на 50 и 400, никаких изменений
Baser
Цитата(ddd-ekb @ Apr 10 2018, 14:05) *
сначала приклеил контактами вверх, мазнул флюса и по 1 волоску припая от контактов на макетку, а уж с макетки распаял на пик и питание

Кроме как блокировочные емкости не возле ножек, а после проводков - плохо,

может быть еще и проблема в таком монтаже с закреплением на верх корпуса.
Хотя теоретически датчик там - вытравленные объемные емкости в кремнии,
все-же это рассчитано на жесткое крепление за подложку.
ddd-ekb
вобщем распаял рядом точно также LIS344 с аналоговым выходом
все глюки как рукой сняло
сейчас осталось только фильтрацию отстроить, чтоб вибрации всякие отсеивать
esaulenka
Я извиняюсь, уезжал в микро-командировку.

Код
    static const uint8_t reg1[] = {
        0,                        // TEMP_CFG_REG
        _L5376|_XYZen,            // CTRL_REG1
        _HPFoff,                // CTRL_REG2
        _I1_WTM,                // CTRL_REG3
        _BDU|_FS4G,                // CTRL_REG4
        _FIFO_EN,                // CTRL_REG5
        0,                        // CTRL_REG6
        0,                        // REFERENCE
    };
    WriteReg (TEMP_CFG_REG, reg1);

    static const uint8_t reg2[] = {
        0,                    // INT1_THS
        0,                    // INT1_DURATION
        0,                    // CLICK_CFG
    };
    WriteReg (INT1_THS, reg2);

    WriteReg (INT1_CFG, 0);

    WriteReg (FIFO_CTRL_REG, _FIFO_BYPASS);
    WriteReg (FIFO_CTRL_REG, _FIFO_STREAM|(Accel.GetFifoSize()/6-1));
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.