STM32G0 – идеальный вариант для систем с датчиками

30 октября

системы безопасностиучёт ресурсовпотребительская электроникаавтоматизацияуниверсальное применениеST Microelectronicsстатьядатчикисредства разработки и материалы

Вячеслав Гавриков (Смоленск)

Новое семейство бюджетных микроконтроллеров STM32G0 отлично работает совместно с  датчиками производства компании STMicroelectronics. В статье проводится обзор современных датчиков от ST, анализируются преимущества STM32G0, рассматриваются конкретные примеры работы STM32G0 с датчиками на базе отладочных плат Nucleo-G071RB и X-NUCLEO-53L1A1 в средах Arduino IDE и STM32CubeIDE

Датчики (сенсоры) – важнейшие элементы современной электроники. Они используются в коммерческой электронике, промышленном оборудовании, медицинской технике, системах безопасности, домашней автоматизации, военной и космической отраслях и так далее. Разумеется, в каждом конкретном приложении требования, предъявляемые к датчикам, могут существенно отличаться. Например, в промышленном оборудовании необходима высокая надежность и расширенный диапазон рабочих температур. При создании устройств с батарейным питанием важно обеспечить минимальное потребление. В коммерческих приложениях на первом месте зачастую оказывается стоимость. В системах безопасности и автоматизации зданий, как правило, ключевыми параметрами становятся компактные габариты, малое потребление и малая стоимость.

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

Компания STMicroelectronics выпускает широкую номенклатуру сенсоров, которые могут быть использованы для реализации вышеперечисленных функций:

  • цифровые и аналоговые акселерометры для промышленных, автомобильных и коммерческих приложений;
  • цифровые двух- и трехосевые гироскопы;
  • цифровые датчики влажности и температуры HTS221;
  • цифровые датчики давления;
  • цифровые датчики приближения VL53x и VL6180x;
  • цифровые и аналоговые датчики температуры;
  • микрофоны;
  • магнитометры и электронные компасы;
  • инерционные модули, объединяющие несколько МЭМС-сенсоров;
  • NFC-память с двойным интерфейсом.

Для создания современных приложений, кроме датчиков, потребуются также беспроводные и проводные интерфейсы, микросхемы питания и, конечно, микроконтроллеры. Все эти компоненты можно найти среди обширной номенклатуры STMicroelectronics. Единая экосистема, созданная этой компанией, объединяет различные компоненты и позволяет максимально быстро создавать новые устройства с помощью существующих отладочных и оценочных плат, а также бесплатного и коммерческого ПО (рисунок 1).

Рис. 1. Компания ST создала единую экосистему, обеспечивающую максимально быстрое проектирование новых устройств

Рис. 1. Компания ST создала единую экосистему, обеспечивающую максимально быстрое проектирование новых устройств

При разработке бюджетных систем с датчиками к управляющему микроконтроллеру предъявляются вполне конкретные требования: невысокая цена, наличие необходимых интерфейсов и периферии, малое потребление, большой объем памяти, большой выбор корпусных исполнений, наличие средств защиты, широкий выбор средств разработки и отладки. Всеми этими качествами обладают микроконтроллеры семейства STM32G0 производства ST (рисунок 2). Еще одним важным преимуществом STM32G0 является широкий выбор аппаратных и программных средств разработки и отладки.

Рис. 2. Микроконтроллеры семейства STM32G0 являются отличным выбором для создания систем с датчиками

Рис. 2. Микроконтроллеры семейства STM32G0 являются отличным выбором для создания систем с датчиками

В данной статье проводится обзор современных датчиков производства компании STMicroelectronics, анализируются преимущества STM32G0, рассматриваются конкретные примеры работы STM32G0 с датчиками.

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

В настоящий момент компания STMicroelectronics производит почти три десятка наименований акселерометров (таблица 1). Кратко проанализируем их характеристики.

Тип выхода. Большинство акселерометров от STMicroelectronics – цифровые, они используют для взаимодействия с управляющим микроконтроллером интерфейсы I2C и SPI. Исключением является трехосевой акселерометр LIS344ALH, который имеет три аналоговых выхода напряжения. Для работы с ним потребуется АЦП.

Количество поддерживаемых осей. Большая часть акселерометров STMicroelectronics – трехосевые. Акселерометр AIS1120Sx работает с одной осью, а акселерометры AIS1200PS и AIS2120Sx производят измерения по двум осям.

Диапазон измеряемых ускорений. Наиболее популярными диапазонами являются ±2, ±4, ±8 и ±16 g. Однако в линейке поставок STMicroelectronics присутствуют и модели, предназначенные для измерения сверхускорений до ±200 g и ±400 g (H3LIS100DL, H3LIS200DL, и другие). Кроме того, существуют акселерометры, которые обладают узким диапазоном измерения ±2/±2,5/±6 и минимальным уровнем шума. Они обычно используются в качестве инклинометров.

Потребление акселерометров ST варьируется в широких пределах, но для большинства моделей потребление даже в активном режиме не превышает нескольких сотен мкА. В режиме Power down потребление и вовсе падает до единиц мкА (и даже ниже).

Область применения. STMicroelectronics делит свои акселерометры на пять групп: автомобильные акселерометры AISx, промышленные акселерометры IISx, акселерометры H3LISx для работы со значительными ускорениями, акселерометры для коммерческих приложений LISx, акселерометр для медицинских приложений MIS2DH.

Дополнительные преимущества. Среди дополнительных преимуществ акселерометров от STMicroelectronics следует также отметить: наличие встроенных буферов FIFO и возможность работы по прерыванию, большой выбор корпусных исполнений, широкий диапазон напряжений питания, наличие встроенных датчиков температуры (необходимых для калибровки).

Обзор акселерометров ST, анализ их характеристик и подробное рассмотрение работы с ними можно найти в других публикациях на нашем сайте, например, здесь [1, 2].

Таблица 1. Характеристики акселерометров STMicroelectronics

