Подключение акселерометра, выполненного по MEMS-технологии, к микроконтроллеру STM32F407VGT6 | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 28 декабря, печатный экземпляр отправим 1 января.

Опубликовать статью в журнале

Библиографическое описание:

Ивашинников, Б. А. Подключение акселерометра, выполненного по MEMS-технологии, к микроконтроллеру STM32F407VGT6 / Б. А. Ивашинников, М. В. Коваленко, О. М. Лесков. — Текст : непосредственный // Молодой ученый. — 2016. — № 17 (121). — С. 40-44. — URL: https://moluch.ru/archive/121/33523/ (дата обращения: 16.12.2024).



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

STM32F4DISCOVERY — высокопроизводительная исследовательская плата для STM32F4 позволяет изучать возможности микроконтроллера STM32F4 и легко разрабатывать собственные приложения. В комплект поставки входит все необходимое, чтобы немедленно начинать разработки, как новичкам, так и опытным пользователям. Основанная на STM32F407VGT6, плата имеет интегрированный отладчик ST-LINK/V2, два ST MEMS, цифровой измеритель ускорения (акселерометр) и цифровой микрофон, один аудио ЦАП с интегрированным драйвером громкоговорителя, работающим в классе D, светодиоды и кнопки, а также разъем USB OTG micro-AB.

MEMS сенсоры подразделяются на два вида: сенсоры — измерительные устройства, которые преобразуют те или иные физические воздействия в электрический сигнал, и актуаторы (исполнительные устройства) — системы, которые занимаются обратной задачей, то есть преобразуют электрические сигналы в физические воздействия.

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

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

http://www.3dnews.ru/assets/external/illustrations/2010/10/13/600098/mems-accelerometer-1.jpg

Рис. 1. Устройство конденсаторного датчика

На отладочной плате STM32F4DISCOVERY установлен трех-осевой акселерометр LIS3DSH, способный определять ускорение с точностью до 0.06 mg. Данный акселерометр подключается к микроконтроллеру(МК) по шине SPI, после настройки которой, посылая необходимые данные в регистры, производится установка таких параметров, как: пределы измерения, скорость опроса, настройка полосового фильтра для уменьшения «дребезга» показаний и т. д.

Для конфигурации необходимых режимов работы портов МК, а также настройки тактирования используется специальную утилиту STM32CubeMX, после чего создается код рабочей программы в среде Keil µVision 5.

Кроме портов SPI и светодиодно необходимо настроить вывод CS, который отвечает за подключение акселерометра.

Итоговая настройка МК в утилите STM32CubeMX показана на рисунке 2. Для общения с акселерометром настроена шина SPI1, а для индикации и проверки работоспособности программы 4 светодиода, показывающих в какую строну наклонен акселерометр.

Рис. 2. Настройка МК в программе STM32CubeMX

После чего сгенерирован код проекта для среды Keil µVision 5. Листинг кода, отвечающего за инициализации SPI1:

static void MX_SPI1_Init(void)

{

hspi1.Instance = SPI1;

hspi1.Init.Mode = SPI_MODE_MASTER;

hspi1.Init.Direction = SPI_DIRECTION_2LINES;

hspi1.Init.DataSize = SPI_DATASIZE_8BIT;

hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;

hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;

hspi1.Init.NSS = SPI_NSS_SOFT;

hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;

hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;

hspi1.Init.TIMode = SPI_TIMODE_DISABLE;

hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;

hspi1.Init.CRCPolynomial = 10;

if (HAL_SPI_Init(&hspi1) != HAL_OK)

{

Error_Handler();

}

}

Для настройки режима работы акселерометра необходимо записать в данные в регистры акселерометра. Временные диаграммы протокола показаны на рисунке 3.

Рис. 3. Протокол SPI

Для обращения к акселерометру перед отправкой адреса регистра информационного пакета выставляем выход микроконтроллера CS = 0, поскольку на акселерометре данный вывод инвертирован.

Для записи информации в регистр необходимо сначала выдать на шину адрес этого регистра, при этом при чтении необходимо установить бит RW = 1, а при записи установить бит RW = 0.

После этого по SPI за 7 тактов передается адрес внутреннего регистра акселерометра, после чего в зависимости от режима чтение/запись в течении 8 тактов выдается новое значение регистра, либо посылается пустой байт, после которого необходимо считать текущее значение опрашиваемого регистра. По окончанию цикла чтения/записи выставляем CS = 1.

За настройку скорости работы акселерометра и включение/выключение осей отвечает регистр CTRL_REG4, с адресом 0x20. Биты данного регистра приведены на рисунке 4.

Рис. 4. Регистр CTRL_REG4

Старшие 4 бита отвечают за настройку скорости опроса внутренних схем датчика. Бит BDU выключает или отключает обновление младшего регистра данных, при условии, что старший бит данных оси акселерометра был считан. Три младших бита включают или выключают оси X,Y и Z.

