Контроллеры двигателей BLDC различаются в зависимости от метода, который они используют для определения положения ротора. Вы можете проводить измерения с помощью датчиков положения или с помощью бессенсорной техники.
Dc motor speed and direction control with stm32f103 microcontroller and l293d motor driver
В этом уроке я покажу вам, как управлять скоростью двигателя постоянного тока с помощью микроконтроллера stm32 и полумостовой управляющей микросхемы l293d. Двигатели постоянного тока — это обычные двигатели, которые можно встретить в быту (водяные насосы постоянного тока, вентиляторы постоянного тока), игрушках и т.д. Двигатели постоянного тока вращаются с постоянной скоростью, но их скорость можно изменять и контролировать с помощью некоторых методов. Одним из таких методов, и самым популярным, является переменное напряжение. Под переменным напряжением я подразумеваю обеспечение более низкого напряжения (мощности), чем максимальная номинальная мощность конкретного двигателя постоянного тока. Как и в наших потолочных вентиляторах (которые работают от переменного тока), скорость регулируется потенциометром (переменным резистором), подключенным к гнезду ручки. Резистор изменяет выходной сигнал, когда мы поворачиваем ручку в любом направлении. Переменный резистор — хороший выбор для управления скоростью двигателя. Однако если мы хотим внедрить логику управления (например, изменить направление вращения двигателя) или точно контролировать скорость вращения двигателя (разрешений в минуту), то метод переменного резистора не сможет полностью удовлетворить наши требования. Для достижения превосходной логики наиболее подходящей является техника широтно-импульсной модуляции (pwm). При широтно-импульсной модуляции постоянное входное напряжение на двигатель делится на подциклы для уменьшения величины входного напряжения. Этот проект посвящен управлению скоростью вращения двигателя с помощью микроконтроллера stm32. В этом проекте для управления скоростью и направлением вращения двигателя используется метод Pwm. В проекте используется готовая плата микроконтроллера St32f103c8t6. Stm32cubemx используется для конфигурирования gpio, таймера и микроконтроллера stm32f103c8t6. Для написания и компиляции кода проекта используется Keil arm mdk 5. Код был написан с использованием библиотек stm32 HAL. Если вы новичок и ничего не знаете о библиотеках stm32cubemx, wedge arm mdk 5 и HAL, я рекомендую вам сначала посмотреть учебник по началу работы с библиотеками stm32cubemx и wedge arm и HAL. Просто нажмите на кнопку ниже, чтобы посмотреть учебник.
Я хочу управлять скоростью двух двигателей постоянного тока, подключенных к полумостовому H-мосту IC l293d. Что такое l293d? Микроконтроллеры используют 3,3-5-вольтовую TTL-логику. В то время как двигатели постоянного тока работают с напряжением от 5 до +24 вольт. Невозможно управлять двигателями непосредственно с выходных контактов микроконтроллера. Выходные контакты микроконтроллера могут подавать только напряжение 5 вольт и ток 25 мА, что не подходит для того, чтобы двигатели постоянного тока начали вращение. Микроконтроллеры Stm32 работают с 3,3-вольтовой TTL-логикой. Для этого проекта я использую 12-вольтовые двигатели постоянного тока, которым для стабильного вращения требуется ток 200 мА. Поэтому нам нужна внешняя схема для управления двигателем с помощью микроконтроллера stm32.
Transistor or Mosfet as external circuit to drive, control the speed and direction of DC motor
Внешний транзистор или мосфет — лучший выбор для управления 12-вольтовым двигателем с помощью микроконтроллера stm32. База транзистора (Mosfet) подключена к выходному выводу stm32, а двигатель подключен между коллектором транзистора. Переменный сигнал pwm на базе транзистора с вывода stm32 может легко управлять скоростью двигателя постоянного тока. Но нам также необходимо изменить направление вращения двигателя, что невозможно в данной конфигурации.
В полумостовой схеме два транзистора используются для управления направлением вращения двигателя постоянного тока. Проектирование полумостовой схемы с учетом требований к мощности двигателя постоянного тока — задача не из легких. L293d представляет собой предварительно собранное устройство, содержащее две полумостовые h-конфигурации. С помощью драйвера двигателя ic l293d мы можем легко управлять двумя двигателями постоянного тока, контролировать их направление и скорость.
Чтобы узнать больше о распиновке и назначении каждого контакта в l293d, вам нужно будет посетить другой учебник. Я подробно описал схему l293d и ее работу в учебнике. Этот учебник поможет вам понять схему следующего проекта. Нажмите на кнопку ниже, чтобы получить учебник.
Project working
В проекте я буду проверять направление вращения двигателей постоянного тока и их скорость. Для этого я решил подключить четыре кнопки в качестве входа. Кнопки будут использоваться для управления направлением и скоростью вращения двигателей. О назначении отдельных кнопок я расскажу позже. Для четырех кнопок в качестве входа мне нужны четыре gpio микроконтроллера stm32, объявленные как входные. Я объявил контакты 6, 7, 8 и 9 разъема B входными. Я также включил подтягивающие резисторы, подключенные к этим выводам. Для управления направлением двух двигателей постоянного тока с помощью половинчатых Н-мостовых схем мне нужно четыре элемента управления. В основном, четыре контакта Pgio микроконтроллера необходимы для управления направлением вращения двух двигателей постоянного тока. Я объявил четыре пина порта A микроконтроллера stm32 0, 1, 2 и 3 как выходные.
Наконец, мне нужны два сигнала pwm для управления скоростью двигателя. Я буду использовать выводы 0 и 1 порта B в качестве источников pwm. Генерация ШИМ с помощью stm32 — задача не из простых. Вам приходится заботиться о многих ограничениях. У меня есть еще один учебник по генерации pwm с помощью микроконтроллера stm32. В этом учебнике я рассказал обо всех ограничениях, связанных с частотой, рабочим циклом, счетчиком и т.д. Прежде чем приступить к работе, вам следует посетить этот учебник. Если вы не посетите учебник, вы не сможете понять следующий код.
Если вы проработали вышеприведенный учебник, вы, вероятно, теперь знаете, как генерировать желаемый pwm с помощью микроконтроллера stm32. Чтобы управлять скоростью двигателя постоянного тока, мне нужно изменять сигнал Pwm. Изменение сигнала Pwm не является сложной задачей, если вы проработали инструкции выше. Чтобы изменить сигнал Pwm, необходимо рассчитать еще несколько переменных. В этом задании я создаю ШИМ-сигнал с переменным рабочим циклом на частоте 50 Гц. Я рассчитал эти значения для другого проекта (серводвигатель с микроконтроллером stm32) и использовал их в этом проекте. При желании вы можете просмотреть настройки проекта. Это поможет вам с настройками pwm для stm32cubemx.
Настройки gpio для stm32cubemx и настройки pwm для таймера приведены ниже. Чтобы понять, как рассчитывается и вводится в stm32cubemx каждое ограничение, вам следует посетить учебные пособия выше.
Я использую внутренний генератор микроконтроллера stm32f103 с частотой 8 МГц в качестве источника тактовых импульсов для выводов gpio и для генерации pwm. Эти настройки должны генерировать сигнал pwm частотой 50 Гц, как описано выше.
Для pwm я использую контакты 0 и 1 порта B микросхемы stm32. Оба вывода микроконтроллера подключены к Таймеру-3. Контакт 0 подключен к каналу 3 Таймера-3, а контакт 1 подключен к каналу 4 Таймера-3. Нам нужно активировать эти каналы, прежде чем мы сможем работать с ними. Как активировать каналы? Настройки приведены ниже.
Контроллеры двигателей BLDC различаются в зависимости от метода, который они используют для определения положения ротора. Вы можете проводить измерения с помощью датчиков положения или с помощью бессенсорной техники.
2 STM32s compliant with motor-control applications
Портфолио STM32 включает устройства на базе ядер Arm® Cortex® -M (M0, M0+, M3, M33, M4 и M7). Благодаря общей экосистеме MCU разработчики выигрывают от повышенной гибкости при разработке систем управления двигателями.
Каждый MCU в серии STM32 имеет различные периферийные устройства для удовлетворения потребностей различных приложений управления двигателями:
Серия STM32 | ARM-ядро | Более высокая частота процессора | РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА РУКА | Аналоговый интегрирующий каскад | MC-таймер |
---|---|---|---|---|---|
STM32G0xx | Cortex-M0+ | 64 МГц | 16-512 Кбайт | + | 1x (128 МГц) |
STM32F303 | Cortex-M4 (DSP/FPU) | 72 МГц | 32-512 Кбайт | ++++ | 3x (144 МГц) |
STM32F302 | Cortex-M4 (DSP/FPU) | 72 МГц | 32-512 Кбайт | +++ | 1x (144 МГц) |
STM32F301 | Cortex-M4 (DSP/FPU) | 72 МГц | 16-64 Кбайт | ++ | 1x (144 МГц) |
STM32G431 | Cortex-M4 (DSP/FPU) | 170 МГц | 32-128 Кбайт | +++ | 2x (170 МГц) |
STM32G474 | Cortex-M4 (DSP/FPU) | 170 МГц | 32-128 Кбайт | ++++ | 3x (170 МГц) |
STM32F4xx | Cortex-M4 (DSP/FPU) | 180 МГц | 256-1024 Кбайт | ++ | 2x (180 МГц) |
STM32F7xx | Cortex-M7 | 216 МГц | 64-2048 Кбайт | ++ | 2x (216 МГц) |
STM32H7xx | Cortex-M7 + M4 (опция) | 480 МГц | 128-2018 Кбайт | ++ | 2x (240 МГц) |
Серия STM32G4 2 объединяет 32-битное ядро Arm® Cortex® -M4 (с FPU и DSP инструкциями), работающее на частоте 170 МГц, с тремя различными аппаратными ускорителями, обширной аналоговой периферией и усовершенствованными таймерами управления двигателем для удовлетворения всех потребностей приложений управления двигателем. Эти линейки продукции идеально подходят для применения в системах управления двигателями.
3 STM32 motor-control specific tools
ST-MC-SUITE 3 — это веб-поисковик решений, который обеспечивает легкий доступ ко всем доступным ресурсам STM32 и STM8 MCU для приложений управления двигателями, таким как инструкции по применению, брошюры, презентации и журнальные статьи. Мастер программного обеспечения помогает разработчикам выбрать соответствующие материалы, добавить их в пакет и загрузить одним щелчком мыши.
ST Motor Profiler — это программное средство, которое автоматически измеряет электрические параметры двигателей PMSM и BLDC. С его помощью можно запустить неизвестный двигатель с нуля всего за несколько минут. ST Motor Profiler входит в комплект разработки программного обеспечения X-CUBE-MCSDK 4 для устройства STM32.
STM32Cube — это бесплатный набор инструментов и пакетов встроенного программного обеспечения для микроконтроллеров и микропроцессоров STM32, который охватывает все требования полного цикла разработки проекта. Он включает инструмент конфигурирования STM32CubeMX, который позволяет генерировать код инициализации на языке C для ядер Cortex-M. К STM32CubeMX подключен Motor Control Workbench (доступен в X-CUBE-MCSDK 4 ). Разработчики могут открыть STM32CubeMX через Motor Control Workbench во время разработки системы управления двигателем, чтобы изменить конфигурацию STM32.
Ссылки на специальный веб-сайт ST.com:
Номер документа | Название |
---|---|
UM2374 | Начало работы с STM32 Motor Control SDK v5.0 |
UM2392 | STM32 Motor Control SDK5.x — Встроенное ПО |
UM2380 | STM32 Motor Control SDK v5.2 Инструменты |
AN5143 | Перенос прикладного программного обеспечения для управления двигателем с SDK v4.3 на SDK v5.x |
AN5166 | Руководство по управлению и настройке силовых плат с помощью STM32 MC SDK v5.0 |
Дополнительные ресурсы, связанные с управлением двигателем, см. в разделе ST-MC-SUITE 3 .
Время выполнения кода, управляющего рабочим циклом ШИМ, имеет решающее значение, особенно при использовании синусоидального или ориентированного на поле управления датчиками. Вот лучшие способы обеспечить быстрое выполнение кода
Working Principles of BLDC Motors and Controllers
Контроллер двигателя BLDC управляет скоростью и крутящим моментом двигателя; он также может запускать, останавливать и реверсировать вращение двигателя. Чтобы понять, как работает контроллер, нам сначала нужно рассмотреть структуру бесщеточного двигателя. Его основными компонентами являются:
- якорь или ротор, изготовленный из постоянных магнитов, во многих случаях неодимовых магнитов; и
- статор с обмотками, которые при включении генерируют магнитное поле.
Магниты ротора и обмотки статора заставляют двигатель вращаться. Они притягиваются противоположными полюсами и отталкиваются одинаковыми полюсами. Аналогичный процесс происходит в двигателе постоянного тока со щетками. Основное различие заключается в способе переключения тока, подаваемого на обмотки проводов.
В двигателе BDC это механический процесс, запускаемый коммутатором щеточного типа. В двигателе BLDC это делается электронным способом с помощью транзисторных переключателей.
Контроллер двигателя BLDC определяет положение ротора либо с помощью датчиков (например, датчика эффекта Холла), либо без датчика. Датчики измеряют положение ротора и отправляют эти данные. Контроллер получает информацию и активирует транзисторы для переключения тока и включения нужной обмотки статора в нужное время.
Types of BLDC Motors and Controllers
Существует два типа двигателей BLDC, в зависимости от расположения ротора:
- Двигатель в движении (ротор находится внутри, а статор — снаружи двигателя),
- двигатель с внешним ротором (ротор находится снаружи, поэтому постоянные магниты вращаются вокруг статора вместе с корпусом двигателя).
Пусковые двигатели имеют более легкую конструкцию за счет меньшего диаметра вращения и более высокую скорость вращения. В свою очередь, из-за большего плеча и большей электродвижущей силы, действующей на ротор, опережающие двигатели имеют более высокий крутящий момент.
Существует два различных типа соединения обмоток для трехфазных бесщеточных двигателей постоянного тока:
- Соединение звездой ( Y ) или соединение звездой (обмотки встречаются посередине и образуют звезду),
- Соединение треугольником ( D ) (обмотки соединены последовательно и образуют треугольник).
При соединении звездой нейтральный проводник подключается к земле. Это может защитить двигатель от перенапряжения и перегрузки. Соединение треугольником не имеет нейтрального провода и поэтому больше подходит для двигателей с равномерной нагрузкой. Однако каждый из этих типов может обеспечить эффективную работу в зависимости от ваших требований.
Контроллеры двигателей BLDC различаются в зависимости от метода, который они используют для определения положения ротора. Вы можете проводить измерения с помощью датчиков положения или с помощью бессенсорной техники.
Среди датчиков есть несколько вариантов, в том числе:
- Датчики эффекта Холла,
- поворотные энкодеры,
- датчики переменного сопротивления,
- резольверы,
- оптические датчики.
Бессенсорный контроллер двигателя BLDC работает без датчика; он определяет положение ротора, оценивая обратную электродвижущую силу (обратную ЭДС), т.е. напряжение, создаваемое в обмотках статора вращающимся якорем. Измеряя обратную ЭДС, можно определить положение ротора: Чем ближе магнит ротора к ротору, тем выше обратная ЭДС.
Application Area of BLDC Motors and Controllers
Основные преимущества бесщеточного двигателя постоянного тока обусловлены его конструктивными особенностями. Электронная схема обеспечивает улучшенное переключение тока. Это обеспечивает более высокий крутящий момент, эффективное управление скоростью в широком диапазоне и, следовательно, лучшую производительность двигателя.
Использование электроники вместо механических изнашиваемых деталей делает двигатель решением, не требующим особого обслуживания, с длительным сроком службы. Кроме того, отсутствие щеток приводит к минимальным потерям мощности и низкому уровню электромагнитных помех (EMI) и шума.
По этой причине двигатели BLDC часто используются в оборудовании и системах с длительным временем работы, таких как
- промышленное применение,
- электромобили,
- беспилотные авиационные системы,
- компьютерное оборудование,
- бытовая электроника,
Благодаря такой компоновке двигатели BLDC могут приводить в действие небольшие, но высокоэффективные устройства, что также расширяет сферу их применения.
Конечно, существуют и недорогие системы с низким энергопотреблением, для которых не требуется программируемый контроллер бесщеточного двигателя постоянного тока с обратной связью. В данном случае использование двигателя BDC с простым контроллером может иметь больше смысла. Однако если вы предпочитаете более высокую производительность и долговечность, а не простоту и экономичность, бесщеточный двигатель постоянного тока может стать подходящим вариантом для вашего проекта.
Разработка контроллера двигателя BLDC требует высокого уровня знаний как в области электронного проектирования, так и разработки встроенного программного обеспечения. При правильной реализации модуль контроллера может обеспечить бесперебойную работу вашего двигателя и продлить срок его службы. В следующем разделе этой статьи вы узнаете больше о том, как разработать контроллер бесщеточного двигателя постоянного тока.
Встроенный контроллер предоставляет пользователю ряд полезных функциональных блоков: Порты ввода/вывода, многоканальный АЦП, таймер, коммуникационные интерфейсы SPI, I 2 C, USART. Это позволяет разработчику создать полноценный привод с широким набором функций:
Positional Sensing
Поскольку в обмотках нет щеток для переключения тока (коммутации), положение ротора относительно статора должно быть известно, чтобы ток можно было переключать извне. Существует три основных метода определения положения ротора:
- Датчики на основе эффекта Холла
- Hall-effect detector — детектор эффекта Холла (датчик эффекта Холла).
- Преобразователь с эффектом Холла (преобразователь с эффектом Холла)
Датчики эффекта Холла выдают напряжение в зависимости от напряженности магнитного поля (или, точнее, плотности магнитного потока). Три из них расположены на расстоянии 120° друг от друга и сконструированы таким образом, что их выходное напряжение быстро меняется, когда необходимо переключить фазные катушки. Это может облегчить внедрение коммутационной электроники. Внимание, некоторые датчики эффекта Холла могут быть с открытым разрядом, даже если в спецификации двигателя указано, что выход полностью управляемый!
Поэтому в энкодерном методе для определения положения ротора используется энкодер, прикрепленный к валу. Этот метод более сложен, чем метод эффекта Холла, поскольку выходной сигнал кодера должен быть декодирован. Энкодер обычно представляет собой инкрементный квадратурный энкодер, которому требуется счетчик для подсчета импульсов и логика определения фазы для определения направления. Даже при таком методе обратной связи могут возникать возмущения, которые вызывают отклонение показаний энкодера от правильного значения. Микроконтроллер PSoC имеет очень хороший элемент квадратурного декодера со встроенным фильтром шума.
В последние годы нулевое пересечение приобрело популярность, поскольку оно не требует датчиков и поэтому недорого в реализации. Это метод измерения напряжения плавающей обмотки во время работы (1 обмотка всегда не приводится в движение) для определения положения ротора. Недостатком этого метода является то, что он не работает ниже минимальной скорости (из-за слишком низкого напряжения).
Trapezoidal Control
Обычный пример трапецеидального (или блочного) цикла переключения двигателя BLDC с обратной связью по датчику Холла показан в таблице ниже. Это приводит двигатель в движение в определенном направлении. Это может быть использовано для создания LUT для быстрого переключения аппаратного/программного обеспечения.
Таблица коммутации | |||||
---|---|---|---|---|---|
Выход датчика | Вход для водителя | ||||
HS1 | HS2 | HS3 | A | B | C |
0 | 0 | 1 | X | HI | LO |
0 | 1 | 1 | HI | X | LO |
0 | 1 | 0 | HI | LO | X |
1 | 1 | 0 | X | LO | HI |
1 | 0 | 0 | LO | X | HI |
1 | 0 | 1 | LO | HI | X |
где H1, H2 и H3 — датчики эффекта Холла, а A, B и C — фазы двигателя трехфазного двигателя BLDC, соединенного в звезду. Обратите внимание, что для управления скоростью можно модулировать ШИМ-сигналом либо высокую, либо низкую сторону, либо оба входа драйвера.
6 выводов PSoC для питания трех входов эффекта Холла двигателя BLDC. Шесть прерываний требуется потому, что элемент прерывания PSoC поддерживает управление только по нарастающему фронту, поэтому для управления по спадающему фронту требуется инвертирующий строб и второе прерывание на датчик.
На рисунке ниже показано оборудование, используемое в микроконтроллере PSoC 5 для выполнения трапецеидального переключения на основе эффекта Холла. При правильной настройке mux этот метод управления может быть полностью реализован аппаратными средствами и полностью независим от процессора (при работе в стабильном рабочем цикле).
Схема PSoC с LUT и мультиплексорами для трапецеидального управления двигателем BLDC.
Sinusoidal Control
- Более тихая работа/уменьшение пульсаций крутящего момента благодаря трапециевидной форме.
- Более высокая эффективность/меньшее тепловыделение
- Возможность работы двигателя на более низких скоростях
- Комплексный контроль
- Встроенная микропрограмма требует больше места на флэш-памяти/ПЗУ
- Используется больше вычислительной мощности
- Немного меньший максимальный крутящий момент (хотя впрыск третьей гармоники может снизить этот показатель).
- При низких скоростях и переменных нагрузках обратной связи по эффекту Холла уже недостаточно, поэтому предпочтение отдается оптическим энкодерам.
- Задняя электромагнитная обратная связь по нагрузке невозможна
Синусоидальное управление (также известное как управление напряжением и частотой) сложнее трапецеидального, но обеспечивает более плавную работу и лучший контроль на низких скоростях.
Для повышения скорости рекомендуется использовать таблицы поиска (LUT) вместо функции sin(). Функция sin() на языке C требует больших вычислительных затрат и может легко вызвать задержки, влияющие на производительность алгоритма управления. Реализация sin() зависит от платформы, но при использовании компилятора GCC на процессоре PSoC 5 Cortex-M3 вычисление функции sin() три раза (по одному для каждой фазы) заняло около 24 000 тактовых циклов. Для процессора, работающего на частоте 48 МГц, это соответствует задержке около 500 мы. Учитывая, что 4-полюсному BLDC двигателю, вращающемуся со скоростью 6000 об/мин, требуется около 830с для переключения между состояниями. В каждом цикле переключения требуется разрешение не менее 6 бит (64 изменения ШИМ), и, как вы видите, задержка при вычислении sin() очень велика.
При использовании LUT, хранящей единицы с плавающей запятой, и небольшого количества умножений с плавающей запятой (не делений) на встроенном процессоре без аппаратной поддержки плавающей запятой (например, ARM Cortex-M3), можно ожидать, что процесс поиска и присвоения займет около 500-1000 тактовых циклов (возможно, 20 с при частоте 48 МГц). Это большое сокращение по сравнению с использованием функции sin()!
Данные, извлеченные из 16-битной синусоидальной LUT, разработанной для использования в управлении синусоидальными двигателями BLDC.
Фазовый сдвиг. Для управления синусоидальным сигналом требуется три ШИМ-сигнала, желательно с двумя выходами и регулируемым мертвым временем для синхронного переключения.