Наименование Тип Оси Диапазон, g Плотность шума тип., мкg/√Гц Iпотр тип., мА Iпотр мин., мкА Корпус Uпит, В
AIS1120SX Цифровой X ±120 4,5 SO-8 3,1…3,5
AIS1200PS Цифровой X, Y ±200 4 SO16 мм 5…16
AIS2120SX Цифровой X, Y ±120 6 SO-8 3,1…3,5
AIS2DW12 Цифровой X, Y, Z ±2;±4 120 0,67 0,5 FLGA
2x2x1 мм
1,62…3,6
AIS328DQ Цифровой X, Y, Z ±2; ±4; ±8 218 0,25 QFN 24
4x4x1,8 мм
2.4…3,6
AIS3624DQ Цифровой X, Y, Z ±6; ±12; ± 24 600 1 QFN 24
4x4x1,8 мм
2,4…3,6
H3LIS100DL Цифровой X, Y, Z ±100 500 1 LLGA 16
3x3x1,0 мм
2,16…3,6
H3LIS200DL Цифровой X, Y, Z ±100; ±200 500 1 LLGA 16
3x3x1,0 мм
2,16…3,6
H3LIS331DL Цифровой X, Y, Z ±100; ±200, ±400 1500 0,3 LLGA 16
3x3x1,0 мм
2,16…3,6
IIS2DH Цифровой X, Y, Z ±2; ±4; ±8; ±16 0,011 0,5 VFLGA
2x2x1 мм
1,71…3,6
IIS2DLPC Цифровой X, Y, Z ±2; ±4; ±8; ±16 90 0.011 0,5 LGA
2x2x0.7 мм
1,71…3,6
IIS328DQ Цифровой X, Y, Z ±2; ±4; ±8 218 1 QFN 24
4x4x1,8 мм
2,4…3,6
IIS3DHHC Цифровой X, Y, Z ±2,5 45 0,011 0,5 LGA
5x5x1,7 мм
1,71…3,6
LIS25BA Цифровой X, Y, Z ±3,85 2,13 200 VFLGA
2,5х2,5х0,86 мм
1,71…1,99
LIS2DE12 Цифровой X, Y, Z ±2; ±4; ±8; ±16 0,011 0,5 VFLGA
2x2x1 мм
1,71…3,6
LIS2DH Цифровой X, Y, Z ±2; ±4; ±8; ±16 0,011 0,5 LGA 14
2x2x1,0 мм
1,71…3,6
LIS2DH12 Цифровой X, Y, Z ±2; ±4; ±8; ±16 220 0,011 0,5 VFLGA
2x2x1 мм
1.71…3,6
LIS2DS12 Цифровой X, Y, Z ±2; ±4; ±8; ±16 120 0,018 0,5 VFLGA
2x2x0,86 мм
1,62…1,98
LIS2DTW12 Цифровой X, Y, Z ±2; ±4; ±8; ±16 90 0,09 0,5 LGA
2x2x0,7 мм
1,62…3,6
LIS2DW12 Цифровой X, Y, Z ±2; ±4; ±8; ±16 120 0,09 0,5 LGA
2x2x0,7 мм
1,62…3,6
LIS2HH12 Цифровой X, Y, Z ±2; ±4; ±8 0,018 0,5 VFLGA
2x2x1 мм
1,71…3,6
LIS331DLH Цифровой X, Y, Z ±2; ±4; ±8 218 0,25 LLGA
16 3x3x1,0 мм
2,16…3,6
LIS331HH Цифровой X, Y, Z ±6; ±12; ±24 650 0,25 1 LLGA 16
3x3x1,0 мм
2,16…3,6
LIS344ALH Аналоговый X, Y, Z ±2; ±6 50 0,68 LLGA 16
4x4x1,5 мм
2,4…3,6
LIS3DH Цифровой X, Y, Z ±2; ±4; ±8; ±16 220 0,011 0,5 LLGA 16
3x3x1,0 мм
1.71…3,6
LIS3DHH Цифровой X, Y, Z ±2,5 45 2,5 LGA
5x5x1,7
16LD мм
1,71…3,6
LIS3DSH Цифровой X, Y, Z ±2; ±4; ±6; ±8; ±16 150 0,25 2 LLGA 16
3x3x1,0
1,71…3,6
LIS3LV02DL Цифровой X, Y, Z ±2; ±6 0,65 1 LGA 16
4,4х7,5х1,0 мм
2,16…3,6
MIS2DH Цифровой X, Y, Z ±2; ±4; ±8; ±16 0,002 0,5 VFLGA
2х2х1 мм
1,71…3,6

Гироскопы

Номенклатура гироскопов STMicroelectronics объединяет пять представителей (таблица 2):

  • A3G4250D – трехосевой гироскоп для автомобильных приложений, имеющий квалификацию AEC-Q100;
  • I3G4250D – трехосевой гироскоп для промышленных приложений с расширенным диапазоном температур;
  • L20G20IS – двухосевой гироскоп для систем оптической стабилизации (optical image stabilization, OIS);
  • L2G2IS – двухосевой гироскоп для систем оптической стабилизации и игровых систем (optical image stabilization, OIS);
  • L3GD20H – трехосевой малопотребляющий гироскоп.

Все гироскопы являются цифровыми и используют для взаимодействия с микроконтроллером интерфейсы I2C и SPI.

Таблица 2. Характеристики гироскопов ST

Наименование Тип Оси Диапазон, °/с Плотность шума тип., °/с/√Гц Iпотр тип., мА Iпотр мин., мкА Корпус Uпит, В
A3G4250D Цифровой X, Y,Z 245 0,03 6,1 5 LGA 16
4x4x1,1
2,4…3,6
I3G4250D Цифровой X, Y,Z 2000 0,03 6,1 5 LGA 16
4x4x1,1
2,4…3,6
L20G20IS Цифровой X, Y 200 3,8 1,4 5 LGA
2x2x0,7
1,71…3,6
L2G2IS Цифровой X, Y 200 0,006 3,8 20 WFLGA
2,3х2,3х0,7
16L
1,71…3,6
L3GD20H Цифровой X, Y,Z 2000 0,011 5 1 LLGA 16
3x3x1,0
2,2…3,6

Датчик влажности

Влажность является важным параметром среды для широкого спектра приложений.

HTS221 – цифровой датчик относительной влажности от STMicroelectronics, который позволяет выполнять измерения с разрешением 16 бит (таблица 3). Для взаимодействия с микроконтроллером используются интерфейсы SPI и I2C. Благодаря функции самокалибровки начальная точность HTS221 составляет ±3,5% rH (в диапазоне 20…80% rH). Обеспечить температурную стабильность можно за счет встроенного датчика температуры. Большим плюсом HTS221 является низкое потребление – всего 2 мкА при минимальной частоте опроса 1 Гц. В режиме сна потребление падает до 0,5 мкА.

Подробный обзор датчика влажности HTS221 можно найти в других публикациях, например, здесь [3].

Таблица 3. Характеристики датчика влажности HTS221 от STMicroelectronics

Наименование Тип Оси Диапазон, % RH Диапазон температур, °C Iпотр мин., мкА Корпус Uпит, В
HTS221 Цифровой X 0…100 -40…120 0,5 HLGA-6L
2x2x0,9
1,7…3,6

Датчики давления

Еще один важный параметр окружающей среды – давление. STMicroelectronics выпускает несколько датчиков давления (таблица 4):

  • LPS27HHW – цифровой МЭМС-датчик давления с диапазоном 260…1260 кПа и частотой измерений до 75 Гц. Имеет корпус с патрубком для подключения трубок;
  • LPS22HB – пъезорезистивный ультракомпактный датчик давления с диапазоном 260…1260 кПа и частотой измерений до 75 Гц. Имеет водонепроницаемый HLGA-корпус;
  • LPS22HD – пъезорезистивный ультракомпактный датчик давления с диапазоном 260…1260 кПа и частотой измерений до 200 Гц;
  • LPS22HH – цифровой МЭМС-датчик давления с диапазоном 260…1260 кПа и частотой измерений до 200 Гц;
  • LPS25HB – пъезорезистивный датчик давления с диапазоном 260…1260 кПа и частотой измерений до 25 Гц;
  • LPS33HW – пъезорезистивный датчик давления с диапазоном 260…1260 кПа и частотой измерений до 25 Гц. Имеет корпус с патрубком для подключения трубок;
  • LPS33W – пъезорезистивный датчик давления с диапазоном 260…1260 кПа и частотой измерений до 75 Гц. Имеет корпус с патрубком для подключения трубок;
  • LPS35HW – пъезорезистивный датчик давления с диапазоном 260…1260 кПа и частотой измерений до 75 Гц. Имеет водонепроницаемый корпус.

Все представленные датчики являются цифровыми и используют для взаимодействия с управляющим контроллером интерфейсы I2C и SPI. Примеры корпусных исполнений датчиков давления от ST представлены на рисунке 3. Подробный обзор этих датчиков можно найти в других публикациях, например, здесь [3].

Рис. 3. Корпусные исполнения датчиков давления ST

Рис. 3. Корпусные исполнения датчиков давления ST

Таблица 4. Характеристики датчиков давления от STMicroelectronics

