Программирование двухфазного генератора с синусоидальными напряжениями со сдвигом 90° на микроконтроллере STM32 | Статья в журнале «Молодой ученый»

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

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

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

Емельянов, А. А. Программирование двухфазного генератора с синусоидальными напряжениями со сдвигом 90° на микроконтроллере STM32 / А. А. Емельянов, В. В. Бесклеткин, А. Ю. Иванин, Д. И. Пестеров. — Текст : непосредственный // Молодой ученый. — 2017. — № 22 (156). — С. 6-12. — URL: https://moluch.ru/archive/156/44201/ (дата обращения: 16.11.2024).



Целью данной работы является программирование студентами на лабораторном стенде ШИМ-сигналов, сдвинутых на 90°. Программирование производится в среде CooCox CoIDE.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рис. 4. Подключенные библиотеки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рис. 12. Функция 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». Необходимо проверить кабель, к которому подключено устройство.

Общий вид лабораторного стенда представлен на рис. 13.

P70516-124959 (2)

Рис. 13. Лабораторный стенд для исследования сдвига двух сигналов на 90°

Описание клемм:

‒ 1 – Вывод первого синусоидального сигнала, подключен к выводу A8 на микроконтроллере;

‒ 1К – Вывод первого комплементарного сигнала, подключен к выводу B13 микроконтроллера;

‒ 2 – Вывод второго синусоидального сигнала, сдвинутого на 90°, подключен к выводу A9 на микроконтроллере;

‒ 2К – Вывод первого комплементарного сигнала, подключен к выводу B14 микроконтроллера;

‒ G – Земля.

Результаты исследования сдвига двух сигналов на 90° показаны на рис. 14.

Рис. 14. Осциллограмма сдвига двух сигналов на 90°

Литература:

  1. Анучин А. С. Системы управления электроприводов: учебник для вузов / А. С. Анучин. – М.: Изд. дом МЭИ, 2015. – 373 с.
  2. Огородников И. Н. Микропроцессорная техника: введение в Cortex-M3: учеб. пособие / И. Н. Огородников. – Екатеринбург: изд-во Урал. Ун-та, 2015. – 116 с.
  3. Джозеф Ю. Ядро Cortex-M3 компании ARM. Полное руководство / Ю. Джозеф; пер. с англ. А. В. Евстифеева. – М.: Додэка-XXI, 2012. – 552 с.
  4. ST Microelectronics. RM0008 Reference manual. STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced ARM-based 32-bit MCUs. Rev 16 - 2015.
Основные термины (генерируются автоматически): GPIO, BUILD, Вывод первого, инициализация таймера, лабораторный стенд, функция, FAILED, RCC, комплементарный сигнал, синусоидальный сигнал.


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

Программирование трехфазного генератора с синусоидальными напряжениями со сдвигом 120° на микроконтроллере STM32

Программирование линейного асинхронного двигателя (Z1 = 18) с трехфазной обмоткой индуктора с нулевым проводом

Программирование линейного асинхронного двигателя (Z1 = 6) с трехфазной обмоткой индуктора с нулевым проводом

Программирование линейного асинхронного двигателя (Z1 = 12) с трехфазной обмоткой индуктора с нулевым проводом

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

Программирование синусоидального и пилообразного сигналов с помощью цифро-аналогового преобразователя на микроконтроллере STM32

Моделирование синхронного неявнополюсного дугостаторного двигателя (Z1 = 12) с трехфазной обмоткой индуктора с нулевым проводом

Программирование синхронного явнополюсного дугостаторного двигателя (Z1 = 6) с трехфазной обмоткой индуктора с нулевым проводом

Программирование синхронного неявнополюсного дугостаторного двигателя (Z1 = 6) с трехфазной обмоткой индуктора с нулевым проводом

Моделирование синхронного явнополюсного линейного двигателя (Z1 = 6) с трехфазной обмоткой индуктора с нулевым проводом

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

Программирование трехфазного генератора с синусоидальными напряжениями со сдвигом 120° на микроконтроллере STM32

Программирование линейного асинхронного двигателя (Z1 = 18) с трехфазной обмоткой индуктора с нулевым проводом

Программирование линейного асинхронного двигателя (Z1 = 6) с трехфазной обмоткой индуктора с нулевым проводом

Программирование линейного асинхронного двигателя (Z1 = 12) с трехфазной обмоткой индуктора с нулевым проводом

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

Программирование синусоидального и пилообразного сигналов с помощью цифро-аналогового преобразователя на микроконтроллере STM32

Моделирование синхронного неявнополюсного дугостаторного двигателя (Z1 = 12) с трехфазной обмоткой индуктора с нулевым проводом

Программирование синхронного явнополюсного дугостаторного двигателя (Z1 = 6) с трехфазной обмоткой индуктора с нулевым проводом

Программирование синхронного неявнополюсного дугостаторного двигателя (Z1 = 6) с трехфазной обмоткой индуктора с нулевым проводом

Моделирование синхронного явнополюсного линейного двигателя (Z1 = 6) с трехфазной обмоткой индуктора с нулевым проводом

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