Программирование прямого и комплементарного ШИМ-сигналов с настройкой «мертвого времени» на микроконтроллере STM32 | Статья в журнале «Молодой ученый»

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

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

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

Емельянов А. А., Бесклеткин В. В., Иванин А. Ю., Пестеров Д. И., Юнусов Т. Ш., Иванов П. Е., Соснин А. С. Программирование прямого и комплементарного ШИМ-сигналов с настройкой «мертвого времени» на микроконтроллере STM32 // Молодой ученый. — 2017. — №24. — С. 1-10. — URL https://moluch.ru/archive/158/44592/ (дата обращения: 25.05.2019).



Программирование прямого и комплементарного ШИМ-сигналов с настройкой «мертвого времени» на микроконтроллере STM32

Емельянов Александр Александрович, доцент;

Бесклеткин Виктор Викторович, ассистент;

Иванин Александр Юрьевич, студент;

Пестеров Дмитрий Ильич, студент;

Юнусов Тимур Шамильевич, студент;

Иванов Павел Евгеньевич, студент;

Соснин Александр Сергеевич, студент

Российский государственный профессионально-педагогический университет (г. Екатеринбург)

Целью данной работы является программирование студентами на лабораторном стенде прямого и комплементарного ШИМ-сигналов с настройкой «мертвого времени». Программирование осуществляется в среде CooCox CoIDE.

Для реализации этой цели необходимо решить следующие задачи:

‒ Формирование синусоидального базового сигнала в цифровой форме с помощью задания углов, определяемых как 2π/125;

‒ Ввод структур для использования портов ввода-вывода, таймера и настройки «мертвого времени»;

‒ Включение тактирования периферийных устройств;

‒ Ввод функции инициализации:

1) Назначение портов ввода-вывода (GPIO – General Ports Input/Outputs);

2) Инициализация таймера (TIM1);

3) Инициализация ШИМ с обязательным включением комплементарных каналов;

4) Заполнение поля «TIM_DeadTime»;

‒ Описание функции прерывания (SysTick_Handler);

‒ Формирование массива, соответствующего новому сигналу, сдвинутому на 90° по отношению к базовому сигналу.

«Мертвое» время (DeadTime) – это задержка по времени положительных фронтов управляющих сигналов для исключения аварийных ситуаций в стойках. Стойка - это основной элемент силовой схемы, состоящий из двух последовательно соединённых транзисторов и обратных диодов, соединённых параллельно с ними (рис. 1) [1].

Управление стойкой происходит с помощью ШИМ. Обычно для стойки с двумя транзисторами скважность задается только для верхнего ключа, а нижний ключ работает в комплементарном (созависимом) режиме (рис. 2). Это означает, что когда верхний ключ включен, то нижний выключен, и наоборот, когда нижний ключ включен, верхний должен быть выключен. Такой комплементарный способ управления применяется в большинстве преобразователей. Микроконтроллер STM32F103C8T6 имеет в своем наборе таймер TIM1, с помощью которого можно назначить комплементарные выводы для генерации ШИМ-сигнала. Таким образом, программисту необходимо задать скважность ШИМ только для верхнего ключа, а на соответствующем выводе микроконтроллера аппаратно сформируется комплементарный сигнал для нижнего ключа.

Рис. 1. Один из вариантов исполнения стойки

Рис. 2. Комплементарное управление транзисторами в стойке

Особое внимание следует обратить на момент выключения верхнего транзистора и включения нижнего. На практике время срабатывания транзисторов отлично от нуля, и возможна ситуация, когда один транзистор уже успел включиться, а другой еще не успел выключится, что приводит к короткому замыканию между положительным и отрицательным контактами стойки. Ток, который возникает в таком аварийном режиме, называют «сквозным». Для предотвращения таких ситуаций используют генерацию «мертвого» времени, то есть происходит смещение фронтов сигналов (рис. 3), и возникают паузы в управлении, которые гарантируют безопасное включение и отключение транзисторов в стойке.

Рис. 3. Генерация «мертвого» времени

Алгоритм набора кода в среде разработки CooCox CoIDE состоит в следующем:

  1. Запускаем среду программирования CooCox CoIDE.
  2. После запуска CooCox CoIDE в строке меню нажать: Project → New Project.
  3. В появившемся окне в поле «Project name» ввести имя своему проекту.
  4. Далее нужно выбрать поле с надписью «Chip».
  5. Появится окно с выпадающими списками различных фирм микроконтроллеров (рис. 4). Необходимо открыть список ST, затем из выпадающего списка открыть подсписок STM32F103x, после чего найти микроконтроллер STM32F103C8, выбрать его левым щелчком мыши и нажать Finish (рис. 5).
  6. После проделанных действий появится главное окно с репозиторием для выбора необходимых для проекта библиотек (рис. 6).