Наименование Тип Диапазон, кПа Частота измерений, Гц Шум, кПа Iпотр тип., мкА Iпотр мин., мкА Корпус
LPS27HHW Цифровой 260…1260 1…75 7 1 2,7х2,7х1,7
LPS22HB Цифровой 260…1260 1…75 0,0075 12 1 2x2x0,76
LPS22HD Цифровой 260…1260 1…200 0,0075 12 1 2x2x0,76
LPS22HH Цифровой 260…1260 1…200 0,0065 12 0,9 2x2x0,73
LPS25HB Цифровой 260…1260 1…25 0,01 25 0,5 2,5х2,5х0,76
LPS33HW Цифровой 260…1260 1…75 0,008 15 1 3,3х3,3х2,9
LPS33W Цифровой 260…1260 1…75 0,02 15 1 3,3х3,3х2,9
LPS35HW Цифровой 260…1260 1…75 0,008 15 1 3,5х3,5х1,85

Датчики температуры

Датчики температуры являются обязательными элементами практически для всех измерительных систем. Это связано с необходимостью корректировки показаний измерений с учетом различных температурных зависимостей. Кроме того, датчики температуры могут использоваться для обнаружения локальных и общих аварийных перегревов.

Компания STMicroelectronics выпускает более десятка различных датчиков (таблица 5), среди них:

  • цифровые (с поддержкой интерфейсов I2C и SPI) и аналоговые (с выходом по напряжению);
  • с разрешением до 10 бит;
  • прецизионные с точностью от 0,5°С и с погрешностью от 3%;
  • с диапазоном измеряемых температур до -55…150°С;
  • с потреблением от 50 мкА в активном режиме (например, STTS751).

Подробный обзор датчиков температуры от ST можно найти в других публикациях, например, здесь [4].

Таблица 5. Характеристики датчиков температуры от STMicroelectronics

Наименова-
ние
Тип Разре-
шение, бит
Диапазон, °С Точ-
ность, °С
Погреш-
ность, %
Iпотр тип., мкА Iпотр мин., мкА Корпус Uпит, В
LM135 Аналоговый -55…150 3 TO-92
LM234 Аналоговый -25…100 6 SO-8
LM235 Аналоговый -40…125 3 SO-8,TO-92
LM334 Аналоговый 0…70 6 SO-8
LM335 Аналоговый -40…100 3 SO-8,TO-92
STCN75 Цифровой 9 -55…125 0,5 125 1 MSOP/TSSOP 8 2,7…5,5
STDS75 Цифровой 9 -55…125 0,5 125 1 MSOP/TSSOP 8 2,7…5,5
STLM20 Аналоговый -40(-55)…85(130) 0,5 4,8 0,02 SOT323-5L, UFDFPN 2,4…5,5
STLM75 Цифровой 9 -55…125 0,5 125 1 MSOP/TSSOP 8, SO-8 2,7…5,5
STTS2004 Цифровой 10 -20…125 0,5 160 3 TDFN8
2x3x0,75
2,2…3,6
STTS75 Цифровой 9 -55…125 0,5 75 1 MSOP/TSSOP 8, SO-8 2,7…5,5
STTS751 Цифровой 10 -40…125 0,5 50 3 DFN6
2x2x0,5
2,25…3,6

Датчики приближения

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

STMicroelectronics предлагает три модели датчиков приближения (таблица 6):

  • VL53L0x – датчик приближения с радиусом действия до 2 м;
  • VL53L1x – датчик приближения с увеличенным радиусом действия 4 м;
  • VL6180x – датчик приближения с радиусом действия 0,1 м и встроенным датчиком освещения ALS.

Таблица 6. Характеристики датчиков приближения от STMicroelectronics

Наименование Тип Максимальный радиус действия, м Диапазон температур, °C Корпус Uпит, В
VL53L0x Цифровой 2 -20…70 4,4х2,4х1 2,6…3,5
VL53L1x Цифровой 4 -20…85 4,9х2,5х1,56 2,6…3,5
VL6180x Цифровой 0,1 -20…70 4,8х2,8х1 2,5…3,0

Датчики приближения от ST являются чрезвычайно удобными и законченными измерительными системами. Они объединяют в одном корпусе источник света (лазерный диод), драйвер лазерного диода, фотоприемник, контролер и память (рисунок 4). При этом габариты датчиков остаются весьма компактными (рисунок 5).

Рис. 4. Архитектура датчика VL53L1X

Рис. 4. Архитектура датчика VL53L1X

Рис. 5. Внешний вид датчика приближения на примере VL53L1X

Рис. 5. Внешний вид датчика приближения на примере VL53L1X

Подробный обзор датчиков приближения от ST можно найти в других публикациях [5].

МЭМС-микрофоны

МЭМС-микрофоны используются не только в мобильных устройствах, но и в системах распознавания речи, например в системах безопасности.

МЭМС-микрофоны производства STMicroelectronics имеют широкий рабочий диапазон 20…20 кГц, низкий уровень шумов 64 дБ и высокую чувствительность -26 дБ (таблица 7). Микрофоны IMP34DT05, MP34DT05-A и MP34DT06J имеют цифровой выход PDM. Микрофон MP23ABS1 имеет аналоговый выход.

Таблица 7. Характеристики МЭМС-микрофонов ST

Наименование Тип Диапазон, Гц Чувстви-
тельность, дБ
SNR, дБ PSRR, дБ Корпус Uпит, В
IMP34DT05 Цифровой 20…20000 -26 -72 HCLGA
4x3x1 мм
1,6…3,6
MP23ABS1 Аналоговый 20…20000 -38 64 60 RHLGA
2,65х3,5х1,08 мм
1,52…3,6
MP34DT05-A Цифровой 20…20000 -26 64 -72 HCLGA
4x3x1 мм
1,6…3,6
MP34DT06J Цифровой 20…20000 -26 64 -72 HCLGA
4x3x1 мм
1,6…3,6

Большим плюсом данных микрофонов являются также низкий уровень искажений и компактные габариты (рисунок 6).

Рис. 6. Внешний вид и габариты микрофонов MP34DT05

Рис. 6. Внешний вид и габариты микрофонов MP34DT05

Магнитометры и цифровые компасы

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

STMicroelectronics предлагает трехосевые магнитные сенсоры, а также электронные компасы – комплексные датчики, объединяющие в одном корпусе трехосевой магнитометр и трехосеваой акселерометр (таблица 8). Все представленные датчики являются цифровыми и имеют поддержку SPI/I2C. Потребление датчиков в активном режиме составляет сотни мкА, а в режиме ожидания потребление падает до единиц мкА.

Подробный обзор магнитных датчиков от ST можно найти в других публикациях, например, здесь [6].

Таблица 8. Характеристики магнитных датчиков и электронных компасов STMicroelectronics

Наименование Тип Диапазон, g Диапазон, Гс Iпотр тип., мкА Iпотр мин., мкА Корпус Uпит, В
IIS2MDC Трехосевой магнитометр 49 1130 1,5 LGA
2x2x0,7 мм
1,71…3,6
ISM303DAC Трех осевой магнитометр, трехосевой акселерометр ±2; ±4; ±8; ±16 49 1180 2,5 LGA
2x2x1 мм
1,71…1,98
LIS2MDL Трех осевой магнитометр 50 200 1,5 LGA
2x2x0,7 мм
1,71…3,6
LIS3MDL  Трех осевой магнитометр 16 270 1 VFLGA
2x2x1 мм
1,9…3,6
LSM303AGR Трехосевой магнитометр, трехосевой акселерометр ±2; ±4; ±8; ±16 50 200 2 LGA
2x2x1 мм
1,71…3,6
LSM303AH Трехосевой магнитометр, трехосевой акселерометр ±2; ±4; ±8; ±16 30 200 2,5 LGA
2x2x1 мм
1,71…1,98
LSM303C Трехосевой магнитометр, трехосевой акселерометр ±2; ±4; ±8 16 270 6 LGA
2x2x1 мм
1,9…3,6

