Реалізація датчика руху на основі LIS2DH12 і LIS2DW12

  1. Акселерометр LIS2DH12. Режими роботи і споживання
  2. Акселерометр LIS2DW12. Режими роботи і споживання
  3. Порівняння функціоналу акселерометрів LIS2DH12 і LIS2DW12
  4. Використання LIS2DW12. Випадок 1. Робота з фільтром високих частот HP
  5. Використання LIS2DW12. Випадок 2. Робота з абсолютним зсувом без фільтра HP
  6. Використання LIS2DW12. Випадок 2. Робота з відносним зсувом і фільтром HP
  7. Використання LIS2DH12. Випадок 1. Робота з фільтром високих частот HP
  8. Використання LIS2DH12. Випадок 2. Робота з логічними функціями при відключеному фільтрі високих частот HP
  9. Висновок
  10. література
  11. Про компанію ST Microelectronics

Існує цілий ряд додатків, в яких для зменшення енергоспоживання вихід з режиму очікування здійснюється при фізичному переміщенні пристрою Існує цілий ряд додатків, в яких для зменшення енергоспоживання вихід з режиму очікування здійснюється при фізичному переміщенні пристрою. Наприклад, пульт від телевізора може активізуватися тільки тоді, коли його бере користувач. Для реалізації подібної функції потрібно датчик руху. У даній статті ми розглянемо особливості реалізації датчиків руху на базі акселерометрів LIS2DH12 і LIS2DW12 виробництва компанії STMicroelectronics з вбудованою функцією Wake-up.

Компанія STMicroelectronics є лідером в області виробництва МЕМС-датчиків: акселерометрів, гіроскопів, мікрофонів та інших. Акселерометри серії LIS 2 xx (таблиця 1) застосовуються в самих різних областях, починаючи від промислової і комерційної електроніки і закінчуючи автомобільною технікою [1, 2]. Дуже часто акселерометри використовуються в якості датчиків руху для пробудження пристроїв, що знаходяться в режимі очікування.

Таблиця 1. Характеристики акселерометрів серії LIS2xx

параметр LIS2DW12 LIS2DS12 LIS2HH12 LIS2DH12 LIS2DE12 Тип Цифровий Цифровий Цифровий Цифровий Цифровий Корпус, розмір, мм LGA-12, 2х2х0,7 LGA-12, 2х2х0,86 LGA-12, 2х2х0,7 LGA-12, 2х2х0,7 LGA-12, 2х2х0,7 Осі X, Y , ZX, Y, ZX, Y, ZX, Y, ZX, Y, Z Діапазон, g ± 2; ± 4; ± 8; ± 16 ± 2; ± 4; ± 8; ± 16 ± 2; ± 4; ± 8; ± 2; ± 4; ± 8; ± 16 ± 2; ± 4; ± 8; ± 16 Дозвіл, біт 12/14 10/12/14 8/10/16 8/10/12 8 Чутливість, макс., М g 0,244 0,244 0,061 1 15,6 Щільність шуму, мкg / √Гц 90 120 140 750 1315 Iпотр в активному режимі, хв., мкА 0,38 2,5 50 2 + 2 Зміщення, Мg ± 20 ± 30 ± 30 ± 40 ± 100 ODR Одноразовий / 1,6 ... +1600 Гц 1 ... 6400 Гц 10 ... 800 Гц 1 ... 5376 Гц 1 ... 5376 Гц Uпит, В 1,62 ... 3,6 1,62 ... 1,98 1,71 ... 3,6 1,71 ... 3,6 1,71 ... 3,6

У деяких випадках вихід із сплячого режиму повинен відбуватися при фізичному русі пристрою. Наприклад, пульт дистанційного керування знаходиться в режимі очікування і споживає частки мікроампер, коли лежить на столі. Якщо ж користувач бере його в руку, то відбувається пробудження і перехід в робочий стан. Автомобільні системи можна будити при виникненні вібрацій після заводу двигуна. Ще один приклад - різні спортивні гаджети, які автоматично вмикаються при струшуванні або початку виконання фізичних вправ. Не варто забувати і про такі пристрої як датчики злому в системах безпеки.

У всіх наведених вище випадках датчик руху економить заряд елементів живлення за рахунок мінімального власного споживання (рисунок 1). У режимі очікування керуючий мікроконтролер і інші системи знаходяться в стані глибокого сну. При цьому рівень споживання виявляється мінімальним і визначається, в основному, споживанням датчика руху. Після виявлення руху датчик формує переривання і пробуджує мікроконтролер, який активізує пристрій. Таким чином, при тривалих періодах бездіяльності споживання пристрою буде визначатися власним споживанням датчика руху.

Таким чином, при тривалих періодах бездіяльності споживання пристрою буде визначатися власним споживанням датчика руху

Мал. 1. Використання датчика руху для зменшення рівня споживання

