Существуют дешевые приборы для измерения ускорения - акселерометры. В этом тексте я написал о своем опыте работы с широко распространенным акселерометром LIS3DHTR. Это трёх-осевой цифровой 8/10/12-битный MEMS акселерометр с перегрузкой до 16g, точностью +- 40mg и управлением по интерфейсу I2C (или SPI).

Итак, танцуем от печки...

Теория

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

Ускорение (Acceleration)- векторная физическая величина, определяющая быстроту изменения скорости тела, то есть первая производная от скорости по времени. Показывает на сколько изменяется вектор скорости в единицу времени. С точки зрения математики - ускорение - это производная скорости по времени.

\overrightarrow{a}=\frac{d\overrightarrow{v}}{dt} \qquad (1)

Размерность ускорения - это метр на секунду в квадрате [м/с^2]. В технике чаще ускорение измеряют в единицах g, где g - это ускорение свободного падения.

Чувствительность (Sensitivity) - отношение изменения выходного сигнала (у нас код ADC) измерителя к вызывающему его изменение измеряемой величины(у нас g). Абсолютную чувствительность определяют по формуле (2).

S=\frac{dy}{dx} \qquad (2)

dy - изменение(приращения) выходного сигнала измерителя. В нашем случае десятичное число на выходе ADC.

dx - изменение(приращение) измеряемой величины. В нашем случае ускорения.

оптимальная чувствительность тут это 128 ADC на /g
оптимальная чувствительность тут это 128 ADC на /g

По сути чувствительность - это коэффициент усиления датчика. Чем выше чувствительность, тем, с одной стороны, лучше для нас, ибо накой нам нужен датчик, который никак не реагирует на изменение физической величины? При нулевой чувствительности, что угодно превращается в датчик ускорения. Хоть ведро...
Также нам не нужен датчик, зашкаливающий от малейшего колебания. Перегиб в обе стороны - плохо. Лучше, когда чувствительность такая, что интересующий нас диапазон физической величины равномерно и полноценно укладывается в диапазон измерений датчика.

Погрешность (Observational error) - отклонение измеренного значения величины от её истинного (действительного) значения. Единица измерений совпадает с измеряемой величиной.

Точность (precision) - отдельные измерения могут сильно отличаться друг от друга. Это показывает ширина кривой распределения. Степень такого разброса данных и называется точностью измерения. Единица измерения точности совпадает с размерностью измеряемой величины. В нашем случае это g.

Целое число - расширение множества натуральных чисел, получаемое добавлением к нему нуля и отрицательных чисел. (-4 -3 -2 -1 0 1 2 3 4 5)

Натуральное число - числа, возникающие естественным образом при счёте (1, 2, 3, 4, 5, 6, 7 и так далее). Последовательность всех натуральных чисел, расположенных в порядке возрастания, называется натуральным рядом


Аппаратная часть

На первый взгляд даже не верится, что с помощью этой малютки можно измерять вектор ускорения. Если просто любоваться на микросхему LIS3DHTR, то можно заметить, что на корпусе написано 8308 C3H 4QW JA.

маркировка на корпусе 8308 C3H 4QW JA (это LIS3DHTR)
маркировка на корпусе 8308 C3H 4QW JA (это LIS3DHTR)

На других электронных платах иногда встречается маркировка 8925 C3H 0GVUO

маркировка на корпусе 8925 C3H OGVUO (это LIS3DH)
маркировка на корпусе 8925 C3H OGVUO (это LIS3DH)

Судя по форумам эту маркировку надо понимать так

В первом приближении акселерометр LIS3DH можно рассматривать так.

Распиновка чипа такая

Стоит заметить, что входной пин 7 (SA0) аппаратно определяет самый младший разряд в I2C адресе микросхемы на шине I2C. Таким образом, на одну I2C шину можно пристегнуть максимум два экземпляра микросхемы LIS3DH. В моём случае, к SA0 пину подведено напряжение 3.3 V. А это значит, что 7ми битный I2C адрес будет иметь вот такой бинарный шаблон xxx_xxx1. Остальные двоичные разряды уточним в спеке чуть позже...