Инерционные модули

Инерционные модули – это комбинированные системы, которые объединяют в одном корпусе несколько инерционных датчиков (например, акселерометр и гироскоп).

Инерционные модули ST имеют на борту трехосевой гироскоп и трехосевой акселерометр, а также датчик температуры (в состав модуля LSM9DS1 дополнительно входит трехосевой магнитометр). Очевидными плюсами инерционных модулей являются компактные габариты, например, модуль LSM6DSO имеет размеры всего 2,5x3x0,86 мм, и это несмотря на то, что кроме сенсоров, в его состав входят АЦП, фильтры, система питания, система тактирования, регистры, FIFO и контроллеры интерфейсов (рисунок 7).

Рис. 7. Структурная схема LSM6DSO (XL = акелерометр, UI = пользовательский интерфейс)

Рис. 7. Структурная схема LSM6DSO (XL = акелерометр, UI = пользовательский интерфейс)

Подробный обзор инерционных модулей от ST можно найти в других публикациях на нашем сайте, например, здесь [7].

Таблица 9.  Характеристики инерционных модулей STMicroelectronics

Наименова-
ние
Тип Диапа-
зон, g
Диапа-
зон, °/с
Плотность шума тип., мкg/√Гц Плотность шума тип., °/с/√Гц Iпотр тип., мА Iпотр мин., мкА Корпус Uпит, В
ISM330DHCX Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 100 VFLGA
2,5x3x0,86 мм,
P.5
0,475х0,25
1,71…3,6
ASM330LHH Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 0,0038 3 VFLGA
2,5x3x0,86 мм,
P.5
0,475х0,25
1,71…3,6
ISM330DLC Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 75 0,0038 750 10 VFLGA
2,5x3x0,86 мм,
P.5
0,475х0,25
1,71…3,6
LSM6DS3 Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 90 0,007 1250 6 VFLGA
2,5x3x0,86 мм
1,71…3,6
LSM6DS33 Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 90 0,007 1250 6 VFLGA
3x3x0,86 мм
1,71…3,6
LSM6DS3H Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 90 0,006 1100 6 VFLGA
2,5x3x0,86 мм
1,71…3,6
LSM6DS3TR-C Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 90 0,005 900 3 VFLGA
2,5x3x0,86 мм,
P.5
0,475х0,25
1,71…3,6
LSM6DS3US Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 90 0,006 1100 6 VFLGA
2,5x3x0,86 мм
1,71…3,6
LSM6DSL Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 80 0,004 650 3 VFLGA
2,5х3х0,86 мм,
P.5
0,475х0,25
1,71…3,6
LSM6DSM Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 75 0,0038 650 3 VFLGA
2,5x3x0,86 мм,
P.5
0,475х0,25
1,71…3,6
LSM6DSO Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 70 0,0038 550 3 VFLGA
2,5x3x0,86 мм,
P.5
0,475х0,25
1,71…3,6
LSM6DSOX Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 70 0,0038 550 3 VFLGA
2,5x3x0,86 мм,
P.5
0,475х0,25
1,71…3,6
LSM6DSR Трехосевой гироскоп, трехосевой акселерометр ±2; ±4; ±8; ±16 2000 0,0038 1200 3 VFLGA
2,5x3x0,86 мм,
P.5
0,475х0,25
1,71…3,6
LSM9DS1* Трехосевой гироскоп, трехосевой акселерометр, трехосевой магнитометр ±2; ±4; ±8; ±16 2000 TFLGA
3,5x3x1 мм
1,9…3,6
* – Диапазон 16 Гс.

NFC-память с двойным интерфейсом

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

STMicroelectronics предлагает широкий выбор микросхем памяти с двойным интерфейсом. Эти микросхемы могут выступать в качестве динамических NFC-меток (таблица 10). Между собой представленные модели различаются объемом памяти, интерфейсом (I2C или ШИМ), диапазоном действия, возможностью питания от поля ридера.

Подробный обзор NFC-памяти от ST можно найти в других публикациях, например, здесь [8].

Таблица 10. Параметры NFC-памяти ST

Наименование Объем памяти, байт Интерфейс Диапазон, м Пароль, бит Питание от поля Корпус Uпит, В
M24LR04E-R 4096 I2C 1,5 32 + SO8, TSSOP8, UFDFPN 1,8…5,5
M24LR16E-R 16384 I2C 1,5 32 + SO8, TSSOP8, UFDFPN 1,8…5,5
M24LR64E-R 65536 I2C 1,5 32 + SO8, TSSOP8, UFDFPN 1,8…5,5
M24SR02-Y 2048 I2C 0,1 128 SO8, TSSOP8, UFDFPN 2,7…5,5
M24SR04-G 4096 I2C 0,1 128 GOLD BUMPED DICE, UFDFPN 2,4…5,5
M24SR04-Y 4096 I2C 0,1 128 SO8, TSSOP8, UFDFPN 2,7…5,5
M24SR16-Y 16384 I2C 0,1 128 SO8, TSSOP8, UFDFPN 2,7…5,5
M24SR64-Y 65536 I2C 0,1 128 SO8, TSSOP8, UFDFPN 2,7…5,5
ST25DV02K-W1 2048 1 x PWM 1,5 32/64 SO8, TSSOP8 1,8…5,5
ST25DV02K-W2 2048 2 x PWM 1,5 32/64 SO8, TSSOP8 1,8…5,5
ST25DV04K 4096 I2C 1,5 64 + SO8, TSSOP8, UFDFPN 0, UFDFPN, US WF V.I. 1,8…5,5
ST25DV16K 16384 I2C 1,5 64 + SO8, TSSOP8, UFDFPN 1,8…5,5
ST25DV64K 65536 I2C 1,5 64 + SO8, TSSOP8, UFDFPN 1,8…5,5

STM32G0 – идеальный выбор для систем с датчиками

Компания STMicroelectronics предлагает широкий выбор микроконтроллеров STM32: от сверхпроизводительных STM32H7 до бюджетных STM32G0 (рисунок 1). При этом именно микроконтроллеры STM32G0 во многих случаях становятся идеальным выбором для построения систем с датчиками. Преимуществами STM32G0 являются:

  • высокая производительность;
  • большой объем памяти;
  • невысокая цена;
  • наличие необходимых интерфейсов и периферии для работы с датчиками;
  • возможность работы с различными проводными и беспроводными каналами связи;
  • малое потребление;
  • широкий выбор корпусных исполнений;
  • высокий уровень надежности;
  • высокий уровень безопасности;
  • широкий выбор средств разработки и отладки.

Рассмотрим эти преимущества STM32G0 подробнее.

Производительность, память, цена. Все микроконтроллеры семейства STM32G0 построены на базе производительного 32-битного процессорного ядра ARM Cortex-M0+ с максимальной тактовой частотой 64 МГц. В настоящий момент на рынке представлены модели с объемом Flash-памяти до 128 кбайт и ОЗУ до 36 кбайт (таблица 11). Производительности и объема памяти STM32G0 хватит для работы с любыми типами датчиков в большинстве приложений.

Таблица 11. Номенклатура микроконтроллеров STM32G0