Рис. 4. Выбор фирмы микроконтроллера

Рис. 5. Выбор микроконтроллера

Рис. 6. Выбор библиотек в репозитории

Необходимо подключить следующие библиотеки:

‒ RCC – для управления тактовым генератором;

‒ GPIO – для управления портами ввода-вывода;

‒ TIM – для управления таймерами.

  1. После выбора необходимых библиотек в панели файлов нужно выбрать файл «main.c», весь код будет находится здесь.
  2. С помощью директивы «#include <>» необходимо подключить заголовочные файлы (рис. 7).

Рис. 7. Подключение заголовочных файлов

  1. Далее нужно ввести все структуры, которые будут использоваться в коде, а также ввести массив для построения синусоидальной ШИМ (рис. 8). Массив имеет тип «uint16_t», что означает, что данный массив не имеет отрицательных значений, а также числа, входящие в этот массив, могут принимать значения в диапазоне от 0 до 65535.

Рис. 8. Ввод структур и массива синуса

  1. Для удобства восприятия кода программа была разделена на несколько подпрограмм (функций). Вначале необходимо ввести и заполнить функцию «void initRcc(void)» (рис. 9) для включения тактирования всех используемых периферийных устройств. Данная функция имеет тип «void».

Рис. 9. Функция включения тактирования

  1. Следующим шагом будет ввод и заполнение функции инициализации всех периферийных устройств «void initAll(void)». Данная функция, как и предыдущая, также имеет тип «void». Но так как она имеет большой объем, необходимо разбить ее на участки:

‒ Назначение портов ввода-вывода (рис. 10). Все выводы назначены как альтернативные функции с двумя состояниями;

Рис. 10. Назначение GPIO в функции initAll()

‒ Инициализация таймера TIM1 (рис. 11);

Рис. 11. Инициализация таймера

‒ Для генерации «мертвого времени» необходимо заполнить всего два поля, как показано на рис. 12;

Рис. 12. Настройка «мертвого» времени

‒ Инициализация ШИМ (рис. 13);

Рис. 13. Инициализация ШИМ

‒ Необходимо инициализировать системный таймер. Для этого нужно написать функцию SysTick_Config(), в аргументах которой указывается частота тактирования. Необходимо указать частоту 1200, в итоге должно получиться SysTick_Config(1200).

  1. После ввода и заполнения функции тактирования необходимо заполнить функцию прерывания SysTick_Handler (рис. 14), в которой будет проходить процесс записи значений массива в регистры сравнения таймера.

Рис. 14. Описание функции прерывания

  1. После того как все функции были введены и заполнены, нужно объявить их перед функцией «int main()» (рис. 15).

Рис. 15. Объявление функций

  1. Следующим шагом необходимо записать данные функции между фигурными скобками в «main()» (рис. 16). Цикл «while» в этом проекте останется пустым. После этого код можно считать завершенным.

Рис. 16. Функция main()

  1. После написания кода программы, его необходимо скомпилировать. Для этого в панели инструментов нужно нажать «Build». В случае успешной компиляции в консоли появится надпись «BUILD SUCCESSFUL», а также будет указан размер программы. Если в коде присутствуют ошибки, то в консоли будет указано, где именно находятся эти ошибки, а также появится надпись «BUILD FAILED».
  2. После завершения компиляции последним этапом станет загрузка рабочей программы в микроконтроллер. Для этого нужно через специальный кабель (удлинитель USB) подключить программатор, расположенный на лабораторном стенде, к компьютеру. После подключения в панели инструментов нажать «Download Code to Flash» и дождаться окончания загрузки. В случае удачной загрузки в консоли появятся надписи: «Erase: Done»; «Program: Done»; «Verify: Done». Если существуют проблемы с подключением платы к компьютеру, то появится надпись «Error: Connect failed, check config and cable connection». Необходимо проверить кабель, к которому подключено устройство.

На рис. 17 представлен общий вид лабораторного стенда с микроконтроллерами STM32.

Рис. 17. Общий вид лабораторного стенда для программирования микроконтроллеров STM32

Цифрами обозначены номера лабораторных работ, которые приведены ниже:

‒ 1 — программирование двухфазного генератора с синусоидальными напряжениями со сдвигом 90°;

‒ 2 — программирование прямого и комплементарного ШИМ-сигналов с настройкой «мертвого времени»;

‒ 3 — программирование изменения скважности импульсов ШИМ на микроконтроллере STM32 с помощью кнопки;

‒ 4 — программирование трехфазного генератора с синусоидальными напряжениями со сдвигом 120°;

‒ 5 — регулирование скважности сигнала при помощи аналогового потенциометра с настройкой «мертвого времени».