Для нашего случая установим скорость опроса датчика = 50Hz, BDU = 0 и включим оси X и Y. В этом случае нам требуется записать в регистр бит 0x53.

Листинг функции, отвечающей за инициализацию акселерометра:

void Acc_Init(void)

{

uint8_t Reg_ctrl_4 = 0x20;

uint8_t acc_set = 0x53;

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);

HAL_SPI_Transmit(&hspi1, &Reg_ctrl_4, 1, 100);

HAL_SPI_Transmit(&hspi1, &acc_set, 1, 100);

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);

}

После инициализации акселерометра можно приступить к считыванию данных.

Акселерометр выдает 16-битные значения, считывание которых происходит путем обращения к двум 8-битным регистрам: старшему и младшему. При этом максимальное значение равняется 0хFFFF, что соответствует максимальному ускорению, совпадающему с положительным направлением оси. По умолчанию акселерометр настроен на пределы измерения -+2g. Это означает, что значению 0xFFFF соответствует ускорение 2g, а 0x0000 соответствует -2g. Данную особенность необходимо учесть при обработке данных, а именно, в зависимости от полученного значения либо «опустить», либо «поднять» значение на 0x8000, при этом установив флаг, означающий положительное значение или отрицательное в 1 или 0 соответственно.

Для чтения информации считываем значения старшего и младшего регистров, после чего производим сдвиг старшего на 8 бит влево и присваиваем младшим битам значения младшего регистра.

Адреса регистров данных для осей X и Y приведены на рисунке 5.

Рис. 5. Адреса регистров данных

Для чтения значений данных регистров устанавливаем бит RW = 1. Стоит отметить, что при работе с библиотекой HAL нет необходимости посылать пустой бит для считывания данных, поскольку функция считывания делает это самостоятельно.

Листинг функций получения и обработки значений регистров для оси X приведены ниже.

void X_read(void)

{

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);

HAL_SPI_Transmit(&hspi1, &X_read_H, 1, 100);

HAL_SPI_Receive(&hspi1, &OUT_X_H, 1, 100);

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);

HAL_SPI_Transmit(&hspi1, &X_read_L, 1, 100);

HAL_SPI_Receive(&hspi1, &OUT_X_L, 1, 100);

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);

X_16bit = ((OUT_X_H<<8)|(OUT_X_L));

}

void X_Proc(void)

{

if (X_16bit >= 0x8000){

X_norm = X_16bit - 0x8000;

zeroX = 1;

}else{

X_norm = 0x8000 - X_16bit;

zeroX = 0;

}

}

После выполнения данной функции глобальным переменным X_norm и zeroX присваиваются значения текущего ускорения и направления, по которому оно действует. Для оси Y функции выглядят аналогично.

После этого в зависимости от полученных данных зажигаем необходимые светодиоды.

if(X_norm <= 0x6000)

{

if(zeroX == 1)

{

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET);

}

else

{

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET);

}

else{

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET);

}

}

На этом написание управляющей программы завершено. После компилирования и загрузки программы во flesh-память убеждаемся в правильности написания программы.

Литература:

1. Лабораторный практикум для изучения микроконтроллеров архитектуры ARM Cortex-M4 на базе отладочного модуля STM32F4 Discovery / Бугаев В. И., Мусиенко М. П., Крайнык Я. М. — Москва-Николаев: МФТИ-ЧГУ, 2013. — 71 с.

2. Мартин Т. // Применение микроконтроллеров AVR: схемы алгоритмы программы, 2-е изд. испр. / Мартин Т. — Москва: Издательский дом «Додэка-XXI» 2006. — 288с.: ил.

3. STMicroelectronics. MEMS digital output motion sensor: ultra-low-power high-performance three-axis «nano» accelerometer / DocID022405 Rev 2 2015.

4. STMicroelectronics. RN0094 Release note. STM32CubeMX release 4.16.0 / DocID025911 Rev 23 2016.

Основные термины (генерируются автоматически): GPIOE, SPI, BDU, MEMS, акселерометр, бит, регистр, HAL, OTG, ST-LINK.


Похожие статьи

Измерение угла поворота диска с помощью энкодера и микроконтроллера Atmega16A

В данной статье будет рассмотрен метод измерения угла поворота диска с помощью энкодера и микроконтроллера Atmega16A. Вначале будут рассмотрены общие сведения об энкодерах, их классификация, далее будет рассмотрена непосредственно сама прошивка для м...

Модернизация робота-пылесоса Samsung Powerbot SR20H9050U

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

Разработка портативной метеостанции на базе микроконтроллера ESP8266