Багато сучасні цифрові акселерометри стають ідеальними датчиками руху відразу з кількох причин:

  • забезпечення мінімального рівня споживання навіть в активному стані (сотні нА ... одиниці мкА);
  • наявність апаратної функції пробудження при виявленні руху (Wake-up);
  • можливість цифрового настроювання параметрів пробудження: порога спрацьовування, мінімального часу впливу;
  • наявність різних режимів роботи, наприклад, роботи з абсолютним і відносним зсувом.

Прикладами малопотребляющіх акселерометрів з вбудованою функцією Wake-up є мікросхеми LIS2DH12 і LIS2DW12 виробництва STMicroelectronics. Розглянемо особливості програмної реалізації датчиків руху на базі цих двох акселерометрів.

Акселерометр LIS2DH12. Режими роботи і споживання

LIS2DH12 - трехосевой малопотребляющій акселерометр з вбудованою функцією Wake-up. Він має кілька робочих режимів (таблиця 2): малопотребляющій режим (Low-power mode), нормальний режим (Normal mode) і режим підвищеної продуктивності (High-resolution mode) [3]. Між собою вони відрізняються здатністю, пропускною здатністю і споживанням.

Таблиця 2. Режими роботи LIS2DH12

Режим роботи CTRL_REG1 [3], біт Lpen CTRL_REG4 [3], біт HR Смуга пропускання, Гц Час включення, мс Чутливість при ± 2g, Мg / розряд Low-power (8-бітове дозвіл) 1 0 ODR / 2 1 16 Normal ( 10-бітове дозвіл) 0 0 ODR / 2 1,6 4 High-resolution (12-бітове дозвіл) 0 1 ODR / 9 7 / ODR 1

При використанні функції Wake-up споживання стає ключовим параметром, тому для роботи слід вибирати режим Low-power з мінімальним струмом споживання від 2 мкА при частоті опитування 1 Гц (таблиця 3) [3].

Таблиця 3. Споживання LIS2DH12 в різних робочих режимах

Частота опитування Споживання в різних режимах, мкА Low-power
(8-bit data output) Normal
(10-bit data output) High resolution
(12-bit data output) 1 2 2 2 10 3 4 4 25 4 6 6 50 6 11 11 100 10 20 20 200 18 38 38 400 36 73 73 1344 - 185 185 1620 100 - - 5376 185 - -

Відмінною рисою LIS2DH12 є можливість включення і відключення фільтра високих частот HP. При відключенні фільтра відбувається вимір абсолютних величин прискорень. При активації фільтра постійні прискорення видаляються і враховуються тільки динамічні складові. Детальніше про це буде розказано нижче.

Ще одна особливість функції Wake-up в LIS2DH12 полягає в наявності логічних функцій «І» та «АБО», які дозволяють створювати різні умови пробудження з урахуванням індивідуальних показань кожної осі, наприклад:

  • формувати переривання, коли виявлено рух по осі Xілі по осі Y;
  • формувати переривання, коли виявлено одночасний рух по осі Yі по осі Zі так далі.

Акселерометр LIS2DW12. Режими роботи і споживання

LIS2DW12 - ще один трехосевой малопотребляющій акселерометр з вбудованою функцією пробудження Wake-up виробництва ST.

LIS2DW12 має п'ять основних робочих режимів, які відрізняються здатністю, частотою вимірювань, пропускною здатністю, рівнем шумів і споживанням (таблиця 4) [4].

Таблиця 4. Режими роботи LIS2DW12

Параметр Режим роботи High Performance Mode Low-Power Mode 4 Low-Power Mode 3 Low-Power Mode 2 Low-Power Mode 1 Дозвіл, біт 14 14 14 14 12 Частота опитування ODR, Гц 12,5 ... 1600 1,6 ... 200 1 , 6 ... 200 1,6 ... 200 1,6 ... 200 Смуга пропускання BW, Гц ODR / 2 (крім 1600 Гц), ODR / 4, ODR / 10, ODR / 20 180, ODR / 4, ODR / 10, ODR / 20 360, ODR / 4, ODR / 10, ODR / 20 720, ODR / 4, ODR / 10, ODR / 20 3200, ODR / 4, ODR / 10, ODR / 20 Шуми LOW_NOISE = 0 при ± 2 g,
ODR = 200 Гц, мкg / √ Гц 110 160 210 300 550 Шуми LOW_NOISE = 1 при ± 2 g,
ODR = 200 Гц, мкg / √ Гц 90 130 180 240 450

У самому економічному режимі Low-Power Mode 1 з 12-бітовим дозволом струм споживання становить всього 0,38 мкА при частоті опитування 1,6 Гц (LOW_NOISE = 0). Саме режим Low-Power Mode 1 є оптимальним вибором при використанні функції Wake-up (таблиця 5) [4].

Таблиця 5. Споживання LIS2DW12 в різних робочих режимах