Наименование Fмакс, МГц Flash, кБайт ОЗУ, кБайт AES TRNG Uпит, В Tраб, °C Корпус
STM32G030C6T6 64 32 8 2…3,6 -40…85 LQFP 48
STM32G030C8T6 64 64 8 2…3,6 -40…85 LQFP 48
STM32G030F6P6 64 32 8 2…3,6 -40…85 TSSOP 20
STM32G030K6T6 64 32 8 2…3,6 -40…85 LQFP 32
STM32G030K8T6 64 64 8 2…3,6 -40…85 LQFP 32
STM32G031C6T6 64 32 8 1,7…3,6 -40…85 LQFP 48
STM32G031C8T6 64 64 8 1,7…3,6 -40…85 LQFP 48
STM32G031C6U6 64 32 8 1,7…3,6 -40…85 UFQFPN 48
STM32G031C8U6 64 64 8 1,7…3,6 -40…85 UFQFPN 48
STM32G031F4P6 64 32 4 1,7…3,6 -40…85 TSSOP 20
STM32G031F6P6 64 32 8 1,7…3,6 -40…85 TSSOP 20
STM32G031F8P6 64 64 8 1,7…3,6 -40…85 TSSOP 20
STM32G031G6U6 64 32 8 1,7…3,6 -40…85 UFQFPN 28
STM32G031G8U6 64 64 8 1,7…3,6 -40…85 UFQFPN 28
STM32G031K4T6 64 32 4 1,7…3,6 -40…85 LQFP 32
STM32G031K6T6 64 32 8 1,7…3,6 -40…85 LQFP 32
STM32G031K8T6 64 64 8 1,7…3,6 -40…85 LQFP 32
STM32G031K6U6 64 32 8 1,7…3,6 -40…85 UFQFPN 32
STM32G031K8U6 64 64 8 1,7…3,6 -40…85 UFQFPN 32
STM32G071C8T6 64 64 36 1,7…3,6 -40…85 LQFP 48
STM32G071CBT6 64 128 36 1,7…3,6 -40…85 LQFP 48
STM32G071C8U6 64 64 36 1,7…3,6 -40…85 UFQFPN 48
STM32G071CBU6 64 128 36 1,7…3,6 -40…85 UFQFPN 48
STM32G070C8T6 64 64 36 2…3,6 -40…85 LQFP 48
STM32G070CBT6 64 128 36 2…3,6 -40…85 LQFP 48
STM32G070KBT6 64 128 36 2…3,6 -40…85 LQFP 32
STM32G070RBT6 64 128 36 2…3,6 -40…85 LQFP 64
STM32G071E8Y6 64 64 36 1,7…3,6 -40…85 WLCSP 25L
STM32G071EBY6 64 128 36 1,7…3,6 -40…85 WLCSP 25L
STM32G071G8U6 64 128 36 1,7…3,6 -40…85 UFQFPN 28
STM32G071GBU6 64 128 36 1,7…3,6 -40…85 UFQFPN 28
STM32G071GBU3 64 128 36 1,7…3,6 -40…125 UFQFPN 28
STM32G071KBT6 64 128 36 1,7…3,6 -40…85 LQFP 32
STM32G071K8U6 64 64 36 1,7…3,6 -40…85 UFQFPN 32
STM32G071KBU6 64 128 36 1,7…3,6 -40…85 UFQFPN 32
STM32G071RBI6 64 64 36 1,7…3,6 -40…85 UFBGA
STM32G071RBT6 64 128 36 1,7…3,6 -40…85 LQFP 64
STM32G081RBT6 64 128 36 + + 1,7…3,6 -40…85 LQFP 64

Существуют три линейки микроконтроллеров STM32G0:

  • ValueLine – бюджетные линейки с самым скромным набором периферии (пример, STM32G070RB);
  • AccessLine – линейки с базовым набором периферии (пример, STM32G071RB);
  • AccessLine&Encryption – линейки с базовым набором периферии и функциями криптографии (пример, STM32G081RB).

Примеры конкретных представителей линеек, а также сравнение их характеристик можно найти в таблице 12.

Таблица 12. Характеристики представителей различных линеек STM32G0

Характеристики STM32G070RB STM32G071RB STM32G081RB
Процессор ARM Cortex-M0+ ARM Cortex-M0+ ARM Cortex-M0+
Частота процессора, МГц До 64 До 64 До 64
Flash, кбайт 128 128 128
SRAM, кбайт 36 36 36
Частота внешнего резонатора, МГц 4…48 4…48 4…48
Встроенные RC-осцилляторы 16 МГц, 32 кГц 16 МГц, 32 кГц 16 МГц, 32 кГц
DMA 7-канальный 7-канальный 7-канальный
GPIO 59 60 60
АЦП 12-битный, 16 каналов,
2,5 MSPS
12-битный, 16 каналов,
2,5 MSPS
12-битный, 16 каналов,
2,5 MSPS
ЦАП 2 x 12-бит 2  x 12-бит
Аналоговые компараторы 2 2
Число таймеров 11 14 14
RTC + + +
I2C 2 2 2
USART 4 4 4
SPI 2 2 2
HDMI CEC 1 1
LPUART 1 1
LPTIM 2 2
Контроль питания POR/PDR POR/PDR/BOR/PVD POR/PDR/BOR/PVD
CRC + + +
TRNG +
AES 128/256 бит
96-битный уникальный идентификатор ID + +
Напряжение питания, В 2,0…3,6 1,7…3,6 1,7…3,6
Диапазон рабочих температур, °С -40…85 -40…85/125 -40…85/125

В настоящий момент стоимость STM32G0 сопоставима со стоимостью 8-битных и 16-битных микроконтроллеров, обладающих меньшей производительностью и ограниченным выбором периферии.

Наличие необходимых интерфейсов и периферии для работы с датчиками. Из представленного выше описания датчиков от ST становится ясен минимальный набор интерфейсов и периферии.

Для взаимодействия с подавляющим большинством цифровых сенсоров будет достаточно интерфейсов SPI и I2C. Как видно из таблицы 12, на борту у всех микроконтроллеров STM32G0 можно найти сразу по два встроенных интерфейса SPI и I2C.

Многие цифровые датчики поддерживают работу с прерываниями. Для обнаружения сигналов прерываний контроллеры STM32G0 могут использовать порты ввода-вывода и линии EXTI. Не стоит забывать о матрице межсоединений IMX и DMA-контроллере, которые позволяют получать и накапливать данные от сенсоров даже без участия процессорного ядра.

Датчики с аналоговыми выходами, например акселерометр LIS344ALH, микрофон MP23ABS1 и многие датчики температуры требуют АЦП для оцифровки сигналов. В составе STM32G0 есть 16-канальный 12-битный АЦП с частотой преобразования до 2,5 MSPS. Кроме того, разрядность АЦП может быть увеличена до 16 бит за счет встроенного блока передискретизации. Точности и производительности АЦП STM32G0 будет достаточно для большинства приложений.

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

Для работы с цифровыми МЭМС-микрофонами требуется интерфейс PDM. Это также не является проблемой для STM32G0, так как контролер SPI поддерживает интерфейс I2S, который в свою очередь позволяет принимать и преобразовывать поток данных от микрофонов.

Возможность работы с различными проводными и беспроводными каналами связи. В большинстве приложений будет недостаточно просто получить данные от сенсоров. Далее информацию требуется передать в облако или в управляющий узел сети. Для этого могут использоваться различные проводные и беспроводные интерфейсы. Компания ST выпускает широкий спектр проводных и беспроводных приемопередатчиков. Например, для работы с приемопередатчиками RS-485/RS-422 у STM32G0 есть сразу четыре интерфейса UART, а для взаимодействия с субгигагерцевым модулем SPIRIT1 могут быть использованы SPI, I2C или UART.

Низкое потребление. Микроконтроллеры STM32G0 используют процессорное ядро ARM Cortex-M0+, которое разрабатывалось специально для создания устройств с малым потреблением. В активном режиме работы динамическое потребление микроконтроллеров составляет около 100 мкА/МГц (при отключенной периферии). Кроме того, пользователям предлагается сразу семь режимов пониженного потребления (с учетом Low-power run). Подробное описание режимов потребления можно найти в ранее опубликованных статьях, например, здесь [9].