В каждой монтажной плате имеются клеммы для подключения к соответствующим каналам цифрового осциллографа. Результаты первой и третьей лабораторных работ опубликованы в журнале «Молодой ученый». В данной статье приведено содержание лабораторной работы на монтажной плате с микроконтроллером под номером 2 (рис. 17). Остальные работы будут опубликованы в следующих статьях.

Осциллограмма прямого и комплементарного ШИМ-сигналов с настройкой «мертвого времени» приведена на рис. 18.

Рис. 18. Осциллограмма прямого и комплементарного ШИМ-сигналов с настройкой «мертвого времени»

Литература:

  1. Анучин А. С. Системы управления электроприводов: учебник для вузов / А. С. Анучин. – М.: Изд. дом МЭИ, 2015. – 373 с.
  2. Огородников И. Н. Микропроцессорная техника: введение в Cortex-M3: учеб. пособие / И. Н. Огородников. – Екатеринбург: изд-во Урал. Ун-та, 2015. – 116 с.
  3. Джозеф Ю. Ядро Cortex-M3 компании ARM. Полное руководство / Ю. Джозеф; пер. с англ. А. В. Евстифеева. – М.: Додэка-XXI, 2012. – 552 с.
Основные термины (генерируются автоматически): GPIO, комплементарный ШИМ-сигнал, BUILD, лабораторный стенд, инициализация таймера, верхний ключ, настройка, нижний ключ, функция, монтажная плата.


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

Программирование изменения скважности импульсов ШИМ на...

а) Назначение портов ввода-вывода (GPIOGeneral Ports Input/Outputs); б) Инициализация таймера (TIM4)

Кроме того, возможна конфигурация порта в виде выхода альтернативной функции (например, для генерации ШИМ-сигналов).

Программирование двухфазного генератора с синусоидальными...

GPIO, BUILD, лабораторный стенд, инициализация таймера, Вывод первого, функция, RCC, комплементарный сигнал, FAILED, синусоидальный сигнал.

Программирование синусоидального и пилообразного сигналов...

Рис. 8. Лабораторный стенд для исследования генерации пилообразного и синусоидального сигналов с помощью ЦАП. Литература

Программирование прямого и комплементарного ШИМ-сигналов с настройкой «мертвого времени» на микроконтроллере STM32.

Программирование трехфазного генератора с синусоидальными...

‒ Ввод функции инициализации: 1) Назначение портов ввода-вывода (GPIOGeneral Ports Input/Outputs)

3) Инициализация ШИМ с обязательным включением комплементарных каналов; ‒ Инициализация и настройка прямого доступа к памяти (DMA)

Регулирование скважности сигнала при помощи аналогового...

1) Назначение портов ввода-вывода (GPIOGeneral Ports Input/Outputs); 2) Инициализация таймера (TIM1)

Первая функция будет использоваться для инициализации таймера (TIM1) и настройки первого ШИМ-канала.

Подключение акселерометра, выполненного по MEMS-технологии...

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

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

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET)

Разработка лабораторного стенда для изучения работы...

Учебные лабораторные стенды созданы для организации полноценного обучения студентов и проведения исследовательских работ.

– отображение значений частоты генерируемых ШИМ-сигналов

Моделирование системы АИН ШИМ — асинхронный двигатель...

Результаты этой работы будут основой для создания учебно-лабораторной установки по исследованию системы АИН ШИМ – АД.

 Ф1а и Ф2а, Ф1b и Ф2b, Ф1с и Ф2с – формирователи сигналов управления силовыми ключами.

Программирование изменения скважности импульсов ШИМ на...

а) Назначение портов ввода-вывода (GPIOGeneral Ports Input/Outputs); б) Инициализация таймера (TIM4)

Кроме того, возможна конфигурация порта в виде выхода альтернативной функции (например, для генерации ШИМ-сигналов).

Программирование двухфазного генератора с синусоидальными...

GPIO, BUILD, лабораторный стенд, инициализация таймера, Вывод первого, функция, RCC, комплементарный сигнал, FAILED, синусоидальный сигнал.

Программирование синусоидального и пилообразного сигналов...

Рис. 8. Лабораторный стенд для исследования генерации пилообразного и синусоидального сигналов с помощью ЦАП. Литература

Программирование прямого и комплементарного ШИМ-сигналов с настройкой «мертвого времени» на микроконтроллере STM32.

Программирование трехфазного генератора с синусоидальными...

‒ Ввод функции инициализации: 1) Назначение портов ввода-вывода (GPIOGeneral Ports Input/Outputs)

3) Инициализация ШИМ с обязательным включением комплементарных каналов; ‒ Инициализация и настройка прямого доступа к памяти (DMA)

Регулирование скважности сигнала при помощи аналогового...

1) Назначение портов ввода-вывода (GPIOGeneral Ports Input/Outputs); 2) Инициализация таймера (TIM1)

Первая функция будет использоваться для инициализации таймера (TIM1) и настройки первого ШИМ-канала.