Частота опитування Споживання в різних режимах при 1,8 В, мкА High Performance Low-Power 4 Low-Power 3 Low-Power 2 Low-Power 1 LOW_NOISE LOW_NOISE LOW_NOISE LOW_NOISE LOW_NOISE 0 1 0 1 0 1 0 1 0 1 ODR = 1, 6 Гц - - 0,65 0,7 0,55 0,6 0,45 0,5 0,38 0,4 ODR = 12,5 Гц 90 120 4 5 2,5 3 1,6 2 1 1,1 ODR = 25 Гц 90 120 8,5 10 4,5 6 3 3,5 1,5 2 ODR = 50 Гц 90 120 16 20 9 11 5,5 7 3 3,5 ODR = 100 Гц 90 120 32 39 17, 5 21,5 10,5 13 5 6 ODR = 200 Гц 90 120 63 77 34,5 42 20,5 25 10 12 ODR = 400, 800, 1600 Гц 90 120 - - - - - - - -

Акселерометри LIS2DW12 мають наступні варіанти реалізації функції пробудження Wake-up:

  • робота без урахування початкового зсуву з використанням фільтра високих частот (HP) для усунення постійних складових;
  • робота з відключеним фільтром HP і з урахуванням початкового абсолютного зсуву (режим Absolute reference mode);
  • робота з фільтром HP і відносним зсувом (режим Relative reference mode).

Порівняння функціоналу акселерометрів LIS2DH12 і LIS2DW12

Алгоритми роботи датчиків руху на базі LIS2DH12 і LIS2DW12 ідентичні і включають в себе кілька етапів (рисунок 2): базову ініціалізацію датчика (вибір діапазону вимірювань, розрядності і так далі), настройку функції Wake-up (установку порогових значень, ініціалізацію переривань та інше) , включення датчика (завдання частоти опитування, дозвіл переривань і так далі), очікування руху, генерацію переривання при виявленні руху.

Алгоритми роботи датчиків руху на базі LIS2DH12 і LIS2DW12 ідентичні і включають в себе кілька етапів (рисунок 2): базову ініціалізацію датчика (вибір діапазону вимірювань, розрядності і так далі), настройку функції Wake-up (установку порогових значень, ініціалізацію переривань та інше) , включення датчика (завдання частоти опитування, дозвіл переривань і так далі), очікування руху, генерацію переривання при виявленні руху

Мал. 2. Базовий алгоритм роботи системи з функцією пробудження

Проте, акселерометри LIS2DH12 і LIS2DW12 мають індивідуальні особливості реалізації функції Wake-up (таблиця 6) [5]. Ми розглянемо кожен з існуючих режимів окремо.

Таблиця 6. Порівняння можливостей акселерометрів LIS2DH12 і LIS2DW12

Особливості використання функції Wake-up LIS2DW12 LIS2DH12 Режим з ВЧ-фільтром (HP filter) + + Режим з відносним зсувом (Relative reference mode) + - Режим з абсолютним зсувом (Absolute reference mode) + - Режим без ВЧ-фільтра (HP filter bypassed ) - +

Перш ніж перейти безпосередньо до програм, необхідно ще раз відзначити, що при використанні функції Wake-up рекомендується налаштувати акселерометри на роботу в режимі з мінімальним рівнем споживання (таблиця 7) [5]:

  • для LIS2DW12 - режим Low Power Mode 1 з дозволом 12 біт і частотою опитування 1,6 Гц;
  • для LIS2DW12 - режим Low Power Mode з частотою опитування 1 Гц.

Таблиця 7. Зміни LIS2DH12 і LIS2DW12 з мінімальним споживанням

Параметр LIS2DW12 LIS2DH12 Значення регістрів CTRL1 = 0x10
CTRL4_INT1_PAD_CTRL = 0x20
WAKE_UP_THS = 0x02
WAKE_UP_DURATION = 0x00
CTRL7 = 0x20 CTRL_REG1 = 0x1F
CTRL_REG2 = 0x01
CTRL_REG3 = 0x40
INT1_CFG = 0x2A
INT1_THS = 0x10
INT1_DURATION = 0x00 Споживання, мкА 0,38 (Vdd = 1,8 В) 2 (Vdd = 2,5 В)

У ряді випадків потрібне, щоб система швидше реагувала на рух. Для цього необхідно підняти частоту опитування. Однак рівень споживання при цьому також виросте, як це показано в таблицях 3 і 4.

Ще однією важливою особливістю акселерометрів LIS2DH12 і LIS2DW12 є вбудована підтяжка на входах SDO / SA0. Ці висновки не слід підключати до землі, так як це призведе до значного збільшення споживаного струму. Їх слід залишити непідключеними або підключити до шини харчування.

Використання LIS2DW12. Випадок 1. Робота з фільтром високих частот HP

При активації фільтра високих частот HP функція Wake-up працює незалежно від вихідної орієнтації датчика. Справа в тому, що через використання ВЧ-фільтра постійна складова гравітаційного прискорення видаляється автоматично, і пробудження може спровокувати тільки динамічні прискорення з амплітудою вище заданого порогового рівня і з мінімальною заданою тривалістю (рисунок 3) [5].