Широкий выбор корпусных исполнений. Обычно при построении автономных датчиков требуются микроконтроллеры с небольшим количеством выводов, однако бывают и исключения. В настоящий момент STM32G0 поставляются в корпусных исполнениях с числом выводов от 20 (TSSOP-20) до 64 (LQFP-64) (таблица 11). Кроме того, в будущем планируется появление моделей с 8…100 выводами. Таким образом, потребитель наверняка сможет выбрать себе подходящую модель микроконтроллера.

Высокий уровень надежности. Микроконтроллеры STM32G0 отличаются высокой надежностью. Они способны работать в расширенном диапазоне температур (некоторые модели – до 125°С) и характеризуются повышенной устойчивостью к помехам:

  • класс устойчивости 2B, в соответствии с IEC 61000-4-2;
  • класс устойчивости 5A, в соответствии с IEC 61000-4-4;
  • класс устойчивости 2, в соответствии с ANSI/ESDA/JEDEC JS-001 (модель HBM) с испытательным напряжением 2000 В;
  • класс устойчивости С2a, в соответствии с ANSI/ESDA/JEDEC JS-002 (модель CDM) с испытательным напряжением 500 В;
  • класс устойчивости II к защелкиваниям (Static latch-up), в соответствии с EIA/JESD 78A.

Кроме того, микроконтроллеры имеют целый ряд других специализированных функций и блоков, позволяющих контролировать исправность микроконтроллера, среди них:

  • схемы контроля уровня напряжения питания POR/PDR/BOR/PVD;
  • система контроля тактового сигнала Clock security system (CSS), которая позволяет обнаруживать неполадки в работе внешнего резонатора HSE;
  • система контроля тактового сигнала LSECSS (Clock security system for LSE clock), которая позволяет обнаруживать неполадки в работе внешнего резонатора LSE;
  • функция контроля четности данных, хранящихся в ОЗУ;
  • система ECC (Error Code Correction), которая позволяет обнаруживать и исправлять одиночные поврежденные биты во Flash, кроме того существует возможность обнаружения двух поврежденных бит, но без локализации и исправления.

Благодаря наличию матрицы соединений IMX после обнаружения аварийных ситуаций микроконтроллер может быть переведен в безопасное состояние без участия процессорного ядра. Речь, например, идет об остановке таймеров, управляющих электродвигателями.

Высокий уровень безопасности. В данном случае под безопасностью подразумевается устойчивость микроконтроллеров к атакам и взломам. Подробный обзор функций безопасности проводится в руководстве «AN5156. Application note.Introduction to STM32 microcontrollers security» [10]. Взлом микроконтроллера может производиться с различными целями, такими как кража данных, вывод из строя, изменение режима работы, реверс-инжиниринг и так далее. Методы взлома также весьма разнообразны – от шпионских программ до физического вскрытия чипа. Для защиты от перечисленных воздействий STM32G0 предлагают целый ряд защитных инструментов (таблица 13).

Таблица 13. Защитные функции и блоки микроконтроллеров STM32G0

Параметр STM32G0
Ядро ARM Cortex M0+
RDP +
Дополнительная защита RDP Для дежурных регистров (+ backup registers)
WRP Блоки по 2 кбайт. Доступно определение двух областей
PCROP Блоки по 512 байт. Доступно определение двух областей
Secure area +
Firewall
MPU +
Unique Boot Entry + (Boot lock feature)
Tamper detection +
IWDG +
TRNG +
Device ID 96 bits +
HW Crypto TRNG, AES

Широкий выбор инструментов отладки. Микроконтроллеры STM32G0 входят в экосистему STM32 и предлагают широкий выбор аппаратных и программных инструментов разработки и отладки:

  • отладочные платы Discovery, Eval и Nucleo. Сейчас к услугам разработчиков предлагаются платы NUCLEO-G070RB, NUCLEO-G071RB, STM32G071B-DISCO и STM32G081B-EVAL. Скоро на рынке появятся платы STM32G0316-DISCO и NUCLEO-G031K8;
  • платы расширения X-NUCLEO, например, X-NUCLEO-IKS01A2, X-NUCLEO-6180XA1, X-NUCLEO-GNSS1A1 и другие;
  • STM32CubeMX – программа, предназначенная для генерации кода инициализации и расчета потребления тока микроконтроллера с удобным графическим интерфейсом [11];
  • бесплатные IDE: STM32CubeIDE и Atholic TrueStudio [12]. Кроме того, ARM Keil предоставляет бесплатную лицензию специально для работы с STM32G0;
  • коммерческие IDE, например, IAR и Cosmic;
  • программные пакеты и библиотеки для работы с датчиками ST;
  • ArduinoIDE, которое поддерживает работу с платами Nucleo, Discovery, а также платами расширения X-NUCLEO.

Благодаря существующим средствам разработки создание устройств с датчиками на базе STM32G0 существенно упрощается. В качестве примера рассмотрим работу STM32G0 с датчиком приближения VL53L1x. Для этого воспользуемся отладочной платой Nucleo-G071RB и платой расширения X-NUCLEO-53L1A1 (рисунок 8). В комплекте с платой X-NUCLEO-53L1A1 идут две дочерние платы с датчиками VL53L1x. Таким образом, в распоряжении пользователя оказываются сразу три датчика VL53L1x.

Рис. 8. Внешний вид плат Nucleo-G071RB и X-NUCLEO-53L1A1

Рис. 8. Внешний вид плат Nucleo-G071RB и X-NUCLEO-53L1A1

Пример 1 (Arduino): X_NUCLEO_53L1A1_HelloWorld

Если требуется решить простую задачу с минимальными затратами времени, сил и средств, то следует воспользоваться платформой Arduino. После установки библиотеки STM32duino [13] среда Arduino IDE позволяет работать со многими платами Nucleo и X-NUCLEO, в том числе с Nucleo-G071RB и X-NUCLEO-53L1A1.

Подробнее об установке STM32duino, добавлении библиотек плат расширения, а также запуске проектов с Nucleo можно прочитать здесь [14]. Чтобы использовать готовые примеры (скетчи) для X-NUCLEO-53L1A1, необходимо установить две Arduino-библиотеки: X-NUCLEO-53L1A1 [15] и VL53L1X [16] (рисунок 9).

Рис. 9. Установка библиотек X-NUCLEO-53L1A1 [15] и VL53L1X [16]

Рис. 9. Установка библиотек X-NUCLEO-53L1A1 [15] и VL53L1X [16]

Информацию по API для VL53L1X можно найти в заголовочном файле.

Самый простой пример для X-NUCLEO-53L1A1 называется X_NUCLEO_53L1A1_HelloWorld. В этом примере используются все три датчика VL53L1x. Датчики измеряют расстояния до объектов. Микроконтроллер считывает показания датчиков и отправляет их ПК по последовательному интерфейсу. Результаты можно наблюдать во встроенном терминале Arduino IDE (листинг 1).

Листинг 1. X_NUCLEO_53L1A1_HelloWorld (редактированный)



/* Includes ------------------------------------------------------------------*/

#include <Arduino.h>

#include <Wire.h>

#include <vl53l1x_x_nucleo_53l1a1_class.h>

#include <stmpe1600_class.h>

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

#include <stdint.h>

#include <assert.h>

#include <stdlib.h> 

#define DEV_I2C Wire 

#define SerialPort Serial 

// Компоненты

STMPE1600DigiOut *xshutdown_top;

STMPE1600DigiOut *xshutdown_left;