Во втором приближении, внутри можно заметить микро эллектронно механическую систему MEMS. Микромеханику. Тут вмонтированы конденсаторы (по два на ось) и их ёмкости меняется в зависимости от действующего извне ускорения.

Прям как безмен-весы для взвешивания клюквы. Ещё внутри ASICа видно датчик температуры, мультиплексоры, операционный усилитель, АЦП, управляющую цепь, SPI-трансивер, I2C-трансивер и очередь на 32 семпла. Это очень сложное изделие как будто с другой планеты.

В электронике вообще абсолютно все датчики - это просто какой-то ADC(АЦП) к которому, как собака на поводке пристёгнута какая-то аналоговая электрическая цепочка. Даже GPIO можно интерпретировать как однобитный ADC.

То как акселерометр воплощен в натуре нам, конечно же в datasheet(те) не напишут и не покажут, так как MEMS структуры - это боевая информация.

Зато культовый автор Lisin YT химическим образом раскрыл структуру другого похожего акселерометра MPU6050. И там было просто нечто... Не иначе как инопланетные технологии...

Автор Lisin YT растворил акселерометр MPU6050. Красота несусветная...
Автор Lisin YT растворил акселерометр MPU6050. Красота несусветная...

Подозреваю, что внутри lis3dh тоже что-то похожее.

Программная часть

На шине I2C адрес микросхемы имеет вот такой шаблон 0b001100x. Для моей электронной платы получается 0b0011001. 0b0011001=0b 001_1001=0x19.

Теперь надо вспомнить, что такое интерфейс I2C. Это синхронный последовательный полудуплексный, двух проводной способ передачи бинарных данных с топологией общая шина. Данные передаются старшим битом вперед (MSB) в формате big endian.

В моём случае калейдоскоп I2C адресов получается 0x19(базовый) 0x32(запись) 0x33(чтение).

Сканирование шины I2C показывает как раз вариации базового адреса 0x19. Это хорошая новость. Значит ASIC подает признаки жизни.

У микросхемы LIS3DH присутствует аж 42 восьмибитных I2C регистра для конфигурации и диагностики. После инициализации вычитывание содержимого регистров показывает вот такие значения.

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

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

Поэтому семпл надо корректно извлечь. Прочитав семпл его надо преобразовать из попугаев в ускорение. Для этого надо домножить целое число на значение меж кодового перехода. Так мы и получаем значение перегрузки в единицах g. Для этого в спеке представлена Look Up таблица №4.

Как можно заметить, самая высокая чувствительность в режиме 2g 12bit.

Теперь включаю лог и измерения сыплются прямо в UART CLI

Вот и получилось завести акселерометр. Успех.

Статистический анализ

Я записал выборку одного и того же измерения 5281 раз. Вычислил мат ожидание и среднеквадратическое отклонение. Получил такие результаты

Величина

Значение

единица измерения

Spread

0.372

g

MIN

0.384

g

MAX

0.756

g

Expected Value

0.56317288

g

Variance (Дисперсия)

0.0016035521

--

Standard Deviation (Среднеквадратическое отклонение)

0.040044377

g

Вот такая вышла гистограмма

Из СКО можно сделать вывод, что точность LIS3DH акселерометра составляет +/- 40 mg. В этом плане ST не обманули. В спеке тоже указана точность 40mg.

87% всех измерений на расстоянии 20mg от мат ожидания. Остальное, наверное, промахи.

Достоинства ASIC LIS3DHR

++Есть регистр ID (WHO_AM_I), который всегда показывает значение 0x33. Так можно сделать автотест тест пропай электронной платы.

Недостатки ASIC LIS3DHR

--Не ясно как измерить в метрах на секунду в квадрате. Устройство выдает значения по шкале g. Дело в том, что у всех свой g. По мере увеличения широты g возрастает.

Приложения акселерометра LIS3DHR

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

2--Определение наклона столбов для линий электро-передач. Чтобы знать куда вызывать ремонтную бригаду.

3--Автоматическая ориентация экрана на мобильных устройствах (телефонах планшетах), датчик переворота автомобиля в телематических блоках.