Справа в тому, що через використання ВЧ-фільтра постійна складова гравітаційного прискорення видаляється автоматично, і пробудження може спровокувати тільки динамічні прискорення з амплітудою вище заданого порогового рівня і з мінімальною заданою тривалістю (рисунок 3) [5]

Мал. 3. Характеристики пробудження: порогове значення і мінімальна тривалість прискорення

У такому режимі процес ініціалізації LIS2DW12 має наступну послідовність:

  • налаштувати висновок INT1 для формування переривання при пробудженні (функція Wake-up): встановити біт INT1_WU в регістрі CTRL4_INT1_PAD_CTRL (адреса 23h);
  • встановити бажане порогове прискорення: записати відповідне значення бітів WK_THS [5: 0] в регістрі WAKE_UP_THS (адреса 34h). При цьому 1 LSB = 1/64 FS, де FS - використовуваний діапазон виміру акселерометра ± 2g / ± 4g / ± 8g / ± 16g;
  • встановити мінімальну тривалість руху: записати відповідне значення бітів WAKE_DUR [1: 0] в регістрі WAKE_UP_DUR (адреса 35h), де 1 LSB = 1 * 1 / ODR, де ODR - задана частота вимірювань;
  • встановити частоту опитування ODR: записати відповідне значення в поле ODR [3: 0] регістра CTRL1 (адреса 31h);
  • встановити режим зниженого споживання Low power mode 1: записати значення «00» в полі MODE [1: 0] регістра CTRL1 (адреса 31h);
  • встановити розрядність 12-біт: записати значення «00» в полі LP_MODE [1: 0] регістра CTRL1 (адреса 31h);
  • дозволити переривання: встановити біт INTERRUPTS_ENABLE в регістрі CTRL7 (адреса 3Fh).

Програмний код ініціалізації матиме вигляд, представлений в лістингу 1. Тут і далі код є апаратно-незалежним і не розкриває реалізацію використовуваних функцій.

Лістинг 1. Ініціалізація LIS2DW12 при роботі з фільтром високих частот

[5] void LIS2DW12_INT1_handler (void) {print ( "Виявлено переривання \ r \ n"); / * ... * /} int main (void) {init_MCU (); / * Ініціалізація мікроконтролера і портів введення-виведення * / print ( "Початок виконання програми \ r \ n"); / * Базова ініціалізація датчика * / write_reg (0x21, 0x08); / * Робота з регістром CTRL2 (21h). Заборона на перезапис регістра даних в момент читання: BDU = 1. Заборона на інкремент адреси при читанні по I2C / SPI: IF_ADD_INC = 0 * / write_reg (0x25, 0x00); / * Робота з регістром CTRL6 (25h). Діапазон +/- 2g: FS [1: 0] = 0. Смуга пропускання ODR / 2: BW_FILT [1: 0] = 0. Відключення малошумящего режиму LOW_NOISE = 0. При використанні функції Wake-up біт FDS ролі не грає! * / / * Встановлення можливості Wake-up * / write_reg (0x23, 0x20); / * Робота з регістром CTRL4_INT1_PAD_CTRL (23h). Активувати функцію Wake-up: INT1_WU = 1 * / write_reg (0x34, 0x01); / * Робота з регістром WAKE_UP_THS (34h). Задаємо порогове прискорення 1/64 від FS: WK_THS [5: 0] = 1. * / write_reg (0x35, 0x00); / * Робота з регістром WAKE_UP_DUR (35h). Задаємо мінімальну тривалість руху 16 / ODR: WAKE_DUR [1: 0] = 0. * / / * Запустити датчик * / write_reg (0x20, 0x50); / * Робота з регістром CTRL1 (20h). Встановити частоту опитування 100 Гц: ODR [3: 0] = 0101, режим Low-Power mode 1: MODE [1: 0] = 0. Дозвіл 12 біт: LP_MODE [1: 0] = 0 * / delay (10); / * Затримка на 1 / ODR * / write_reg (0x3f, 0x20); / * Робота з регістром CTRL7 (3Fh). Дозвіл переривань датчика: INTERRUPTS_ENABLE = 1. * / while (1) {/ * ... * /}}

Варто відзначити, що при використанні функції Wake-up стан біта FDS (реєстр CTRL6 25h) ролі не грає, а вибір між низькочастотним і високочастотним фільтрами визначається бітом USR_OFF_ON_WU регістра CTRL7 (3Fh) [3].

Використання LIS2DW12. Випадок 2. Робота з абсолютним зсувом без фільтра HP

У розглянутому вище прикладі постійна складова прискорення автоматично віддалялася через використання фільтра високих частот HP, тому початкове положення датчика не мало значення. У ряді випадків необхідно пробуджувати пристрій не тільки при виникненні руху, але і при зміні орієнтації в просторі. При цьому можлива робота з абсолютним і відносним зсувом. Розглянемо випадок абсолютного зсуву.