STMPE1600DigiOut *xshutdown_right;

VL53L1_X_NUCLEO_53L1A1 *sensor_vl53l1_top;

VL53L1_X_NUCLEO_53L1A1 *sensor_vl53l1_left;

VL53L1_X_NUCLEO_53L1A1 *sensor_vl53l1_right; 

/* Функция инициализации ------------------------------------------------------*/ 

void setup()

{

   // Светодиод.

   pinMode(13, OUTPUT); 

   // Инициализация последовательного интерфейса.

   SerialPort.begin(115200);

   SerialPort.println("Starting..."); 

   // Инициализация I2C

   DEV_I2C.begin(); 

   // Создание экземпляра VL53L1X (верхний) 

   xshutdown_top = new STMPE1600DigiOut(&DEV_I2C, GPIO_15, (0x42 * 2));

   sensor_vl53l1_top = new VL53L1_X_NUCLEO_53L1A1(&DEV_I2C, xshutdown_top, A2); 

   // Выключить верхний датчик VL53L1X.

   sensor_vl53l1_top->VL53L1_Off(); 

   // Создание экземпляра VL53L1X (левый)

   xshutdown_left = new STMPE1600DigiOut(&DEV_I2C, GPIO_14, (0x43 * 2));

   sensor_vl53l1_left = new VL53L1_X_NUCLEO_53L1A1(&DEV_I2C, xshutdown_left, D8); 

   // Выключить левый датчик VL53L1X.

   sensor_vl53l1_left->VL53L1_Off(); 

   // Создание экземпляра VL53L1X (правый)

   xshutdown_right = new STMPE1600DigiOut(&DEV_I2C, GPIO_15, (0x43 * 2));

   sensor_vl53l1_right = new VL53L1_X_NUCLEO_53L1A1(&DEV_I2C, xshutdown_right, D2); 

   // Выключить правый датчик VL53L1X.

   sensor_vl53l1_right->VL53L1_Off(); 

   // Инициализация датчиков

   sensor_vl53l1_top->InitSensor(0x10);

   sensor_vl53l1_left->InitSensor(0x12);

   sensor_vl53l1_right->InitSensor(0x14);

} 

// Основная функция

void loop()

{

   int status;

   uint8_t ready = 0;

   uint16_t distance; 

   // Выключить светодиод

   digitalWrite(13, LOW); 

   // Начало измерений

   sensor_vl53l1_top->VL53L1X_StartRanging();

   sensor_vl53l1_left->VL53L1X_StartRanging();

   sensor_vl53l1_right->VL53L1X_StartRanging(); 

   // Ожидаем завершения измерения верхнего датчика

 do

   {

      sensor_vl53l1_top->VL53L1X_CheckForDataReady(&ready);

   }

   while (!ready); 

   // Включить светодиод

   digitalWrite(13, HIGH); 

   // Считать показания

   status = sensor_vl53l1_top->VL53L1X_GetDistance(&distance); 

   if (status == VL53L1_ERROR_NONE)

   {

      // Передать данные по последовательному порту

      char report[64];

      snprintf(report, sizeof(report), "| Distance top [mm]: %d |", distance);

      SerialPort.println(report);

   } 

   // Сбросить флаг прерывания

   status = sensor_vl53l1_top->VL53L1X_ClearInterrupt(); 

   // Ожидаем завершения измерения левого датчика

   do

   {

      sensor_vl53l1_left->VL53L1X_CheckForDataReady(&ready);

   }

   while (!ready); 

   // Считать показания

   status = sensor_vl53l1_left->VL53L1X_GetDistance(&distance); 

   if (status == VL53L1_ERROR_NONE)

   {

      // Передать данные по последовательному порту.

      char report[64];

      snprintf(report, sizeof(report), "| Distance left [mm]: %d |", distance);

      SerialPort.println(report);

   } 

   // Сбросить флаг прерывания

   status = sensor_vl53l1_left->VL53L1X_ClearInterrupt(); 

   // Ожидаем завершения измерения правого датчика

   do

   {

      sensor_vl53l1_right->VL53L1X_CheckForDataReady(&ready);

   }

   while (!ready);

   // Считать показания

   status = sensor_vl53l1_right->VL53L1X_GetDistance(&distance);

   if (status == VL53L1_ERROR_NONE)

   {

      // Передать данные по последовательному порту.

      char report[64];

      snprintf(report, sizeof(report), "| Distance right [mm]: %d |", distance);

      SerialPort.println(report);

   }

   // Сбросить флаг прерывания

   status = sensor_vl53l1_right->VL53L1X_ClearInterrupt();

   //Остановить измерения

   sensor_vl53l1_top->VL53L1X_StopRanging();

   sensor_vl53l1_left->VL53L1X_StopRanging();

   sensor_vl53l1_right->VL53L1X_StopRanging();

} 

С одной стороны, чтобы скачать нужные библиотеки и запустить предложенный пример, пользователю потребуется всего пара минут. С другой – отладочные платы имеют вполне доступную стоимость. Таким образом, Arduino оказывается идеальным выбором для создания простых и бюджетных проектов. Если же требуется разработка сложного или ответственного проекта, и возможностей Arduino не хватает, то следует использовать профессиональные IDE.

Пример 2 (с STM32CubeIDE): измеряем расстояние до объекта

Рассмотрим еще один простой пример с VL53L1x, но реализованный с помощью STM32CubeIDE. Будем измерять расстояние до объекта и передавать данные по последовательному порту. Для запуска примера нам будет достаточно тех же отладочных плат. Кроме того, нам понадобится библиотека VL53L1X ULD API (STSW-IMG009) [17].

Библиотека ULD API является облегченной версией библиотеки API-функций для VL53L1x. Если предыдущая версия библиотеки включала 35 файлов, то новая версия содержит только четыре. Кроме того, библиотека содержит драйверы и примеры для STM32F401. Подробное описание API-функций данной библиотеки можно найти в руководстве «UM2510A. User manual. A guide to using the VL53L1X ultra lite driver» [18].

Рассмотрим запуск примера для Nucleo-G071RB по шагам.

Шаг 1. Скачиваем последнюю версию библиотеки VL53L1X ULD API здесь [17], устанавливаем STM32CubeMX и STM32CubeIDE, если они еще не установлены [19, 20].

Шаг 2. Настраиваем конфигурацию STM32G071RB в STM32CubeMX. Для этого немного схитрим и воспользуемся файлом конфигурации STM32F401RE из готового примера, входящего в состав STSW-IMG009.

Открываем директорию со скачанной библиотекой. Находим папку en.STSW-IMG009\Example. Запускаем файл NucleoF401RE_53L1_Expansion.ioc в STM32CubeMX. В данном случае нас интересует только конфигурация интерфейсов I2C1 (связь с датчиком) и USART2 (связь с ПК). Остальные выводы значения не имеют, в том числе – сигнал прерывания VL53L1X_INT, так как мы будем использовать программный поллинг (рисунок 10).

Рис. 10. Конфигурация выводов STM32F401RE в исходном примере

Рис. 10. Конфигурация выводов STM32F401RE в исходном примере

Создаем новый проект для STM32G071RB с корпусом LQFP-64. Дублируем конфигурацию для I2C1 и USART2, используя те же порты (рисунок 11). Разумеется, можно было бы применить функцию импорта проектов STM32Cube, но это было бы не наглядно и небезопасно, так как миграция ведется между разными семействами STM32.

Рис. 11. Конфигурация выводов STM32G071RB

Рис. 11. Конфигурация выводов STM32G071RB

Шаг 3. Задаем параметры проекта на вкладке Project Manager: название, путь и вид IDE (например, SW4STM32). Не меняя остальные настройки, генерируем проект.