4--При должной цифровой обработке можно сделать шагомер.

5--Я видел кубики-таймеры, которые сами понимали на какой грани они лежат и тем самый отсчитывают нужное время, потом издают звук.

6--Очень точным акселерометром можно оценивать широту, где происходит изменение.

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

8--Можно сделать датчик свободное падения. Например для автоматического открытия парашюта или для парковки хрупких считывающих вилок в жестких дисках при падении LapTop(а).

9--Гироскутеры, сигвеи, квадрокоптеры и моноколёса используют акселерометр для стабилизации своей оси.

10--Электронные строительные уровни используют акселерометры.

Итоги

В сухом остатке мне удалось научиться пользоваться акселерометром LIS3DH. Конфигурировать ASIC и читать вектор ускорения. Измеренная точность LIS3DH акселерометра составляет +/- 40 mg. (разрешение 12 bit, диапазон -/+16g). Раз точность 40mg, то в текстовый лог ускорений имеет смысл писать только первые две цифры после запятой. На третью цифру можно вообще не смотреть - там уже просто мусор.

1--В результате работы с разными акселерометрами на разных платах я понял на будущее одну вещь, если на плате заложен акселерометр, то следует указывать шелкографией направление осей X и Y, Z.

Иначе без этого проблематично потом отлаживать прошивку.

2--Также я настоятельно не рекомендую схемотехникам подключать акселерометр по интерфейсу I2C. Лучше подключать акселерометр по SPI, чип LIS3DH как раз поддерживает интерфейс SPI. Дело в том, что I2C шина имеет свойство зависать, да так, что помогает только перезагрузка по питанию всей электронной платы! Интерфейс I2C намного, намного сложнее, чем интерфейс SPI. А все сложное ломается как раз в самую первую очередь. Понимаете... По опыту I2C - это самый ненадежный проводной интерфейс.

Надеюсь этот текст поможет другим понять, как работать с акселерометрами.

Словарь

Акроним

Расшифровка

I2C

Inter-Integrated Circuit

SPI

Serial Peripheral Interface

MSB

most significant bit

MEMS

micro-electromechanical systems

Ссылки

Вопросы

1--Как преобразовать измеренные акселерометром значение перегрузки (g) в метры на секунды в квадрате, если ускорение свободного падения везде на земном шаре разное и увеличивается при возрастании широты?

2--Какой тип ADC внутри акселерометра? SAR ADC? дельта-сигма АЦП? flash ADC?

3--Как надо калибровать акселерометр?