В данной статье излагаются взгляды на решение проблемы получения метеоданных при помощи специализированных станций. Показано преимущество использования цифровых метеостанций над аналоговыми устройствами. Особое внимание отводится описанию сборки и на...

Управление мобильным роботом посредством сигналов головного мозга

Данная статья посвящена обзору возможностей применения нейрокомпьютерного интерфейса NeuroSky Mindwave Mobile для управления мобильным роботом. Проведенное исследование позволяет утверждать, что NeuroSky MindWave Mobile позволяет фиксировать определе...

Проектирование приложения на ПК для полуавтоматизированного управления генератором сигналов различной формы

В данной статье выполнено обоснование актуальности и результат проектирования приложения на ПК для полуавтоматизированного управления генератором сигналов различной формы на основе микроконтроллера. Актуальность исследования обусловлена тем, что упра...

Микропроцессорный измеритель коэффициента температуропроводности материалов

В работе представлены краткие теоретические сведения о применяемом датчике и представлена принципиальная схема модуля обработки информации на основе микроконтроллера фирмы Microchip Technology Inc. PIC18F4550. Показана возможность применения данного ...

Моделированиe процесса ионного легирования многокомпонентных металлических мишеней

Данная статья посвящена моделированию процесса ионной имплантации в многокомпонентные металлические мишени методом Монте-Карло. Проведено сравнение результатов моделирования с экспериментальными данными. Моделирование проводилось с использованием про...

Управление шаговым двигателем с использованием микроконтроллера ATmega16 и LabVIEW

В настоящей статье рассмотрен один из множества вариантов управления шаго-вым двигателем (ШД) Nanotec ST5918M1008. Статья будет полезна разработчикам столкнувшихся с реализацией управляющей программы для разработки алгоритмов свя-занных с шаговыми дв...

Изучение процессов зарядки и разрядки конденсатора с помощью виртуальных приборов

В статье приведено описание системы учебных опытов для изучения процессов зарядки и разрядки конденсатора с помощью виртуального осциллографа, построенного на базе прибора NI myDAQ. Предлагаемая методика проведения измерений может быть реализована в ...

Исследование процесса кровообращения на основе четырёхкамерной математической модели

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

Похожие статьи

Измерение угла поворота диска с помощью энкодера и микроконтроллера Atmega16A

В данной статье будет рассмотрен метод измерения угла поворота диска с помощью энкодера и микроконтроллера Atmega16A. Вначале будут рассмотрены общие сведения об энкодерах, их классификация, далее будет рассмотрена непосредственно сама прошивка для м...

Модернизация робота-пылесоса Samsung Powerbot SR20H9050U

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

Разработка портативной метеостанции на базе микроконтроллера ESP8266

В данной статье излагаются взгляды на решение проблемы получения метеоданных при помощи специализированных станций. Показано преимущество использования цифровых метеостанций над аналоговыми устройствами. Особое внимание отводится описанию сборки и на...

Управление мобильным роботом посредством сигналов головного мозга

Данная статья посвящена обзору возможностей применения нейрокомпьютерного интерфейса NeuroSky Mindwave Mobile для управления мобильным роботом. Проведенное исследование позволяет утверждать, что NeuroSky MindWave Mobile позволяет фиксировать определе...

Проектирование приложения на ПК для полуавтоматизированного управления генератором сигналов различной формы

В данной статье выполнено обоснование актуальности и результат проектирования приложения на ПК для полуавтоматизированного управления генератором сигналов различной формы на основе микроконтроллера. Актуальность исследования обусловлена тем, что упра...

Микропроцессорный измеритель коэффициента температуропроводности материалов

В работе представлены краткие теоретические сведения о применяемом датчике и представлена принципиальная схема модуля обработки информации на основе микроконтроллера фирмы Microchip Technology Inc. PIC18F4550. Показана возможность применения данного ...

Моделированиe процесса ионного легирования многокомпонентных металлических мишеней

Данная статья посвящена моделированию процесса ионной имплантации в многокомпонентные металлические мишени методом Монте-Карло. Проведено сравнение результатов моделирования с экспериментальными данными. Моделирование проводилось с использованием про...

Управление шаговым двигателем с использованием микроконтроллера ATmega16 и LabVIEW

В настоящей статье рассмотрен один из множества вариантов управления шаго-вым двигателем (ШД) Nanotec ST5918M1008. Статья будет полезна разработчикам столкнувшихся с реализацией управляющей программы для разработки алгоритмов свя-занных с шаговыми дв...

Изучение процессов зарядки и разрядки конденсатора с помощью виртуальных приборов

В статье приведено описание системы учебных опытов для изучения процессов зарядки и разрядки конденсатора с помощью виртуального осциллографа, построенного на базе прибора NI myDAQ. Предлагаемая методика проведения измерений может быть реализована в ...

Исследование процесса кровообращения на основе четырёхкамерной математической модели

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

Задать вопрос