Встраиваем lua интерпретатор в проект для микроконтроллера (stm32)

Запуск IDE и создание проекта

Запуск IDE ничем не отличается от подобной процедуры для других программ. После двойного клика на иконку, первым делом появится окно Select Workspace, запрашивающее рабочую папку проекта. После выбора нужной папки открывается приглашение Atollic TrueSTUDIO, а затем рабочее окно среды программирования.

После открытия основного окна из выпадающего меню File, выбирается пункт New, в котором выделяется раздел Project и пункт C Project.

Открывается мастер настройки проекта, пошагово определяющий основные параметры. Самым важным является первое окно C Project, в котором вводятся имя проекта Project Name и его тип – Project Type. Последний пункт, при использовании плат от STMicroelectronics, должен равняться STM32 C Project.

Во втором окне мастера проекта, под названием TrueSTUDIO Build Settings, самым важным является пункт Evaluation Board, в котором необходимо выбрать название используемой отладочной платы, в данном случае STM32_Discovery. В оставшихся окнах настройки больше ничего менять не нужно.

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

Ожидаемый эффект

Если BLDC двигатель возбуждать синусоидальными токами, ожидается увеличение момента на валу, снижение вибрации, снижение шума, увеличение максимальных оборотов. Почему так происходит? Вспомним, как работает система управления BLDC двигателем. Для его управления используется блочная коммутация (block commutation). Т.е. При достижении определенного положения ротора происходит коммутация (напряжение подается на определенные обмотки) и магнитное поле статора смещается и остается неподвижным до момента следующей коммутации пока ротор не провернется до определенного положения. Таким образом, магнитное поле статора вращается не плавно, а шагами. Это доступно продемонстрировано на этом фрагменте видео.

Наглядно это можно объяснить с помощью двух магнитов. Магнит статора как бы тянет к себе ротор. При этом магнит статора перемещается скачками и ждет пока ротор приблизиться, потом совершает следующий скачок. При этом в момент скачка дистанция между магнитами увеличивается, а их магнитное взаимодействие снижается, а при приближении магнитное взаимодействие увеличивается. Из-за этого и получаются пульсации момента. Если сделать движение более равномерным, выдерживая между «магнитами» постоянную дистанцию, усилие между магнитами пульсировать не будет, и движение будет происходить с меньшими потерями. Благодаря синусоидальному возбуждению, и достигается плавность вращения магнитного поля статора, что и дает эффект.

Как генерировать синусоиду?

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

Для генерации определенного уровня напряжения используется ШИМ (PWM)

В зависимости от скважности ШИМ можно управлять средним напряжением Vout. Но форма сигнала Vout будет повторять сигнал ШИМ, т.е

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

По некоторым причинам, в устройствах управления двигателем не используют фильтры низких частот. Во-первых, сам двигатель действует как фильтр. Индуктивность и сопротивление обмоток двигателя создают RL фильтр. К тому же механическая инерция двигателя и нагрузка создают «механический» фильтр низких частот. При достаточно большой частоте PWM, флуктуации скорости ротора будут абсолютно не значительные. Во-вторых, Протекание тока через низкочастотный фильтр, например RC-фильтр, привело бы к существенным потерям мощности на самом фильтре.

Поскольку при генерации PWM используется комплементарная работа двух ключей (верхнего и нижнего) нужно учесть тот факт, что для закрытия ключа требуется некоторое время. Поэтому нужно выключать открытый ключ, и через некоторое время, необходимое для его закрытия, открывать комплементарный ключ. Это время получило термин Dead-time. У микроконтроллера STM32 этот вопрос решает таймер, который занимается генерацией PWM.

Теперь перейдем непосредственно к генерации синусоиды

Зная положение ротора в данный момент времени, можно математическим путем вычислять амплитуду (скважность PWM) для каждой из трех фаз. Однако математические вычисления занимают много времени и поэтому поступают иначе

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

Генерировать синусоиды для каждой фазы — это прямой метод, но есть более эффективный способ. Мы будем генерировать три синусоидальных напряжения вывод-вывод (дифференциальное напряжение между двумя выводами) со сдвигом фазы на 120 градусов между ними. Таблицы 3-1 3-2 показывают, как этого можно достичь, не делая полные синусоиды для каждого вывода двигателя.

На рисунке 3-3 наглядно изображен этот алгоритм в сравнении с блочной коммутацией (как для BLDC).

У такого подхода есть два преимущества:

1) максимальная амплитуда сгенерированного напряжения выше, чем при генерации чистой синусоиды на каждой фазе. Как следствие получим более высокий вращающий момент и скорость.
2) Каждый вывод двигателя треть времени подключен к земле, что сокращает потери мощности на коммутацию.

При создании таблицы значений нужно найти компромисс между объемом таблицы и скоростью работы с ней. Поскольку форма волны одинакова для всех трех фаз, и отличается только сдвигом на 120 градусов, то можно сохранять в таблице только одну волну и использовать ее для расчета всех трех выходных напряжений. Однако, для сокращения времени на вычисления, принято решение сохранить в таблице значения для всех трех фаз. Так обеспечивается наиболее быстрая обработка данных. Используемая в примере таблица «синусов» имеет 192 значения для каждой фазы. Т.е. генерируемый сигнал будет разбит на секции и меть ступенчатую форму.