На малюнках 4 і 5 показані особливості реалізації функції пробудження Wake-up при завданні абсолютного зсуву. Припустимо, що об'єкт має деяке початкове положення (зміщення) (рисунок 4). Це положення приймається за точку відліку. Якщо об'єкт не буде переміщатися, то сигнал пробудження формуватися не буде.

Мал. 4. Переривання не виникає при збереженні орієнтації

Якщо ж орієнтація об'єкта зміниться на деяку величину, яка визначається граничним значенням, то виникає переривання Wake-up (малюнок 5).

Мал. 5. Переривання виникає при зміні орієнтації

Для завдання параметрів зсуву LIS2DW12 використовуються регістри X_OFS_USR (адреса 3Ch), Y_OFS_USR (адреса 3CDh), Z_OFS_USR (адреса 3Eh), а також біти USR_OFF_ON_WU і USR_OFF_W регістра CTRL7 (адреса 3Fh).

Біт USR_OFF_ON_WU визначає вагу восьмибітних регістрів (X, Y, Z) _OFS_USR [6]:

  • якщо USR_OFF_ON_WU = 0, то вага складе 977 мкg / LSB;
  • якщо USR_OFF_ON_WU = 1, то вага складе 15,6 Мg / LSB.

Для більшості додатків рекомендується вибирати вага 15,6 Мg / LSB для отримання максимального діапазону 256 * 15,6 М g = 4g.

Розглянемо приклад. Якщо вага регістрів зсуву становить 15,6 Мg / LSB (USR_OFF_ON_WU = 1), то при завданні X_OFS_USR = 0x00, Y_OFS_USR = 0x00, Z_OFS_USR = 0x40, отримуємо наступні абсолютні значення: X = 0 М g, Y = 0 М g, Z ≈ 1000 Мg.

Код для ініціалізації датчика при роботі з абсолютним зсувом представлений в лістингу 2. Як бачимо, зміни торкнулися тільки настройки регістрів CTRL6, CTRL7 і регістрів зсуву (X, Y, Z) _OFS_USR.

Лістинг 2. Ініціалізація LIS2DW12 при роботі з абсолютним зсувом

[5] void LIS2DW12_INT1_handler (void) {print ( "Виявлено переривання \ r \ n"); / * ... * /} int main (void) {init_MCU (); / * Ініціалізація мікроконтролера і портів введення-виведення * / print ( "Початок виконання програми \ r \ n"); / * Базова ініціалізація датчика * / write_reg (0x21, 0x08); / * Робота з регістром CTRL2 (21h). Заборона на перезапис регістра даних в момент читання: BDU = 1. Заборона на інкремент адреси при читанні по I2C / SPI: IF_ADD_INC = 0 * / write_reg (0x25, 0x00); / * Робота з регістром CTRL6 (25h). Діапазон +/- 2g: FS [1: 0] = 0. Смуга пропускання ODR / 2: BW_FILT [1: 0] = 0. Відключення малошумящего режиму LOW_NOISE = 0. При використанні функції Wake-up біт FDS ролі не грає! * / / * Встановлення можливості Wake-up * / write_reg (0x23, 0x20); / * Робота з регістром CTRL4_INT1_PAD_CTRL (23h). Активувати функцію Wake-up: INT1_WU = 1 * / write_reg (0x34, 0x01); / * Робота з регістром WAKE_UP_THS (34h). Задаємо порогове прискорення 1/64 від FS: WK_THS [5: 0] = 1. * / write_reg (0x35, 0x00); / * Робота з регістром WAKE_UP_DUR (35h). Задаємо мінімальну тривалість руху 16 / ODR: WAKE_DUR [1: 0] = 0. * / / * Завдання зміщення * / write_reg (0x3c, 0x00); / * Робота з регістром X_OFS_USR (3Ch). Задаємо зміщення 0: X_OFS_USR_ [7: 0] = 0 * / write_reg (0x3d, 0x00); / * Робота з регістром Y_OFS_USR (3Dh). Задаємо зміщення 0: Y_OFS_USR_ [7: 0] = 0 * / write_reg (0x3e, 0x40); / * Робота з регістром Z_OFS_USR (3Eh). Задаємо зміщення 1g: Z_OFS_USR_ [7: 0] = 0x40 * / / * Запустити датчик * / write_reg (0x20, 0x20); / * Робота з регістром CTRL1 (20h). Встановити частоту опитування 100 Гц: ODR [3: 0] = 0010, режим Low-Power mode 1: MODE [1: 0] = 0. Дозвіл 12 біт: LP_MODE [1: 0] = 0 * / delay (80); / * Затримка на 1 / ODR * / write_reg (0x3f, 0x2С); / * Робота з регістром CTRL7 (3Fh). Дозвіл переривань датчика: INTERRUPTS_ENABLE = 1. Використання режиму абсолютного зсуву: USR_OFF_ON_WU = 1. Вага регістрів зсуву 15,6 Мg: USR_OFF_W = 1. * / While (1) {/ * ... * /}}