Комментарии (63)


  1. RealBeria
    22.10.2024 17:26

    всегда восхищался внутренним строением подобных микросхем - симбиоз электроники и механики созданый в кремнии на нанометровых масштабах.


    1. aabzel Автор
      22.10.2024 17:26


      1. aabzel Автор
        22.10.2024 17:26

        Красота несусветная


  1. Andy_Big
    22.10.2024 17:26

    "Стандартное («нормальное») значение, принятое при построении систем единиц, составляет 9,80665 м/с" (с) Википедия.

    Дело в том, что I2C шина имеет свойство зависать, да так, что помогает только перезагрузка по питанию.

    Это не шина имеет такое свойство, а конкретная ее реализация.


    1. aabzel Автор
      22.10.2024 17:26

      Тем не менее в спеке про константу 9,80665 ничего не сказано...


      1. Andy_Big
        22.10.2024 17:26

        Видимо, они считают, что ±0.02g не погоды не делают при том, что погрешность нуля датчика ±0.04g, поэтому можно не уточнять значение g до четвертого знака после запятой, а положиться на общепринятые 9.8 м/с2.


      1. Dmitri-D
        22.10.2024 17:26

        9,8 серьезно? Десятичная запятая? А если поискать с десятичной точкой, как принято в англоговорящих и пишущих странах?


        1. aabzel Автор
          22.10.2024 17:26

           А если поискать с десятичной точкой, как принято в англоговорящих и пишущих странах?

          Можете сами проверить.


      1. seyko2
        22.10.2024 17:26

        Логично предположить, что величина g - это ускорение свободного падения в точке измерения: там же вроде как грузик используется? Или я что-то пропустил?

        PS: спасибо за описание


        1. aabzel Автор
          22.10.2024 17:26

          там же вроде как грузик используется

          Да. Однако масса этого грузика при перемещении ASICа не меняется.


    1. Yuri0128
      22.10.2024 17:26

      Это не шина имеет такое свойство, а конкретная ее реализация.

      Именно так. У меня несколько десятков проектов с i2с, - все там норм. Да и в каждом компе/ноуте и т.д есть шина i2c - и вроде ничего даже работает. Ну а про сервера (и их блоки питания) и вообще даже не заикаемся..


      1. aabzel Автор
        22.10.2024 17:26

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


        1. Yuri0128
          22.10.2024 17:26

          В большинстве случаев - сам. Но % так 30 - вполне себе библиотечные функции, не висло (при нормальной схемотехнике, при плохой разводке - было такое дело). Ну и я редко на 1 МГц гоняю шину.


        1. Andy_Big
          22.10.2024 17:26

          Но при чем тут сама шина-то? :)


          1. aabzel Автор
            22.10.2024 17:26

            Интерфейс I2C много сложнее, чем интерфейс SPI. А все сложное ломается как раз в первую очередь.


            1. Yuri0128
              22.10.2024 17:26

              Чем? Апаратно - там 2 провода. У SPI - 3/4. Протокольно - да, сложнее. Скорости передачи меньше значительно (я на SPI достигал 62,5 МГц, на i2c - где-то пробегало что-то на 4 МГц, но,типично, 100-400 кГц, много реже 1 МГц). Ну и на SPI есть дуплекс. И QSPI.


            1. Andy_Big
              22.10.2024 17:26

              Сложнее, но не так уж много. Есть и гораздо более сложные интерфейсы, которые тоже успешно работают и не виснут.


              1. aabzel Автор
                22.10.2024 17:26

                Есть и гораздо более сложные интерфейсы, которые тоже успешно работают и не виснут.

                Какие именно?


                1. Andy_Big
                  22.10.2024 17:26

                  Да хоть те же SDRAM/DDR.


                  1. Yuri0128
                    22.10.2024 17:26

                    :).... Это уже так точно кирпич на голову... В сравнении с i2c...


                    1. Andy_Big
                      22.10.2024 17:26

                      И ведь не виснут при грамотном обращении :)


                1. Zuy
                  22.10.2024 17:26

                  I3C, как раз с сенсорами используется


        1. randomsimplenumber
          22.10.2024 17:26

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

          Вендор, который знает о своем продукте буквально все, не может. Зато мимо крокодил, на помойке datasheet нашедший, тот может. Чудеса какие то.


          1. aabzel Автор
            22.10.2024 17:26

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

            Hal там пишут либо студенты ,либо аутсорсинг.

            Поэтому нет ни тестов ни скриптов сборки. Глядя на исходники , становится очевидно, что авторы кода даже не знают, что такое конечный автомат.

            Поэтому Hal от вендора чипа- это обычно Филькина грамота.


        1. man55
          22.10.2024 17:26

          Вы не поверите, но во всех изделиях, критичнее поделок с Али нормальные люди так и делают (пишут софт самостоятельно). А виснет I2C только у тех, у кого ардуино головного мозга и слепая вера в HAL от ST и т.п.


      1. Andy_Big
        22.10.2024 17:26

        У меня несколько десятков проектов с i2с, - все там норм.

        Аналогично. Месяцы и даже года непрерывной работы.

        Ну а про сервера (и их блоки питания) и вообще даже не заикаемся..

        Да практически любой ноутбук имеет связь с контроллером батареи по шине SMBus, которая по сути - I2C :)


        1. Yuri0128
          22.10.2024 17:26

          Еще про мультиконтроллер надо сказать....


          1. aabzel Автор
            22.10.2024 17:26

            Для мультиконтроллеров тоже нужна прошивка?


            1. jonic
              22.10.2024 17:26

              Вы не поверите, но да..


              1. aabzel Автор
                22.10.2024 17:26

                Или мультиконтроллер  - это Baseboard Management Controller (ВМС) c Linux внутри?


                1. Yuri0128
                  22.10.2024 17:26

                  Не, это такая микросхема в ноутах и на матплатах компов.


                  1. aabzel Автор
                    22.10.2024 17:26

                     Baseboard Management Controller (ВМС) тоже на материнских платах стоит. И в LapTop(ах) и в серверных платах. Посмотрите AST2500 (ARM11,800MHz, 456 pin )


                  1. Andy_Big
                    22.10.2024 17:26

                    А, ясно.


                1. jonic
                  22.10.2024 17:26

                  Меня тоже термин мультиконтроллер бесит, а особенно бесит как меня накололи его заменой в пс5 (ничего не меняли)


                  1. aabzel Автор
                    22.10.2024 17:26

                    Меня тоже термин мультиконтроллер бесит

                    Раз есть мультиконтроллер, значит должен быть и киноонтроллер...


          1. Andy_Big
            22.10.2024 17:26

            Не совсем понял о чем именно Вы говорите.


            1. aabzel Автор
              22.10.2024 17:26

              Я тоже.


      1. aabzel Автор
        22.10.2024 17:26

        Ну а про сервера (и их блоки питания) и вообще даже не заикаемся..

        На серверах не совсем I2C, а SMbus и PMbus.


        1. Yuri0128
          22.10.2024 17:26

          SMbus 

          это практически тот-же i2c, еще и с более низким уровнем шины (3,3В), что делает ее менее защищенной, в общем-то.

          PMbus

          Это фактически SMbus. Собственно у меня есть проекты, где диагностика и управление блоками питания по ней идет. С контроллера юзается i2c модуль.

          Вот CAN и uCAN - эт посложнее уже, но она диф, поэтому там лучше помехозащищеность. И ее длиннее можно делать.


          1. aabzel Автор
            22.10.2024 17:26

            Это фактически SMbus. Собственно у меня есть проекты, где диагностика и управление блоками питания по ней идет.

            SMbus определяет какой-н общий протокол и форматы пакетов для всех микросхем вне зависимости от вендора?


            1. Yuri0128
              22.10.2024 17:26

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


              1. Andy_Big
                22.10.2024 17:26

                Она отличается от I2C уровнями и некоторыми мелочами, база та же :)


                1. Yuri0128
                  22.10.2024 17:26

                  Ну так я ж так и написал....


    1. aabzel Автор
      22.10.2024 17:26

      Это не шина имеет такое свойство, а конкретная ее реализация.

      Наверное Луна-25 разбилась как раз потому, что зависла шина I2C на которой висел акселерометр.

      https://habr.com/ru/news/761422/


      1. Yuri0128
        22.10.2024 17:26

        Там просто дорожка питания к акселерометру отгорела.


        1. aabzel Автор
          22.10.2024 17:26

          Там просто дорожка питания к акселерометру отгорела.

          Это по обломкам определили?


          1. Yuri0128
            22.10.2024 17:26

            :).... Ну а почему это он не включился?


            1. aabzel Автор
              22.10.2024 17:26

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


        1. aabzel Автор
          22.10.2024 17:26

          Что за формулировка.?..Это как? Сами по себе дорожки не отгорают.

          Это проводник, а не квантовая частица.


      1. Andy_Big
        22.10.2024 17:26

        Или потому что прошивку писал программист, для которого I2C - это сложно и у которого она виснет :)


        1. Indemsys
          22.10.2024 17:26

          Акселерометры используемые для стабилизации работают по SPI в реальном времени.
          По I2C работают акселерометры с микропотреблением и глубоким FIFO для носимых гаджетов.


          1. aabzel Автор
            22.10.2024 17:26

            Вообще показания акселерометра было бы лучше передавать непрерывно, как звук по интерфейсу TDM (Time Division Multiplexing). Передавать как трёхканальный звук. Ведь ускорение это же непрерывная величина.

            Какой смысл измерять мгновенное ускорение? Разве, что для статических измерений типа наклон столба.


            1. Indemsys
              22.10.2024 17:26

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

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

              Передача данных в виде 'трёхканального звука' возможна, но это больше вопрос удобства интерфейса и способа обработки. К тому же в системах с низким энергопотреблением, таких как носимые устройства, часто важна не только точность данных, но и экономия ресурсов (памяти, пропускной способности и энергии), что и достигается за счет использования оптимизированных алгоритмов обработки дискретных значений.


    1. almaz1c
      22.10.2024 17:26

      Здесь может иметься ввиду "clock stretching", являющийся частью спецификации I2C шины, когда ведомое устройство именно "подвешивает" шину в случае неготовности данных. Как раз всякие IMU грешат подобным.

      Подобное наблюдается, например с BNO055 и малинкой.


      1. Andy_Big
        22.10.2024 17:26

        Так не нужно запрашивать данные когда они еще не готовы. Как правило, устройства имеют регистр статуса, в котором в том числе отражается и готовность данных.

        И он что, настолько жестко вешается, что ничего кроме отключения питания не выводит его из этого состояния? Тоже как-то слабо верится. Но даже если так, то это все равно не свойство шины, а криво спроектированный девайс :)


        1. Indemsys
          22.10.2024 17:26

          Но даже если так, то это все равно не свойство шины, а криво спроектированный девайс :)

          А вот это глубокое заблуждение.
          I2C единственная в своем роде шина, где на уровне официальной доки признается факт ее зависания.
          Например в одном из мануалов читаем:

          36.12
          Bus Hanging

          If the clock signals from the master and slave devices are out of synchronization because of noise or other factors, the I2C bus might hang with a fixed level on the SCLn or SDAn line. To manage bus hanging, the IIC has:

          - A timeout function to detect hanging by monitoring the SCLn line

          - A function for the output of an extra SCL clock cycle to release the bus from a hung state because of clock signals being out of synchronization

          - The IIC reset function

          - An internal reset function.

          Т.е. как минимум будете встречать частые очень длительные таймауты.
          По опыту, мониторинг SCL приводит к ложноположительным ошибкам. Мониторинг SCL приходится отключать. Экстраклок на SCL вооще непонятный финт. Когда его надо делать и сколько раз? Выходит что сброс единственный надежный вариант. А если завис слэйв, то сбрасывать надо уже питание.


  1. AndreyPS
    22.10.2024 17:26

    Использовал такие акселерометры в качестве датчика вибрации.

    Минусы:

    Нет внешнего тактирования.
    По даташиту частота измерения 400 Гц, но может выдавать и 395, и 405 Гц.
    Побороли путём измерения времени между прерываниями от FIFO.

    Слабый антиалайзинговый фильтр.
    Никак не исправить.

    Довольно шумный на небольших значениях ускорения.
    Ловить сотые в константе g нет никакого смысла.

    Плюсы:

    Прибор получается дешёвый.
    Акселерометр цепляется напрямую к микропроцессору.


    1. LAutour
      22.10.2024 17:26

      Довольно шумный на небольших значениях ускорения.

      А основное питание и питание IO были согласно рекомендациям даташита раздельные?


      1. AndreyPS
        22.10.2024 17:26

        Разделены простым RC ФНЧ


    1. aabzel Автор
      22.10.2024 17:26

      Довольно шумный на небольших значениях ускорения

      Я посчитал СКО на выборке 5k измерений. Точность LIS3DH получилась +/-40mg


      1. aabzel Автор
        22.10.2024 17:26

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


  1. f-tech
    22.10.2024 17:26

    Несколько уточнений по тексту.

    Чем выше чувствительность, тем лучше для нас

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

    Данные передаются младшим битом вперед

    Все-таки наоборот, MSB First: на шину вначале выталкивается старший бит.

    Линия SCL у девайса тоже 'io', она не чистый вход: slave-устройство может приостановить тактирование, удерживая SCL в низком уровне, если не успевает подготовить данные для передачи (благодаря clock stretching).

    В табличке с чувствительностью mg/digit наверное опечатки? Я имею в виду значения 192, 48 и две двойки в High-resolution.


    1. aabzel Автор
      22.10.2024 17:26

      Благодарю Вас, Алексей @f-tech, за найденные недочеты. Исправил.
      Все бы писали такие внимательные комментарии.