Этого вполне достаточно. При необходимости Вы можете скорректировать таблицу.

Таким образом, за один электрический оборот нам придется 192 раза вычислять и изменять значение PWM для каждой из трех фаз.

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

Датчики положения и их использование

Было бы идеально, если датчик положения ротора мог в любой момент информировать микроконтроллер о текущем положении ротора. В данном случае мы не имеем такой возможности. Три датчика Холла изменяют свое состояние 6 раз за один электрический оборот. Между этими событиями положение ротора достоверно не известно. Для определения текущего положения ротора между срабатываниями датчиков, мы вынуждены производить вычисления с учетом текущей скорости вращения ротора.

Определение скорости вращения

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

Фазовая подстройка

Удобнее всего фазовую подстройку выполнять, когда контроллер точно знает реальное положение ротора. В случае с тремя датчиками Холла — это момент изменения состояния датчиков. Именно в этот момент можно узнать точный угол ротора. Подстройка выполняется путем коррекции индекса положения в таблице выходных значений (в таблице синусов).

Блочная коммутация

В момент старта скорость ротора не известна до тех пор, пока не произойдет последовательно два изменения состояния датчиков холла. Чтобы обеспечить нормальный запуск двигателя, пока скорость вращения ротора не известна, применяется блочная коммутация. Т.е. контроллер управляет двигателем как (BLDC). Этот метод был описан ране. Пример для STM32 найдете здесь. Карта напряжений, используемая в режиме блочной коммутации, показана на рис.3-3(штриховая синяя линия) на фоне с синусоидальным напряжением. Как только скорость вращения ротора будет определена, происходит переход к синусоидальному возбуждению.

Управление углом опережением коммутации

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

BLDC Motors и PMSM. Выводы

Возбуждение бесколлекторного двигателя с постоянными магнитами синусоидальными токами имеет несомненные преимущества. И позволяет повысить эффективность работы двигателя. Коррекция угла опережения (timing), позволяет находить компромисс между максимальным моментом на валу и скоростью вращения ротора.

Скачать пример можно по этой ссылке: https://github.com/avislab/STM32F103/tree/master/Example_PMSM

Смотри также ВИДЕО:

Бесколлекторные моторы «на пальцах»

Что такое бесколлекторные моторы и как управлять бесколлекторными моторами:

Успехов.

Смотри также:

Статьи по бесколлекторным моторам:

  • Что такое Бесколлекторный мотор?
  • Устройство бесколлекторного мотора
  • Как управлять бесколлекторным мотором с датчиками Холла (Sensored brushless motors)
  • Как управлять бесколекторным мотором без датчиков (Sensorless BLDC)
  • Запуск бездатчикового бесколекторного мотора (Sensorless BLDC)
  • Определение положения ротора бесколлекторника в остановленном состоянии
  • Контроллер бесколлекторного мотора. Структура ESC
  • Схема контроллера бесколлекторного мотора (ESC)
  • Силовая часть контроллера бесколлекторного мотора
  • Литература по бесколлекторнм моторам
  • Примеры на С для управления бесколлекторными моторами
  • Схема контроллера бесколлекторного мотора BLDC, PMSM на микроконтроллере STM32
  • STM32. Управление бесколлекторным мотором (BLDC)
  • STM32. Пример регулятора для бесколлекторного PMSM
  • Видео о бесколлекторных моторах. BLDC, PMSM, векторное управление

Смотри также:

  • 1. STM32. Программирование STM32F103. Тестовая плата. Прошивка через последовательный порт и через ST-Link программатор
  • 2. STM32. Программирование. IDE для STM32
  • 3. STM32. Программирование STM32F103. GPIO
  • 4. STM32. Программирование STM32F103. Тактирование
  • 5. STM32. Программирование STM32F103. USART
  • 6. STM32. Программирование STM32F103. NVIC
  • 7. STM32. Программирование STM32F103. ADC
  • 8. STM32. Программирование STM32F103. DMA
  • 9. STM32. Программирование STM32F103. TIMER
  • 10. STM32. Программирование STM32F103. TIMER. Захват сигнала
  • 11. STM32. Программирование STM32F103. TIMER. Encoder
  • 12. STM32. Программирование STM32F103. TIMER. PWM
  • 13. STM32. Программирование STM32F103. EXTI
  • 14. STM32. Программирование STM32F103. RTC
  • 15. STM32. Программирование STM32F103. BKP
  • 16. STM32. Программирование STM32F103. Flash
  • 17. STM32. Программирование STM32F103. Watchdog
  • 18. STM32. Программирование STM32F103. Remap
  • 19. STM32. Программирование STM32F103. I2C Master
  • 20. STM32. Программирование STM32F103. I2C Slave
  • 21. STM32. Программирование STM32F103. USB
  • 22. STM32. Программирование STM32F103. PWR
  • 23. STM32. Программирование STM32F103. Option bytes
  • 24. STM32. Программирование STM32F103. Bootloader
  • STM32. Скачать примеры
  • System Workbench for STM32 Установка на Ubuntu
  • Keil uVision5 – IDE для STM32
  • IAR Workbench – IDE для STM32
  • Управление бесколлекторным двигателем постоянного тока (BLDC) с помощью STM32
  • Управление PMSM с помощью STM32
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector