Коротко про ADXL345 GY-291
Модуль ADXL345 GY-291 — тривісний MEMS-акселерометр на чіпі ADXL345 для вимірювання статичного прискорення (гравітація, нахил) і динамічного (рух, вібрація, удари) у діапазонах від ±2 g до ±16 g. Зв’язок із контролером — I²C або SPI, частота оновлення даних 0,1–3200 Гц програмується. Вбудовані функції: одиночний/подвійний тап, вільне падіння, активність/бездіяльність, буфер FIFO на 32 зразки та самоперевірка.
Ключові характеристики
- Мікросхема
- ADXL345
- Тип
- тривісний цифровий MEMS-акселерометр
- Діапазон вимірювання
- ±2 g, ±4 g, ±8 g, ±16 g (програмується)
- Масштабний коефіцієнт (типовий)
- у fixed 10-bit: 3,9 / 7,8 / 15,6 / 31,2 mg/LSB (256 / 128 / 64 / 32 LSB/g) відповідно до діапазону; у full-resolution: близько 3,9 mg/LSB в усіх діапазонах [1]
- Роздільна здатність
- фіксовані 10 біт; у full-resolution — 10 / 11 / 12 / 13 біт для ±2 / ±4 / ±8 / ±16 g [1]
- Частота оновлення (ODR)
- 0,1–3200 Гц, програмується [1]
- Адреса I²C
- 0x53 (SDO/ALT ADDRESS → GND) або 0x1D (SDO/ALT ADDRESS → VDD I/O)
- Інтерфейси
- I²C (100/400 кГц), SPI (3- або 4-провідний, до 5 МГц) [1]
- Живлення модуля
- 3,3–5 В на вході VCC; вбудований LDO знижує напругу для чіпа
- Живлення чіпа ADXL345
- 2,0–3,6 В [1]
- Струм чіпа (типовий)
- від 23 мкА на низьких ODR; 140 мкА при 100–800 і 3200 Гц; залежить від ODR та напруги живлення. У standby — 0,1 мкА [1]
- Робоча температура
- від −40 до +85 °C
- Розміри модуля
- 20,4 × 16,2 мм
- Контакти
- VCC, GND, SCL/SCK, SDA/SDI, SDO/ALT ADDRESS, CS, INT1, INT2
- Вбудовані функції
- одиночний/подвійний тап, вільне падіння, активність/бездіяльність, FIFO на 32 зразки, самоперевірка [1]
Детальний опис та особливості
Принцип вимірювання
ADXL345 — ємнісний MEMS-датчик: прискорення згинає рухливу конструкцію, зміна ємності моста перетворюється на цифровий 16-бітний додатковий код [1]. Датчик бачить і статичне прискорення (гравітацію — вісь, орієнтована вгору, дає ≈ 1 g), і динамічне від руху та вібрації, тому ним можна робити і рівень, і детектор руху, і віброзапис. Нелінійність — ±0,5 % від повної шкали, перехресна чутливість осей — до ±1 % [1]. Смуга пропускання завжди дорівнює половині частоти оновлення (ODR/2).
За умов специфікації вихід при 0 g може перебувати в межах від −150 до +150 mg для осей X/Y і від −250 до +250 mg для осі Z [1]. Значення ±35 mg для X/Y та ±40 mg для Z описують статистичне відхилення від ідеального, а не гарантовану максимальну похибку кожного екземпляра [1]. Після складання пристрою варто відкалібрувати зміщення нуля, оскільки на нього також впливають паяння та механічні напруження плати.
Діапазони, роздільна здатність і дані
Програмується чотири діапазони: ±2, ±4, ±8 та ±16 g. У fixed 10-bit режимі менший діапазон дає кращий масштаб: типово 3,9 mg/LSB при ±2 g, 7,8 mg/LSB при ±4 g, 15,6 mg/LSB при ±8 g і 31,2 mg/LSB при ±16 g. У full-resolution масштаб зберігається близько 3,9 mg/LSB в усіх діапазонах, а зі збільшенням діапазону кількість значущих бітів зростає від 10 до 13 [1]. Більший діапазон зменшує ризик насичення при сильному прискоренні.
Частота оновлення програмується від 0,1 до 3200 Гц, але реальний максимум обмежений інтерфейсом: через I²C на 100 кГц — до 200 Гц, на 400 кГц — до 800 Гц; частоти 1600 і 3200 Гц доступні лише через SPI з тактовою частотою не менше 2 МГц [1]. Вбудований FIFO на 32 рівні (режими bypass, FIFO, stream, trigger) накопичує зразки і зменшує навантаження на контролер [1].
Живлення та логічні рівні
Вбудований LDO дає змогу живити модуль GY-291 напругою 3,3–5 В через контакт VCC, тоді як сам ADXL345 працює від 2,0–3,6 В [1]. Стабілізатор знижує лише напругу живлення й не є перетворювачем логічних рівнів. Рівень підтягування SDA/SCL залежить від ревізії плати, тому сумісність із 3,3-вольтовими GPIO потрібно перевіряти окремо.
Вбудовані функції подій
Розпізнавання подій виконується самим чіпом, а контролер отримує готовий сигнал на INT1 або INT2 (push-pull, за замовчуванням активний високий рівень, інверсія програмується) [1]. Доступні: одиночний і подвійний тап (з програмованими порогами, тривалістю, латентністю і вікном), вільне падіння (логічне І по всіх осях, таймер до 1,28 с), активність і бездіяльність (поріг плюс час бездіяльності до 255 с). У режимі AUTO_SLEEP з увімкненим link чіп після виявлення бездіяльності переходить у низькочастотний sleep-режим, а після виявлення руху автоматично повертається до активної частоти ODR [1]. Sleep не слід плутати зі standby: у sleep зберігається низькочастотне вимірювання активності, а у standby вимірювання не виконуються.
Самоперевірка (SELF_TEST) застосовує електростатичну силу до мікроконструкції і дає зміну виходу без механічного збудження — зручно перевірити живлення, зв’язок і роботу осей на готовому пристрої [1]. Робочий стан після подачі живлення — standby: вимірювання стартують після встановлення біта Measure в регістрі POWER_CTL (0x2D).
Підійде / не підійде
Підійде
- для вимірювання нахилу та положення: у full-resolution масштаб близько 3,9 mg/LSB дає змогу розрізняти зміни нахилу менше 1° [1];
- для підрахунку кроків, детекторів активності й тапів (дотиків);
- для виявлення вільного падіння, збоїв та переміщення об’єктів;
- для моніторингу вібрацій: ODR до 3200 Гц через SPI, смуга до 1600 Гц [1];
- для батарейних пристроїв: типовий струм від 23 мкА на низьких ODR і 0,1 мкА у standby [1];
- для прототипів на макетній платі з 5-вольтовими Arduino-сумісними та 3,3-вольтовими ESP32 або Raspberry Pi контролерами після перевірки логічних рівнів.
Не підійде
- якщо потрібні кутові швидкості: акселерометр їх не вимірює, тоді потрібен IMU з гіроскопом, наприклад модуль GY-521 з MPU-6050;
- для вимірювання прискорень понад ±16 g: шкала обмежена (10 000 g — лише механічна стійкість чіпа до удару [1]);
- для кількох датчиків з однаковою адресою: на шині доступно лише дві різні адреси (0x53 і 0x1D), далі потрібен I²C-мультиплексор;
- для високоточних вимірювань без калібрування: зсув нуля потребує компенсації, а регістри калібрування скидаються при кожному перезавантаженні живлення [1].
Приклади застосування
Електронний рівень / контроль нахилу
Статичне прискорення дає кут нахилу відносно гравітації. Діапазон ±2 g, частота 100 Гц і усереднення кількох зразків — типово достатньо для рівня, контролю нахилу камери або позиціонування робота.
Лічильник кроків і детектор активності
AUTO_SLEEP разом із link-режимом дає змогу під час бездіяльності переходити в низькочастотний sleep-режим із типовим струмом близько 23 мкА та автоматично повертатися до активного режиму після виявлення руху [1]. Такий режим підходить для педометрів і портативних реєстраторів.
Виявлення падіння та зсуву
Функція free-fall зі спрощеними рекомендованими порогами: THRESH_FF 0x05–0x09 (300–600 mg) і TIME_FF 0x14–0x46 (100–350 мс) [1]. Підходить для захисту приладів від падіння та сповіщення про переміщення об’єктів.
Моніторинг вібрацій обладнання
Для аналізу вібрації потрібна висока частота оновлення: до 3200 Гц доступні через SPI (не менше 2 МГц) [1]. Зчитуйте пакети через FIFO (до 32 зразків), застосовуйте програмну фільтрацію та забезпечте стабільне живлення, якісне спільне заземлення з контролером і короткий низькоімпедансний шлях GND.
Перше підключення
Визначте адресу I²C
З’єднайте контакт SDO/ALT ADDRESS з GND (адреса 0x53) або з логічною шиною VDD I/O (адреса 0x1D). Не підключайте SDO/ALT ADDRESS безпосередньо до необробленого входу VCC 5 В: ADXL345 працює з логічною напругою до 3,6 В [1]. Не залишайте контакт без чіткого рівня, інакше адреса буде невизначеною.
Налаштуйте режим шини
Для I²C на вході CS самого ADXL345 має бути високий логічний рівень відносно VDD I/O [1]. На GY-291 це може забезпечуватися розводкою плати; перевірте перемичку або схему своєї ревізії та не підключайте CS безпосередньо до необроблених 5 В. Для SPI під’єднайте CS до сумісного GPIO контролера. Переконайтеся, що лінії SDA/SCL мають підтягувальні резистори 4,7–10 кОм — вбудовані на платі або зовнішні.
Оберіть напругу живлення
На вхід VCC модуля можна подавати 3,3 або 5 В: вбудований LDO знижує напругу для ADXL345. Для 3,3-вольтових контролерів ESP32 і Raspberry Pi найпростіше живити модуль від 3,3 В. Якщо подаєте на VCC 5 В, виміряйте напругу спокою SDA/SCL відносно GND перед з’єднанням із GPIO.
Перевірте чіп
Прочитайте регістр DEVID (адреса 0x00): коректне значення — 0xE5 [1]. Якщо адреса знайдена, а DEVID інший, перевірте контакти та полярність живлення.
Увімкніть вимірювання
Задайте діапазон і частоту оновлення (регістри DATA_FORMAT 0x31 і BW_RATE 0x2C), після чого встановіть біт Measure (D3) в POWER_CTL (0x2D) — чіп стартує з режиму standby і без цього не видає даних [1].
Сумісні товари та аксесуари
- Для 5-вольтових макетів: плата Nano V3.0 ATmega328P — I²C/SPI та 5-вольтова логіка.
- Для IoT-проектів із Wi-Fi: модуль ESP32 MiniKit (CP2104) — 3,3-вольтова логіка, I²C і SPI.
- Для швидкого з’єднання без паяння: макетна плата на 400 отворів (крок 2,54 мм).
- Якщо потрібно більше двох I²C-датчиків: 8-канальний комутатор I²C TCA9548A.
Обмеження та безпека
Живлення модуля та рівні SDA/SCL
Напруга 5 В допустима на вході VCC модуля завдяки вбудованому LDO, але це не означає сумісність сигнальних ліній із логікою 5 В. У багатьох ревізіях GY-291 підтягування SDA/SCL підключене до стабілізованої шини 3,3 В, проте розводка конкретної плати може відрізнятися. Перед підключенням до 3,3-вольтових GPIO ESP32 або Raspberry Pi подайте заплановане живлення на модуль і виміряйте напругу спокою SDA та SCL відносно GND. Якщо вона перевищує допустимий рівень входів контролера, живіть модуль від 3,3 В або використовуйте перетворювач логічних рівнів.
SDO/ALT ADDRESS і CS не можна залишати без зв’язку
Чіп не має внутрішніх підтяжок: без чіткого рівня на SDO/ALT ADDRESS адреса I²C невизначена, а CS, що залишився без зв’язку, блокує роботу шини в I²C-режимі [1]. Подавайте на ці контакти лише рівні, сумісні з VDD I/O чіпа; необроблені 5 В для них неприпустимі.
ODR і швидкість шини мають узгоджуватися
Через I²C на 100 кГц максимальна частота оновлення — 200 Гц, на 400 кГц — 800 Гц [1]. Вищий ODR через повільну шину спричиняє втрату зразків і додатковий шум у даних.
Калібрування зсуву та низькі частоти
Регістри калібрування OFSX/OFSY/OFSZ скидаються в 0 після перезавантаження живлення, тому процедуру калібрування доведеться виконувати після кожного увімкнення [1]. На частотах нижче 6,25 Гц температурний дрейф зсуву помітно зростає — для точних вимірювань у такому режимі потрібне калібрування за температурою [1].
FAQ
Чому модуль приймає 5 В, якщо ADXL345 працює від 2,0–3,6 В?
На платі GY-291 встановлено LDO, який знижує вхідну напругу VCC для живлення ADXL345. Стабілізатор не перетворює логічні рівні, тому SDA, SCL, CS і SDO потрібно підключати з урахуванням VDD I/O та ревізії плати.
Датчик не знайдений на шині I²C. Що перевірити?
Спочатку адресу: вона залежить від контакту SDO/ALT ADDRESS — 0x53 при GND, 0x1D при VDD I/O. Далі перевірте підтягування SDA/SCL, високий логічний рівень на CS для I²C та правильність подачі живлення [1].
Як швидко перевірити, що чіп живий і відповідає?
Прочитайте регістр DEVID (адреса 0x00) — для ADXL345 він завжди повертає 0xE5 [1].
Зв’язок є, але дані не змінюються. Чому?
Після подачі живлення чіп перебуває в режимі standby [1]. Встановіть біт Measure (D3) в регістрі POWER_CTL (адреса 0x2D), щоб увімкнути вимірювання.
Яку частоту оновлення можна задавати через I²C?
На шині 100 кГц — до 200 Гц, на 400 кГц — до 800 Гц [1]. Для 1600 і 3200 Гц потрібен SPI з тактуванням не менше 2 МГц.
Скільки ADXL345 можна підключити до однієї шини?
Два — один на адресі 0x53, інший на 0x1D (різне підключення SDO/ALT ADDRESS). Для більшої кількості використовуйте I²C-комутатор TCA9548A.
Які пороги рекомендується поставити для виявлення вільного падіння?
THRESH_FF 0x05–0x09 (300–600 mg) і TIME_FF 0x14–0x46 (100–350 мс) — спрощені рекомендовані значення виробника [1]; для конкретної механіки пристрою пороги підбираються експериментально.
Технічна документація
- Analog Devices, ADXL345 — 3-Axis, ±2 g/±4 g/±8 g/±16 g Digital Accelerometer, datasheet Rev. G (оновлено 10.05.2022) — параметри чіпа: живлення ADXL345 2,0–3,6 В, залежність типового струму від ODR, standby 0,1 мкА, режими fixed 10-bit і full-resolution, характеристики зміщення нуля, обмеження I²C/SPI, адреси 0x53/0x1D, регістри DEVID/POWER_CTL, порогові значення подій і самоперевірка.