Використання LIS2DW12. Випадок 2. Робота з відносним зсувом і фільтром HP

Режим з відносним зсувом застосовується, коли необхідно оперативно призначити поточні значення прискорень в якості точки відліку, і в подальшому орієнтуватися саме на неї при генерації переривання. В даному випадку робота йде з використанням фільтра верхніх частот HP.

Фіксація відносного зміщення відбувається в момент запису біта HP_REF_MODE в регістр CTRL7 (адреса 3fh). Після цього вихідні дані визначаються як різниця між поточними значенням осьових прискорень і опорними значеннями, зафіксованими раніше. Якщо ця різниця перевищить величину порогового значення, заданого в WK_THS [5: 0], відбудеться переривання. В іншому даний режим повторює розглянутий вище випадок (малюнки 4 і 5).

Код для ініціалізації датчика при роботі з відносним зсувом представлений в лістингу 3.

Лістінг 3. Ініціалізація LIS2DW12 при роботі з відноснім Зсув

[5] void LIS2DW12_INT1_handler (void) {print ( "Виявлено переривані \ r \ n"); / * ... * /} int main (void) {init_MCU (); / * Ініціалізація мікроконтролера і портів введення-виведення * / print ( "Початок виконання програми \ r \ n"); / * Базова ініціалізація датчика * / write_reg (0x21, 0x08); / * Робота з регістром CTRL2 (21h). Заборона на перезапис регістра даних в момент читання: BDU = 1. Заборона на інкремент адреси при читанні по I2C / SPI: IF_ADD_INC = 0 * / write_reg (0x25, 0x00); / * Робота з регістром CTRL6 (25h). Діапазон +/- 2g: FS [1: 0] = 0. Смуга пропускання ODR / 2: BW_FILT [1: 0] = 0. Відключення малошумящего режиму LOW_NOISE = 0. При використанні функції Wake-up біт FDS ролі не грає! * / / * Встановлення можливості Wake-up * / write_reg (0x23, 0x20); / * Робота з регістром CTRL4_INT1_PAD_CTRL (23h). Активувати функцію Wake-up: INT1_WU = 1 * / write_reg (0x34, 0x01); / * Робота з регістром WAKE_UP_THS (34h). Задаємо порогове прискорення 1/64 від FS: WK_THS [5: 0] = 1. * / write_reg (0x35, 0x00); / * Робота з регістром WAKE_UP_DUR (35h). Задаємо мінімальну тривалість руху 16 / ODR: WAKE_DUR [1: 0] = 0. * / / * Запустити датчик * / write_reg (0x20, 0x20); / * Робота з регістром CTRL1 (20h). Встановити частоту опитування 100 Гц: ODR [3: 0] = 0010, режим Low-Power mode 1: MODE [1: 0] = 0. Дозвіл 12 біт: LP_MODE [1: 0] = 0 * / delay (80); / * Затримка на 1 / ODR * / write_reg (0x3f, 0x20); / * Робота з регістром CTRL7 (3Fh). Дозвіл переривань датчика: INTERRUPTS_ENABLE = 1. Дозвіл відносного зміщення з HP: USR_OFF_ON_WU = 0. * / write_reg (0x3f, 0x22); / * Зафіксувати відносне зміщення. Встановлюємо біт HP_REF_MODE в регістрі CTRL7 (3Fh) * / while (1) {/ * ... * /}}

Якщо потрібно змінити значення зсувів, тобто здатна сфокусуватися на предметі в новій орієнтації, слід скинути біт HP_REF_MODE, задати необхідну орієнтацію об'єкта, і знову встановити біт HP_REF_MODE.

Використання LIS2DH12. Випадок 1. Робота з фільтром високих частот HP

Реалізація функції Wake-up з фільтром високих частот для LIS2DH12 практично ідентична розглянутому вище випадку з LIS2DW12. Завдяки ВЧ-фільтру HP гравітаційне прискорення фільтрується, тому пробудження можуть спровокувати тільки динамічні прискорення з амплітудою вище заданого порогового рівня і з мінімальною заданою тривалістю (рисунок 3).