Шаг 4. Далее необходимо скопировать файлы драйвера VL53L1X в ту же папку, где хранится файл main.c сгенерированного проекта:

  • из папки API\core копируем файлы VL53L1X_API.h, VL53L1X_API.с;
  • из папки API\platform копируем файлы vl53l1_platform.h, vl53l1_platform.c, vl53l1_types.h.

Шаг 5. Открываем сгенерированный проект и добавляем файлы драйвера (рисунок 12).

Рис. 12. Добавляем файлы драйвера в проект

Рис. 12. Добавляем файлы драйвера в проект

Шаг 6. STM32Cube сгенерировал проект, в том числе файл main.c. В этом файле уже содержатся функции инициализации I2C, UART, GPIO и системы тактирования. Теперь в этот файл нужно добавить пользовательский код.

Открываем main.c. Помещаем пользовательский код в области USER CODE. В данном случае код был добавлен в следующие области: USER CODE BEGIN, USER CODE BEGIN PV, USER CODE BEGIN 1, USER CODE BEGIN 2, USER CODE BEGIN WHILE.

Так как код генерируется автоматически, то русскоязычными комментариями снабжены только строки пользовательского кода (листинг 2).

Листинг 2. Работа с датчиком VL53L1X



/* Includes ------------------------------------------------------------------*/

#include "main.h"

/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

// Нужно добавить библиотеку для использования функций задержки HAL

#include "stm32g0xx_hal.h"

// Библиотека VL53L1X
#include "VL53L1X_API.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/

/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/

/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

I2C_HandleTypeDef hi2c1;

UART_HandleTypeDef huart2;

/* USER CODE BEGIN PV */

uint16_t  dev=0x52; // Переменная, содержащая адрес датчика по умолчанию 52

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_I2C1_Init(void);

static void MX_USART2_UART_Init(void);

/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**

* @brief  The application entry point.

* @retval int

*/

int main(void)

{

/* USER CODE BEGIN 1 */

// Инициализируем переменные

uint8_t  state=0;

int status=0;

uint8_t dataReady;

uint16_t Distance;

uint16_t SignalRate;

uint16_t AmbientRate;

uint16_t SpadNum;

uint8_t RangeStatus;

/* USER CODE END 1 */

/* MCU Configuration--------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */

HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */

SystemClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */

MX_GPIO_Init();

MX_I2C1_Init();

MX_USART2_UART_Init();

/* USER CODE BEGIN 2 */

// Ожидаем готовности устройства

while(state){

status = VL53L1X_BootState(dev, &state); // проверяем готовность

HAL_Delay(2); // Задержка

}

// Инициализация датчика

status = VL53L1X_SensorInit(dev);

// В качестве примера изменяем настройки по умолчанию

status = VL53L1X_SetDistanceMode(dev, 2); // 1 (до 1,3 м) или 2 (до 4 м)

status = VL53L1X_SetInterMeasurementInMs(dev, 100); // Время измерения в мс

// Разрешаем измерения

status = VL53L1X_StartRanging(dev);

/* USER CODE END 2 */

/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{

// Ждем готовности данных – обычный полинг

while (dataReady == 0){

status = VL53L1X_CheckForDataReady(dev, &dataReady);// Ждем готовности данных

HAL_Delay(2); // Задержка

}

dataReady = 0;

// Считываем результаты измерений

status = VL53L1X_GetRangeStatus(dev, &RangeStatus); // Проверяем наличие ошибок

status = VL53L1X_GetDistance(dev, &Distance); // Расстояние до объекта в мм

status = VL53L1X_GetSignalRate(dev, &SignalRate); // Число килоимпульсов в секунду

status = VL53L1X_ClearInterrupt(dev); // Очищаем флаг прерывания

// Посылаем данные в порт

printf("%u, %u, %u, %u, %u\n", RangeStatus, Distance, SignalRate, AmbientRate,SpadNum);

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

}

/* USER CODE END 3 */

}

Шаг 7. Запускаем выполнение программы и наблюдаем результаты в терминале.

Заключение

В современных электронных устройствах используют различные типы сенсоров. Компания ST производит широкий спектр датчиков, среди них: акселерометры, гироскопы, датчики влажности и температуры HTS221, датчики давления, приближения, температуры, МЭМС-микрофоны, магнитометры и цифровые компасы, инерционные модули, NFC-память с двойным интерфейсом. Датчики производства ST отличаются доступной ценой, малыми габаритами, низким потреблением.

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

При создании устройств с датчиками на базе STM32G0 разработчики могут использовать как Arduino IDE, так и профессиональные IDE (Keil, IAR, STM32CubeIDE). При работе с профессиональными IDE полезным инструментом становится бесплатный кодогенератор STM32CubeMX.

Литература

  1. Как работать с MEMS-акселерометром. Пошаговое руководство на основе LIS3DHH.
  2. LIS2DW12: новый акселерометр с ультранизким энергопотреблением.
  3. Атмосфера под контролем: датчики влажности HTS221 и атмосферного давления LPS25.
  4. Выход и аналоговый, и цифровой: датчики температуры компании STMicroelectronics.
  5. Для 3D-систем: датчик света и приближения VL6180.
  6. Электронные капитаны: iNEMO – новое семейство МЭМС-систем на кристалле.
  7. Новый инерционный модуль с рекордно малым потреблением в активном режиме.
  8. От МЭМС – в «облако»: беспроводной NFC-датчик параметров окружающей среды.
  9. STM32G0 – особенности периферии, ядра, архитектуры и ее отличие от STM32F0
  10. Application note. Introduction to STM32 microcontrollers security.
  11. Простые бесплатные программные средства разработки ПО для STM32.
  12. Новая доступная среда разработки для микроконтроллеров STM32.
  13. STM32duino на GitHub.
  14. Платы Nucleo на базе STM32G0: чего можно добиться с помощью связки Nucleo и Arduino
  15. Библиотека X-NUCLEO-53L1A1 для Arduino.
  16. Библиотека VL53L1X для Arduino.
  17. STSW-IMG009. VL53L1X ULD API (Ultra Lite Driver Application Programming Interface).
  18. User manual. A guide to using the VL53L1X ultra lite driver.
  19. Кодогенератор STM32CubeMX.
  20. Среда STM32CubeIDE.
  21. www.st.com.
•••

Наши информационные каналы

О компании ST Microelectronics

Компания STMicroelectronics является №1 производителем электроники в Европе. Компоненты ST широко представлены в окружающих нас потребительских товарах – от iPhone до автомобилей разных марок. Лидеры индустриального рынка выбирают компоненты ST за их надежность и выдающиеся технические параметры. В компании ST работает 48 000 сотрудников в 35 странах. Производственные мощности расположены в 12 странах мира. Более 11 тысяч сотрудников заняты исследованиями и разработками – инновационное лидерство ...читать далее

Товары
Наименование
HTS221TR (ST)
VL53L0CXV0DH/1 (ST)
VL6180XV0NR/1 (ST)
LIS344ALH (ST)
AIS1120SX (ST)
AIS2120SX (ST)
H3LIS100DL (ST)
NUCLEO-G070RB (ST)
NUCLEO-G071RB (ST)
STM32G071B-DISCO (ST)
STM32G081B-EVAL (ST)
STM32G0316-DISCO (ST)
NUCLEO-G031K8 (ST)
X-NUCLEO-IKS01A2 (ST)
X-NUCLEO-6180XA1 (ST)
X-NUCLEO-GNSS1A1 (ST)
AIS2DW12TR (ST)
AIS328DQ (ST)
AIS3624DQTR (ST)
H3LIS200DL (ST)