Обзор Акселерометра LIS3DH

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

Теория

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

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

4482959f2dc09e5cdca3e200cc085323.png

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

Чувствительность (Sensitivity) — отношение изменения выходного сигнала измерителя к вызывающему его изменению измеряемой величины. Абсолютную чувствительность определяют по формуле S = Dy/Dx.

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

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

По сути чувствительность — это коэффициент усиления датчика.

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

Целое число — расширение множества натуральных чисел, получаемое добавлением к нему нуля и отрицательных чисел

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


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

Если любоваться на микросхему LIS3DHTR то можно заметить, что на корпусе написано 8308 CEN 4QW JA

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

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

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

c5c045fc5d020197689347e31f0e2c45.png

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

f45e07faef805bb54fdd52cbde6087f1.png

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

266148af96a3c6185dca9124ce313818.png

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

8877de34ea76f72c38f8007e2859e01b.png

То как акселерометр реализован в натуре нам, конечно же не расскажут и не покажут, так как MEMS структуры — это проприетарная информация. Тут только растворят чип в кислоте.

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

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

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

79b053358ee1876881ba3c88a929bcdf.png

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

4c45b62c90497425a89ccc6a82761b28.png

Сканирование шины показывает как раз то, что надо.

6710a56843eb9ad60bfa5858b46a580d.png

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

37e24eddd992e61924a3794e8e97ccc0.JPG

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

5ac9fa69f284ea7b27272730ab3d073d.png

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

e7454f16f2b22f0ac788dc00d4775500.png

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

https://docs.google.com/spreadsheets/d/1f0YGGvLOf4vWyav78WgTI6Y5A2EVZUQD4rPidkr7vhg/edit?gid=1604564175#gid=1604564175

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

2c176515825809cc63c555e4ba583e4b.png

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

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

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

7712a743e5384d1d62e521dc6fde3e37.png

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

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

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

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

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

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

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

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

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

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

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

Итоги

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


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

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

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

Словарь

Акроним

Расшифровка

I2C

Inter-Integrated Circuit

SPI

Serial Peripheral Interface

MEMS

micro-electromechanical systems

Ссылки

Вопросы

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

© Habrahabr.ru