Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Акселерометр ADXL345

Сегодня будем рассматривать акселерометр на микросхеме ADXL345. Напомню, что акселерометр - это устройство, которое измеряет проекцию кажущегося ускорения, то есть разницы между истинным ускорением объекта и гравитационным ускорением. По-простому – это инерционная масса, запаздывание реакции на движение которой определяет величину ускорения, чем сильнее импульс, тем больше будет это запаздывание. Эта масса закреплена на определенном подвесе и по иссяканию импульса воздействия, то есть, как только ускорение становится равно нулю, инерционная масса становится в исходное положение, то есть в нулевое положение.

В формате микросхемы акселерометр не возможно изготовить чисто электрическую систему. Таким образом в таком варианте (ADXL345) акселерометр представляет собой микроэлектромеханическую систему (MEMS), где присутствует как механика, так и электроника – механическая часть акселерометра обеспечивает движение инерционной массы, а электрическая преобразовывает это движение в некоторую электрическую величину. Физически процесс преобразования механического движения в электрическую величину может быть основан на изменении емкости, на пьезорезистивном эффекте, пьезоэлектрическом эффекте, также выделяются акселерометры с нагреваемой пластиной, где преобразование в электрическую величину основано на эффекте теплопередачи , и акселерометры с нагреваемым газом, где в качестве инерционной массы используется газ, принцип действия также основан на передаче тепла. Однако, к сожалению, в документациях на датчики в основном помечается лишь то, что система является микроэлектромеханической, а на каком именно эффекте она построена, не указывается.

Теперь перейдем к самому датчику акселерометру ADXL345. 

Характеристики:

  • Напряжение питания от 2 до 3,6 вольт
  • Ток, потребляемый в рабочем режиме от 40 до 150 мкА, в зависимости от частоты опроса
  • Разрешающая способность от 10 до 13 бит
  • 3 оси акселерометра
  • Рабочий диапазон температур от -40 до +85 градусов Цельсия
  • Цифровые интерфейсы SPI (трех- или четырехпроводный) и I2C
  • Детектирование событий: толчок, двойной толчок, свободное падение, наличие активности по осям, отсутствие активности
  • 2 программируемых выхода событий
  • Корпус LGA размером 3×5×1 мм
  • Устойчив к ударам с ускорениями до 10000 g

Вполне не плохие возможности датчика стоимостью порядка 1 доллара за единицу. Приобрести такой акселерометр можно на всем известных торговых интернет площадках Aliexpress или Ebay. В продаже имеются как отдельные микросхемы датчиков, так и небольшие модули со стабилизатором напряжения на 3,3 вольта и несколькими резисторами обвязки акселерометра. По-моему единственным плюсом готового модуля является только то, что саму микросхему не нужно паять – там уже все припаяно и нужно лишь соединиться со штырьками – удобно для тестирования, макетирования и прочего.

Итак, для начала работы с акселерометром ADXL345 нам понадобятся микроконтроллер ATmega8, сам датчик, ЖК дисплей, несколько светодиодов, резисторов, конденсаторов и стабилизатор напряжения (если акселерометр в виде модуля, то стабилизатор нам не понадобится, так как он уже имеется в модуле датчика). Интерфейс будем использовать I2C, так как он требует всего 2 провода для передачи информации.

Схема устройства:

Варианты питания схемы могут варьироваться в зависимости от имеющихся, самая общая схема построена на стабилизаторах напряжения 5 вольт и 3,3 вольта. Микросхема стабилизаторов напряжения можно применять любые – от линейных стабилизаторов (LM7805, AMS1117-adj или на фиксированное напряжение или другие стабилизаторы) до импульсных (MC34063, LM2596 и другие). 5 вольт необходимы для питания ЖК дисплея, от 3,3 вольт питается вся остальная схема. Датчик используется вышеописанный ADXL345. Резисторы R12 и R13 необходимы для работы интерфейса I2C – подтягивают плюс питания к линиям передачи данных для формирования логической единицы. 12-й вывод микросхемы датчика соединен с землей для определения адреса микросхемы для цифрового интерфейса, при соединении этого вывода с плюсом питания адрес будет другим, таким образом можно использовать одновременно два таких акселерометра с разными адресами. Резистор R3 формирует на выводе reset микроконтроллера положительное напряжения для исключения самопроизвольного перезапуска. ЖК дисплей используется 2004А (4 строки по 20 символов), резистор R2 регулирует контраст символов на дисплее, резистор R1 ограничивает ток для подсветки дисплея, чтобы она не вышла из строя. Светодиод HL1 показывает наличие напряжения питания в схеме, а светодиоды HL2 – HL7 используются как индикаторы наклона по осям X и Y. Резисторы R4 – R10 ограничивают ток, протекающий через светодиоды, чтобы они не вышли из строя. Микроконтроллер Atmega8 можно использовать как в DIP, так и в TQFP корпусе. При питании микроконтроллера от напряжения 5 вольт для I2C интерфейса между датчиком и контроллером нужно будет использовать согласование уровней (либо на специализированной микросхеме, либо на простой реализации на транзисторах) для обеспечения надежной работы схемы.

Извлекать данные из акселерометра ADXL345 совсем не сложно, однако просто считать значения из регистров не получится, по умолчанию датчик находится в режиме standby. Перед началом работы (речь идет о программном коде) с акселерометром его необходимо инициализировать, а именно настроить регистры POWER_CTL (выйти из режима standby и запустить работу датчика) и DATA_FORMAT (согласно документации настроить формат данных – разрешение, выравнивание и др.). Теперь можно просто периодически считывать данные из регистров данных осей и использовать эти данные в своих целях. Насчет выходов событий – все то же самое можно легко реализовать программно в микроконтроллере или же настроить остальные регистры. Во втором случае ускоряется реакция на эти действия или события, в первом случае микроконтроллер в силу своей производительности может замедлить реакцию на эти события.

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

Акселерометр применил в виде модуля для облегчения создания макетов с ним.

На дисплее отображается название микросхемы акселерометра, если ID, считанный из датчика, совпадает со значением 0xE5 (согласно даташиту). На второй строке располагаются значения трех осей, считанных из регистров датчика. Далее на третьей строке рассчитанные значения углов отклонения акселерометра. По умолчанию все значения принимают цифры от 90 до -90 градусов в плоскости 180 градусов. Для значений в 360 градусов нужно будет немного подправить код программы.

 

Для прошивки микроконтроллер необходимо знать конфигурацию фьюз битов:

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

На этом, кажется, все, к статье прилагается исходник программы для микроконтроллера в AVR Studio 4, прошивка для микроконтроллера, документация на акселерометр, а также видео, демонстрирующее работу схемы с датчиком ADXL345.

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
IC1 МК AVR 8-бит
ATmega8A
1 Поиск в магазине ОтронВ блокнот
VR1 Линейный регулятор
L7805AB
1 Поиск в магазине ОтронВ блокнот
VR2 Линейный регулятор
AMS1117-3.3
1 Поиск в магазине ОтронВ блокнот
IC2 АкселерометрADXL3451 Поиск в магазине ОтронВ блокнот
HG1 LCD-дисплей2004A1 Поиск в магазине ОтронВ блокнот
R1 Резистор
22 Ом
1 Поиск в магазине ОтронВ блокнот
R2 Подстроечный резистор10 кОм1 Поиск в магазине ОтронВ блокнот
R3, R12, R13 Резистор
10 кОм
3 Поиск в магазине ОтронВ блокнот
R4 Резистор
1 кОм
1 Поиск в магазине ОтронВ блокнот
R5-R10 Резистор
150 Ом
6 Поиск в магазине ОтронВ блокнот
R11, R14 Резистор
4.7 кОм
2 Поиск в магазине ОтронВ блокнот
C1, C3, C5 Конденсатор100 нФ3 Поиск в магазине ОтронВ блокнот
C2 Электролитический конденсатор470 мкФ1 Поиск в магазине ОтронВ блокнот
C4 Электролитический конденсатор220 мкФ1 Поиск в магазине ОтронВ блокнот
C6 Электролитический конденсатор10 мкФ1 Поиск в магазине ОтронВ блокнот
S1 Тактовая кнопкаTC-A1091 Поиск в магазине ОтронВ блокнот
HL1, HL4, HL5 СветодиодКрасный3 Поиск в магазине ОтронВ блокнот
HL2, HL3, HL6, HL7 СветодиодЗеленый4 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 08.03.2016 0 1
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (32) | Я собрал (0) | Подписаться

0
Zheckiss #
А какие будут значения x,y,z при свободном падении датчика?
Ответить
0

[Автор]
Gauss #
ноль
Ответить
0
Zheckiss #
Т.е. Все три значения во время падения будут ноль?
Ответить
+1

[Автор]
Gauss #
В идеале
Ответить
0
Zheckiss #
Спасибо!
Ответить
0
Сергей #
Добры день. Вопрос такой, нога CS притянута у вас к земле, а в даташите написанно следующее:
With CS tied high to VDD I/O, the ADXL345 is in I2
C mode,
requiring a simple 2-wire connection, as shown in Figure 40.
Ну и как вы догадались, на рисунке CS подключена к VDD IO. Поясните пожалуйста ваше решение, сам не очень понимаю, почему у вас так.
Ответить
0

[Автор]
Gauss #
Ошибся и не заметил даже, отправил статью на исправление, спасибо.
Ответить
0
iksa #
У моего экземпляра LCD индикатора на 1 ноге VSS минус, а на ноге 2 VDD плюс. У Вас наоборот, это не опечатка?
Ответить
0