Для ініціалізації LIS2DH12 потрібно наступна послідовність дій:

  • дозволити використання фільтра високих частот: встановити біт FDS в регістрі CTRL_REG2 (адреса 21h);
  • дозволити використання фільтра високих частот для вбудованих функцій OR і AND: встановити біт HP_IA1 в регістрі CTRL_REG2 (адреса 21h);
  • налаштувати висновок INT1 для формування переривання при пробудженні (функція Wake-up): встановити біт I1_IA1 в регістрі CTRL_REG3 (адреса 22h);
  • дозволити переривання по всіх осях: встановити біти ZHIE, YHIE, XHIE в регістрі INT1_CFG (адреса 30h);
  • встановити бажане порогове прискорення: записати відповідне значення в поле THS [6: 0] в регістрі INT1_THS (адреса 32h). При цьому вага бітів THS [6: 0] залежить від заданого діапазону вимірювань: 1 LSb = 16 М g при FS = 2g, 1 LSb = 32 М g при FS = 4g, 1 LSb = 62 М g при FS = 8g, 1 LSb = 186 Мg при FS = 16g;
  • встановити мінімальну тривалість руху: записати відповідне значення в поле D [6: 0] в регістрі INT1_DURATION (адреса 33h), де 1 LSB = 1 * 1 / ODR, де ODR - задана частота вимірювань;
  • встановити частоту опитування ODR: записати відповідне значення в поле ODR [3: 0] регістра CTRL_REG1 (адреса 20h);
  • встановити режим мінімального споживання Low-power: встановити біт LPen в регістрі CTRL_REG1 (адреса 20h).

У документації також рекомендується проводити читання регістра REFERENCE (26h) після кожного пробудження для скидання фільтра HP і продовження нормальної роботи.

Код для ініціалізації LIS2DH12 при роботі високочастотним фільтром приведений в лістингу 4.

Лістинг 4. Ініціалізація LIS2DW LIS2DH12 при роботі високочастотним фільтром

[5] void LIS2DH12_INT1_handler (void) {print ( "Виявлено переривання \ r \ n"); / * ... * /} int main (void) {init_MCU (); / * Ініціалізація мікроконтролера і портів введення-виведення * / print ( "Початок виконання програми \ r \ n"); / * Базова ініціалізація датчика * / / * Робота з регістром CTRL_REG2 (21h) Дозволити роботу фільтра високих частот: FDS = 1; Дозволити роботу фільтра високих частот для вбудованих функцій OR і AND Interupt1: HP_IA1 = 1 * / write_reg (0x21, 0x09); write_reg (0x22, 0x40); / * Робота з регістром CTRL_REG3 (22h). Налаштувати висновок INT1 для формування переривання I1_IA1 = 1 * / write_reg (0x23, 0x00); / * Робота з регістром CTRL_REG4 (23h). Встановити діапазон вимірювань +/- 2g: FS [1: 0] = 00. * / / * Встановлення можливості Wake-up * / write_reg (0x30, 0x2a); / * Робота з регістром INT1_CFG (30h). Дозволити переривання по всіх осях ZHIE, YHIE, XHIE = 1. За замовчуванням використовується функція АБО: AOI = 0, 6D = 0 * / write_reg (0x32, 0x14); / * Робота з регістром INT1_THS (32h). Задаємо порогове прискорення з урахуванням обраного діапазону. Так як FS становить +/- 2g, то для THS [6: 0] 1LSB = 16 М g: 16 * 20 = 320 М g * / write_reg (0x33, 0x00); / * Робота з регістром INT1_DURATION (33h). Задаємо мінімальну тривалість руху 1 / ODR: D [6: 0] = 0 * / / * Запустити датчик * / write_reg (0x20, 0x5f); / * Робота з регістром CTRL_REG1 (20h). Встановити частоту опитування 100 Гц: ODR [3: 0] = 0101, режим Low-Power mode: LPen = 1. Дозвіл роботи всіх осей Zen, Yen, Xen = 1 * / HAL_Delay (1); / * Затримка 1мс * / while (1) {/ * ... * /}}

Використання LIS2DH12. Випадок 2. Робота з логічними функціями при відключеному фільтрі високих частот HP

Як було сказано раніше, акселерометри LIS2DH12 дозволяють реалізовувати до 64 сценаріїв пробудження з урахуванням індивідуальних показань кожної з осей. Для цього використовуються вбудовані логічні функції «І» та «АБО». Генерація переривання при використанні функції Wake-up визначається шістьма джерелами (рисунок 6) [7]:

Генерація переривання при використанні функції Wake-up визначається шістьма джерелами (рисунок 6) [7]:

Мал. 6. Дерево переривань при використанні функції Wake-up в LIS2DH12

  • ZHIE - переривання при перевищенні порога по осі Z;
  • ZLIE - переривання при значеннях прискорення по осі Z менше порогового значення;
  • YHIE - переривання при перевищенні порога по осі Y;
  • YLIE - переривання при значеннях прискорення по осі Y менше порогового значення;
  • XHIE - переривання при перевищенні порога по осі X;
  • XLIE - переривання при значеннях прискорення по осі X менше порогового значення.

Дозвіл того чи іншого переривання виробляється установкою однойменних бітів в регістрах INT1_CFG і INT2_CFG.

На додаток до цього можлива комбінація цих сигналів за допомогою логічних функцій «І» та «АБО». Для цього використовуються біти AOI і 6D регістрів INT1_CFG і INT2_CFG [4, 7]:

  • якщо AOI = 0, 6D = 0, то реалізується функція «АБО». Це означає, що переривання буде генеруватися, якщо хоча б один з джерел буде активний;
  • якщо AOI = 1, 6D = 0, то реалізується функція «І». Це означає, що переривання буде генеруватися, тільки якщо всі вибрані переривання будуть активні.

