В наше время существуют дешевые приборы для измерения ускорения - акселерометры. В этом тексте я написал о своем опыте работы с широко распространенным акселерометром LIS3DHTR. Это трёх-осевой цифровой 8/10/12-битный MEMS акселерометр с перегрузкой до 16g и управлением по I2C (или SPI).
Теория
Надо сказать, что все наши средства измерения на самом деле показывают абстрактные сигналы. Наша же задача, как инженеров, правильно интерпретировать эти сигналы до приемлемой для нас погрешности.
Ускорение (Acceleration)- векторная физическая величина, определяющая быстроту изменения скорости тела, то есть первая производная от скорости по времени. Показывает на сколько изменяется вектор скорости в единицу времени. С точки зрения математики - ускорение - это производная скорости по времени.
Размерность ускорения - это метр на секунду в квадрате [м/с^2]. В технике чаще ускорение измеряют в единицах g, где g - это ускорение свободного падения.
Чувствительность (Sensitivity) - отношение изменения выходного сигнала измерителя к вызывающему его изменению измеряемой величины. Абсолютную чувствительность определяют по формуле S = Dy/Dx.
Dy - изменение(приращения) выходного сигнала измерителя. В нашем случае десятичное число на выходе ADC.
Dx - изменение(приращение) измеряемой величины. В нашем случае ускорения.
По сути чувствительность - это коэффициент усиления датчика.
Погрешность (Observational error) - отклонение измеренного значения величины от её истинного (действительного) значения. Единица измерений совпадает с измеряемой величиной.
Целое число - расширение множества натуральных чисел, получаемое добавлением к нему нуля и отрицательных чисел
Натуральное число - числа, возникающие естественным образом при счёте (1, 2, 3, 4, 5, 6, 7 и так далее). Последовательность всех натуральных чисел, расположенных в порядке возрастания, называется натуральным рядом
Аппаратная часть
Если любоваться на микросхему LIS3DHTR то можно заметить, что на корпусе написано 8308 CEN 4QW JA
В первом приближении акселерометр можно рассматривать вот так.
Распиновка чипа такая
Стоит заметить, что входной пин 7 (SA0) аппаратно определяет самый младший разряд в I2C адресе микросхемы на шине I2C. Таким образом на одну шину I2C можно поместить максимум два экземпляра микросхемы LIS3DHTR. В моём случае к SA0 пину подключено напряжение 3.3V. Это значит, что 7ми битный I2C адрес будет иметь вот такой шаблон xxx_xxx1. Остальные разряды уточним в спеке чуть позже.
Во втором приближении внутри можно заметить микро эллектронно механическую систему MEMS. Тут вмонтированы конденсаторы и их ёмкости меняется в зависимости от действующей силы ускорения. Еще видно датчик температуры, мультиплексоры, усилитель, АЦП, управляющую цепь, SPI трансивер, I2C трансивер и очередь. Это очень сложное изделие как будто с другой планеты.
То как акселерометр реализован в натуре нам, конечно же не расскажут и не покажут, так как MEMS структуры - это проприетарная информация. Тут только растворят чип в кислоте.
Программная часть
На шине I2C адрес микросхемы имеет вот шаблон 0b001100x. Для моей электронной платы получается 0b0011001. 0b0011001=0b 001_1001=0x19.
Теперь надо вспомнить, что такое интерфейс I2C. Это синхронный последовательный полудуплексный, двух проводной способ передачи бинарных данных с топологией общая шина. Данные передаются младшим битом вперед в формате big endian.
В моём случае калейдоскоп I2C адресов получается 0x19(базовый) 0x32(запись) 0x33(чтение).
Сканирование шины показывает как раз то, что надо.
У микросхемы LIS3DH присутствует аж 42 восьмибитных I2C регистра для конфигурации и диагностики. После инициализации вычитывание содержимого регистров показывает вот такие значения.
Переменных для конфигураций очень много. Однако основные битовые поля для большинства приложений это вот эти конфигурационные переменные. Остальные поля регистров акселерометра можно оставить в значениях по умолчанию, которые применяются при подаче электропитания и семплы всё равно будут появляться.
Как и любая другая цифровая микросхема, акселерометр выдает результат в виде последовательности целых чисел - семплов. Надо отметить, что один семпл с измерением ускорения хранятся сразу в двух I2C регистрах: старшем и младшем. Причем выровнен семпл влево (<--). Вот так это выглядит для 12 бит режима.
Поэтому семпл надо корректно извлечь. Прочитав семпл его надо преобразовать из попугаев в ускорение. Для этого надо домножить целое число на значение меж кодового перехода. Так мы и получаем значение перегрузки в единицах g. Для этого в спеке представлена Look Up таблица №4.
Теперь включаю лог и измерения сыплются прямо в UART CLI
Вот и получилось завести акселерометр. Успех.
Достоинства ASIC LIS3DHR
++Есть регистр ID (WHO_AM_I), который всегда показывает значение 0x33. Так можно сделать автотест тест пропай электронной платы.
Недостатки 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) в метры на секунды в квадрате, если ускорение свободного падения везде на земном шаре разное и увеличивается при возрастании широты?
Автор: aabzel