[Автор]
Gauss #
Нет
Ответить
0
iksa #
Собрал устройство, только почему то значения на экране показывает по осям X Y только от +30 до - 30 градусов, хотя датчик поворачиваю от +90 до -90 град. значение по Z незначительно меняется от -66 град. Использовал модуль GY-291. Заказывал в Китае 2 шт. у одного модуля вообще значения не меняются, видимо неисправный. Вот интересно может китайцы отправили бракованные модули или в программе что то надо исправить.
Ответить
0

[Автор]
Gauss #
Вот я сижу и думаю, если купить разбитый экранчик и он будет показывать только половину символов, что нужно в коде исправить, что бы он показывал все символы? Это как аналогия...
Ответить
0
iksa #
Ну вот и выяснили что китайцы накосячили, будем с ними разбираться....
Ответить
0

[Автор]
Gauss #
На всякий случай проверь пайку, отмой флюс, визуально проверь, что бы не было дефектов ни в пайке, ни на самих элементах
Ответить
0
Юрий #
Готовая прошивка весит 19 кб. Как ее зашить в Мегу8 если там только 8 кб памяти?
Ответить
0

[Автор]
Gauss #
никак
Ответить
0
Вячеслав #
Объясните мне пожалуйста, для чего его вообще можно применить? Этот датчик ADXL345
Ответить
0

[Автор]
Gauss #
Где угодно, где необходим контроль ориентации в пространстве
Ответить
0
Forte #
Может быть контроль наличия движения?
Это всего лишь акселерометр
Ответить
0
supremeua #
Например, то, чем я сейчас занимаюсь - датчик уровня жидкости, все как обычно, поплавок на оси, только вместо переменного сопротивления стоит эта микросхема и регистрирует угол поворота.
Ответить
0
Алексей #
Я тоже хочу сделать датчик уровня на поплавке. Хотел узнать на счет точности и разрешающей способности такого датчика.
Ответить
0
supremeua #
В моем датчике угол меняется от 20 до 80 градусов, это около 400 единиц, получается мой объем в 200 литров я меряю с точностью пол литра. А датчик довольно таки малошумящий, если на выходе, например, 0х20, то оно так и остается, не прыгает туда сюда около 0х20. И температурная зависимость меня тоже устраивает. Летом-зимой показания те же.
PS. Сейчас вспоминаю, что получалось 300 единиц на этих углах поворота.
Отредактирован 31.08.2017 15:51
Ответить
0
Forte #
Здравствуйте!
А как же вы ускорение в градусы то переводите?
"Регистры DATAX0, DATAX1, DATAY0, DATAY1, DATAZ0, DATAZ1 хранят результат измерения ускорения."
Ответить
0
zheckiss #
Кстати, согласно даташиту, у датчика совсем не 0xE5 адрес. Из-за этого ваша прога не работает
Ответить
0

[Автор]
Gauss #
Товарищи ардуинщики, учитесь читать и считать, а то совсем глупо выглядите.
The DEVID register holds a fixed device ID code of 0xE5 (345 octal).
страница 24 даташита
Я уже молчу, что в статье по русски, что это просто ID
Так что не работает что-то у вас
Ответить
0
Алекс #
Возможно ли на основе этого датчика измерить колебания(вибрацию)? И какова будет дискретность?
Ответить
0

[Автор]
Gauss #
Можно и все зависит от шумового фона
Ответить
0
Анатолий #
Скажите, как подключить модуль ADXL345 к компьютеру и регистрировать углы наклона в компьютере?
Ответить
0
serfeld #
Уважаемый Gauss! Благодарю за этот материал! Собрал. Всё сразу заработало! Порадовал программный i2c.....Портировал в Attiny45 без проблем. Весь код, включая Ваш, занял порядка 70% памяти....Есть маленький нюанс. ИМХО, на схеме номиналы резисторов в обвязке акселерометра нужно поменять местами. На линиях SCL и SDA поставить 4.7кОм, а на подтяжках CS и SDO 10кОм...Правда, я везде поставил по 10кОм. И всё работает. Или это не очень принципиально в данном случае?
Ответить
0
Анатолий #
У кого есть прошивка для ATmega8A, в которой данные измерений углов ADXL345 передаются в СОМ-порт компьютера в терминальную программу?
Ответить
0
Николай #
Статья хорошая. На самом деле я и сам с акселерометром разобрался и даже написал библиотеку для работы с ним по spi. Единственное что для меня не понятно,это как интерпретировать данные с этого датчика,имеется ввиду что обозначает например число 500 по оси X,а что значит 250 по оси Y. Как это число перевести в само ускорение? ещё пишут на форумах,что эти акселерометры нужно как-то калибровать. Так ли это важно? даже не понимаю,что это из себя представляет. Понимаю,что вопросы вообще не по теме,но просто тут физику похоже знать надо,одного программирования мало.Но если кто знает ответы на эти вопросы,был бы рад услышать. Спасибо
Ответить
0
Дмитро #
А как подключить два одинаковых датчика с одинаковой адресацией?
Ответить
0
Виктор #
Напишите как исправить код для индикатора 1602, у меня только такие индикаторы
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Arduino UNO Мультиметр Mastech MS8239C
вверх