Як приклад розглянемо випадок, представлений на малюнку 7. У даній комбінації дозволені переривання YHIE і XHIE, які об'єднані логічним «АБО». Таким чином, якщо хоча б по одній з осей буде перевищено граничне значення в 312 Мg, то станеться генерація переривання Wake-up.

Таким чином, якщо хоча б по одній з осей буде перевищено граничне значення в 312 Мg, то станеться генерація переривання Wake-up

Мал. 7. Приклад генерації переривання при використанні логічної функції "АБО"

Код ініціалізації LIS2DH12 при реалізації прикладу, представленого на малюнку 7, приведений в лістингу 5.

Лістинг 5. Реалізація функції пробудження з використанням логічних функцій

[5] void LIS2DH12_INT1_handler (void) {print ( "Виявлено переривання \ r \ n"); / * ... * /} int main (void) {init_MCU (); / * Ініціалізація мікроконтролера і портів ввод- / виводу * / print ( "Початок виконання програми \ r \ n"); / * Базова ініціалізація датчика * / write_reg (0x22, 0x40); / * Робота з регістром CTRL_REG3 (22h). Налаштувати висновок INT1 для формування переривання I1_IA1 = 1 * / write_reg (0x23, 0x00); / * Робота з регістром CTRL_REG4 (23h). Встановити діапазон вимірювань +/- 2g: FS [1: 0] = 00. * / / * Wakeup recognition enable * / write_reg (0x30, 0x0a); / * Робота з регістром INT1_CFG (30h). Дозволити переривання по осях YHIE і XHIE = 1. За замовчуванням використовується функція «АБО»: AOI = 0, 6D = 0 * / write_reg (0x32, 0x14); / * Робота з регістром INT1_THS (32h). Задаємо порогове прискорення з урахуванням обраного діапазону. Так як FS становить +/- 2g, то для THS [6: 0] 1LSB = 16 М g: 16 * 20 = 320 М g * / write_reg (0x33, 0x00); / * Робота з регістром INT1_DURATION (33h). Задаємо мінімальну тривалість руху 1 / ODR: D [6: 0] = 0 * / / * Запустити датчик * / write_reg (0x20, 0x5f); / * Робота з регістром CTRL_REG1 (20h). Встановити частоту опитування 100 Гц: ODR [3: 0] = 0101, режим Low-Power mode: LPen = 1. Дозвіл роботи всіх осей Zen, Yen, Xen = 1 * / HAL_Delay (1); / * Затримка 1мс * / while (1) {/ * ... * /}}

Висновок

Використання акселерометрів LIS2DH12 і LIS2DW12 як датчики руху має цілий ряд переваг: мінімальне власне споживання, наявність апаратної функції пробудження Wake-up, можливість цифрового настроювання параметрів пробудження (порога спрацьовування, мінімального часу впливу), наявність різних режимів роботи (з ВЧ-фільтром, з абсолютним або відносним зсувом).

література

  1. Олександр Калачов. Акселерометри STMicroelectronics: визначаючи будь-який рух. НЕ № 6/2014;
  2. В'ячеслав Гавриков. LIS2DW12: новий акселерометр з ультранизьким енергоспоживанням. НЕ №3 / 2017;
  3. DatasheetLIS2DH12, High-performance ultra-low-power 3-axis «femto» accelerometer;
  4. DatasheetLIS2DW12, High-performance ultra-low-power 3-axis «femto» accelerometer;
  5. Vladimir JANOUSEK, Zuzana JIRANKOVA and Petr STUKJUNGER. Setting up Wake-up recognition and absolute / relative reference. 1. STMicroelectronics 2017;
  6. LIS2DW12: always-on 3D accelerometer AN5038 Application note. LIS2DW12: always-on 3D accelerometer. Rev.1. - STMicroelectronics 2017;
  7. Application note AN5005, LIS2DH12: MEMS digital output motion sensor ultra-low-power high performance 3-axis «nano» accelerometer. Rev.2. STMicroelectronics 2017;
  8. st.com .
Про компанію ST Microelectronics

Компанія STMicroelectronics є №1 виробника електроніки в Европе Компанія STMicroelectronics є №1 виробника електроніки в Европе. Компоненти ST широко представлені в оточуючіх нас СПОЖИВЧИХ товари - від iPhone до автомобілів різніх марок. Лідери індустріального Сайти Вся вібірають компоненти ST за їх Надійність и видатні технічні параметрами. У компании ST працює 48 000 співробітніків в 35 странах. Виробничі потужності розташовані в 12 странах світу. Понад 11 тисяч співробітніків зайняті дослідженнямі і розробки - інноваційне лідерство ... читати далі