Подключение акселерометра, выполненного по MEMS-технологии...

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

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

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET)

Разработка лабораторного стенда для изучения работы...

Учебные лабораторные стенды созданы для организации полноценного обучения студентов и проведения исследовательских работ.

– отображение значений частоты генерируемых ШИМ-сигналов

Моделирование системы АИН ШИМ — асинхронный двигатель...

Результаты этой работы будут основой для создания учебно-лабораторной установки по исследованию системы АИН ШИМ – АД.

 Ф1а и Ф2а, Ф1b и Ф2b, Ф1с и Ф2с – формирователи сигналов управления силовыми ключами.

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

Программирование изменения скважности импульсов ШИМ на...

а) Назначение портов ввода-вывода (GPIOGeneral Ports Input/Outputs); б) Инициализация таймера (TIM4)

Кроме того, возможна конфигурация порта в виде выхода альтернативной функции (например, для генерации ШИМ-сигналов).

Программирование двухфазного генератора с синусоидальными...

GPIO, BUILD, лабораторный стенд, инициализация таймера, Вывод первого, функция, RCC, комплементарный сигнал, FAILED, синусоидальный сигнал.

Программирование синусоидального и пилообразного сигналов...

Рис. 8. Лабораторный стенд для исследования генерации пилообразного и синусоидального сигналов с помощью ЦАП. Литература

Программирование прямого и комплементарного ШИМ-сигналов с настройкой «мертвого времени» на микроконтроллере STM32.

Программирование трехфазного генератора с синусоидальными...

‒ Ввод функции инициализации: 1) Назначение портов ввода-вывода (GPIOGeneral Ports Input/Outputs)

3) Инициализация ШИМ с обязательным включением комплементарных каналов; ‒ Инициализация и настройка прямого доступа к памяти (DMA)

Регулирование скважности сигнала при помощи аналогового...

1) Назначение портов ввода-вывода (GPIOGeneral Ports Input/Outputs); 2) Инициализация таймера (TIM1)

Первая функция будет использоваться для инициализации таймера (TIM1) и настройки первого ШИМ-канала.

Подключение акселерометра, выполненного по MEMS-технологии...

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

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

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET)

Разработка лабораторного стенда для изучения работы...

Учебные лабораторные стенды созданы для организации полноценного обучения студентов и проведения исследовательских работ.

– отображение значений частоты генерируемых ШИМ-сигналов

Моделирование системы АИН ШИМ — асинхронный двигатель...

Результаты этой работы будут основой для создания учебно-лабораторной установки по исследованию системы АИН ШИМ – АД.

 Ф1а и Ф2а, Ф1b и Ф2b, Ф1с и Ф2с – формирователи сигналов управления силовыми ключами.

Программирование изменения скважности импульсов ШИМ на...

а) Назначение портов ввода-вывода (GPIOGeneral Ports Input/Outputs); б) Инициализация таймера (TIM4)

Кроме того, возможна конфигурация порта в виде выхода альтернативной функции (например, для генерации ШИМ-сигналов).

Программирование двухфазного генератора с синусоидальными...

GPIO, BUILD, лабораторный стенд, инициализация таймера, Вывод первого, функция, RCC, комплементарный сигнал, FAILED, синусоидальный сигнал.

Программирование синусоидального и пилообразного сигналов...

Рис. 8. Лабораторный стенд для исследования генерации пилообразного и синусоидального сигналов с помощью ЦАП. Литература

Программирование прямого и комплементарного ШИМ-сигналов с настройкой «мертвого времени» на микроконтроллере STM32.

Программирование трехфазного генератора с синусоидальными...

‒ Ввод функции инициализации: 1) Назначение портов ввода-вывода (GPIOGeneral Ports Input/Outputs)

3) Инициализация ШИМ с обязательным включением комплементарных каналов; ‒ Инициализация и настройка прямого доступа к памяти (DMA)

Регулирование скважности сигнала при помощи аналогового...

1) Назначение портов ввода-вывода (GPIOGeneral Ports Input/Outputs); 2) Инициализация таймера (TIM1)

Первая функция будет использоваться для инициализации таймера (TIM1) и настройки первого ШИМ-канала.

Подключение акселерометра, выполненного по MEMS-технологии...

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

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

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET)

Разработка лабораторного стенда для изучения работы...

Учебные лабораторные стенды созданы для организации полноценного обучения студентов и проведения исследовательских работ.

– отображение значений частоты генерируемых ШИМ-сигналов

Моделирование системы АИН ШИМ — асинхронный двигатель...

Результаты этой работы будут основой для создания учебно-лабораторной установки по исследованию системы АИН ШИМ – АД.

 Ф1а и Ф2а, Ф1b и Ф2b, Ф1с и Ф2с – формирователи сигналов управления силовыми ключами.

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