Довелось мне, по роду своей деятельности, писать программу для разгона раскрутки и управления трехфазным синхронным двигателем. Далее я постараюсь подробно описать как я это реализовал.
График раскрутки двигателя выглядит таким образом:

Как видно, что необходимо не только увеличивать частоту, но и амплитуду, причем она растет не с нуля, а с 4-х вольт и при частоте в 80 Гц, должна достигать своего максимума. Ну и т.к. это трехфазный двигатель, то должно быть 3 синусоиды, причем сдвинутые относительно друг друга на 120 градусов. Также дополнительным условием было, чтобы на 80 Гц двигатель выходил не меньше чем через 30с, поэтому я решил использовать секунду на герц (100 Гц достигается за 100с).
В контроллере с которым я работаю имеется как раз 3 ШИМ’а и я решил использовать их, а не заморачиваться возиться с внешними ЦАП’ами.
Первая проблема с которой я столкнулся это то, что сигнал с выхода ШИМ будет только положительный, т.е. синусоида будет выше нуля, для этого пришлось разбить ее на полуволны и строить их отдельно. Вот так будет выглядеть синусоида при минимальной амплитуде.

А вот так при максимальной.

чтобы получить положительную полуволну:
Как видно из следующего рисунка теперь у меня синусоида крутится возле значения 128, теперь достаточно аппаратно сдвинуть сигнал и установить ноль на значении 128 и она станет биполярной.

Синусоида состоит из 128 точек, этого более чем достаточно. После низкочастотного фильтра получается практически идеально гладкая. Амплитуда растет тоже довольно плавно (таблица коэффициентов состоит из 80 значений), умножаем на значение из таблицы и отбрасываем младший байт:
Для увеличения частоты я использовал 16 разрядный таймер TMR0, значение его периода берется из таблицы, которая состоит из 100 значений (от 1 до 100 Гц). Формула для вычисления выглядит следующим образом: 65535-sec/clk/smpl/Hz, где Hz меняется от 1 до 100.
- 65535 — максимальное значение 16 разрядного таймера
- sec — 1с в наносекундах, значение 1000000000
- clk — длительность 1 такта в наносекундах, при кварце в 32 Мгц равна 125
- smpl — количество точек на период, значение 128
Программа разрабатывалась для микроконтроллера PIC17 с использованием компилятора CC7A норвежской компании B Knudsen Data.
Вот, собственно, таблица значений для таймера.
Еще 2 таблицы со значениями синуса и коэффициентами амплитуды соответственно.
Обработчик прерывания таймера, выглядит следующим образом.
В настоящее время практически 60% всей вырабатываемой электроэнергии потребляется электродвигателями. Поэтому достаточно остро стоит задача экономии электроэнергии и уменьшения стоимости электродвигателей.
Трехфазные асинхронные двигатели считаются достаточно универсальными и наиболее дешевыми, но подключать их к однофазной сети и управлять частотой вращения достаточно сложно.

Рис. 1. Числоимпульсный метод управления асинхронным двигателем с частотой модуляции 10 кГц.
Заманчива перспектива увеличения номинальной частоты вращения двигателя в двое и более раз или использование малогабаритных двигателей, рассчитанных на частоту питающей сети 400. 1000 Гц и имеющихменьшую массу и стоимость. В данной радиолюбительской конструкции предпринята попытка решения проблемы.
Предлагаемая система управления работает от однофазной сети 220 В и позволяет плавно менять обороты двигателя и отображать частоту инвертора на двухразрядном цифровом индикаторе.
Дискретность изменения частоты инвертора составляет 1 Гц и регулируется в пределах от 1 до 99 Гц. В предлагаемой схеме используется числоимпульсный метод управления асинхронным двигателем с частотой модуляции 10 кГц (рис.1), позволяющий получать синусоидальный ток на обмотках двигателя.
Существует более перспективный, широтно-импульсный метод (ШИМ, PWM — англ.), использующий управление с обратными связями и без них, с частотами модуляции от 3 до 20 кГц и всевозможные методы коммутации, позволяющие увеличить выходное напряжение инвертора на 15.27% по сравнению с питающей сетью, т.е. до 354.390 В.
Принципиальная схема
Схема, показанная на рис.2, состоит из: управляющего устройства D2 (применен микроконтроллер PIC16F628-20/P, работающий на частоте 20 МГц), кнопок управления "Пуск" (SA1), "Стоп" (SA2), кнопок увеличения и уменьшения частоты SA3 и SA4 соответственно, двоично-семисегментного дешифратора D1, светодиодных матриц HG1 и HG2, узла торможения VT9, VT10, K1.
В силовой цепи используется трехфазный мостовой драйвер D4 IR2130 фирмы International Rectifier, имеющий три выхода для управления нижними ключами моста и три выхода для ключей с плавающим потенциалом управления.

Рис. 2. Принципиальная схема микроконтроллерного управления асинхронным трехфазным двигателем.

Рис. 2. Принципиальная схема микроконтроллерного управления асинхронным трехфазным двигателем (продолжение).
Данная микросхема имеет систему защиты по току, которая в случае перегрузки выключает все ключи, а также предотвращает одновременное открывание верхних и нижних транзисторов, тем самым предотвращает протекание сквозных токов. Для сброса защиты необходимо установить все единицы на входах HNx, LNx. В качестве силовых ключей применены МОП-транзисторы IRF740.
Цепь перегрузки состоит из датчика тока R10, делителя напряжения R7R9, позволяющего точно установить ток срабатывания защиты, и интегрирующей цепочки R6C3, которая предотвращает ложное срабатывание токовой защиты в моменты коммутаций. Напряжение срабатывания защиты составляет 0,5 В по входу ITRP (D4).
После срабатывания защиты на выходе FAULT (открытый коллектор) появляется лог."0", зажигается светодиод HL1 и закрываются все силовые ключи.
Для более быстрой разрядки емкостей затворов силовых транзисторов можно установить параллельно резисторам, включенным в цепь затвора, диоды в обратном направлении. Двигатель необходимо включить по схеме звезды.
Источник питания состоит из мощных диодов VD11-VD14, токоограничительного резистора R20, фильтрующей емкости C10, емкости C11, предотвращающей всплески, которые возникают при коммутациях на паразитных индуктивностях схемы, а также маломощного трансформатора T1, стабилизатора напряжения 15 В D5 для питания схемы драйвера, стабилизатора напряжения 5 В D3 для питания микроконтроллера и схемы индикации.
При использовании более мощного двигателя вместо транзисторов IRF740 можно использовать IGBT-транзисторы типов IRGBC20KD2-S, IRGBC30KD2-S, при этом диоды VD7-VD10, VD15, VD16 следует выпаять. Конденсатор C11 типа К78-2 на напряжение 600. 1000 В. Вместо VD1-VD6 желательно применить сверхбыстрые диоды типа 10DF6, а емкости С15-С17 уменьшить до 2,2. 4,7 мкФ, которые должны быть рассчитаны на напряжение 50 В. Трансформатор T1 мощностью 0,5.2 Вт от калькулятора с перемотанной вторичной обмоткой. Обмотка намотана проводом 00,2 и должна выдавать 19.20 В.
Печатная плата и прошивка МК
Печатная плата (рис.3) выполнена из одностороннего стеклотекстолита, для того чтобы можно было воспользоваться утюго-лазерной технологией изготовления. Светодиод HL1, матрицы HG1, HG2, кнопки SA1-SA4 установлены со стороны дорожек.

Рис. 3. Печатная плата.
HEX-формат программы приведен в таблице. В момент записи в нулевую ячейку ОЗУ необходимо поместить шестнадцатеричное число от 1 до 63, начальная частота инвертора.

Коды для прошивки в текстовом формате: Скачать
Программа выполнена таким образом, что двигатель стартует с плавным набором скорости от 0 до установленной частоты примерно за 2 с (эта константа находится в ячейках 0207 и 0158 таблицы). Если нужно увеличить скорость нарастания в два раза, то вместо кодов 3005 необходимо записать 300A.
С.М. Абрамов, г. Оренбург, Россия. Электрик-2004-08.
- Козаченко В. Основные тенденции развития встроенных систем управления двигателями и требования к микроконтроллерам//СЫр№ш -1999. — №1.
- Обухов Д, Стенин С., Струнин Д, Фрадкин А. — Модуль управления электроприводом на микроконтроллере PIC16C62 и драйвере IR2131//ChipNews. — 1999. -№6.
Многообразие материалов на эту тему практически не оставляет шансов на оригинальность, но кое-что можно представить, дабы сократить время на поиск нужных решений и обозначить «подводные камни». И прежде всего представить практическое, без академичности, которая векторными диаграммами управления и матрицами отпугивает многих, а привлекает только тех, кому нужен реферат потолще.
Необходимо отметить, что выбор индуктивной нагрузки, коей является двигатель, вовсе не отвергает данное решение для управления освещением или нагревательными элементами. Двигатель, достаточно капризный элемент и не всякий подходит для данной схемы. И более того, режим плавного управления мощностью двигателя не всегда удается осуществить. Это зависит от многих факторов: мощность двигателя, инерционность нагрузки на валу, реактивные и активные параметры обмоток. Для надёжного решения всех этих проблем предназначены частотные инверторы. Тем не менее, данная схема значительно проще по сложности, чем частотное управление и иногда обеспечивает приемлемые результаты.
Вот совокупность всех аспектов проблемы управления:
- Прежде всего, слово «микроконтроллер» в заглавии статьи, говорит о том, что управлять нагрузкой необходимо не потенциометром, (таких решений предостаточно), а именно микроконтроллером.
- Обязательное наличие гальванической развязки.
- Плавное управление мощностью, а не старт-стопное.
- Контроль перехода через ноль (Zero-Cross).
- Некоторые особенности выбора сглаживающего фильтра RC snubber.
- Программная реализация событий управления на примере Atmega16A.
- Обзор аналогичных решений в Интернете.
Схема 1. Узел управления нагрузкой.
Схема 2. Датчик перехода через ноль (Zero-Cross).
Цепи:
- VCC – 5 вольт, питание низковольтной части узла, полученное стабилизатором напряжения;
- GND – общая точка низковольтной части;
- DRV – выход микроконтроллера, для управления нагрузкой (PC6 для Atmega16A);
- ZERO — вход TTL-сигнала (PD2/INT0 для Atmega16A) от события перехода через ноль сети 220;
- L,N — фаза и нейтраль сети 220;
Элементы:
- MOC3052 — оптотриак (симистор), обеспечивающий гальваническую развязку;
- BT136 — триак (симистор), обеспечивающий управление мощной нагрузкой;
- BC847 – транзистор, управляющий MOC3052;
- R1,R2 – делитель, запирающий транзистор по умолчанию.
- RS,CS — сглаживающий фильтр RC snubber, необходимый только для индуктивной нагрузки.
- PC814 — оптрон датчика Zero-Cross;
- RZ0,RZ1 — токозадающие резисторы, двухваттные;
- SN74HC14D – триггер Шмидта, для повышения помехоустойчивости;
- М — двигатель, схема включения типа «звезда»;
- CF — фазосдвигающий конденсатор.
Диаграмма фазового управления.
Оптрон PC814 обладает той особенностью, что содержит два внутренних светодиода, и реагирует на разнополярное напряжение при токе 10 мА. Поэтому характер импульсов сигнала ZERO именно такой, как показано на диаграмме. На токозадающих сопротивлениях RZ0 и RZ1 падает практически всё напряжение питающей сети, поэтому на их ваттности не надо экономить. Вместо двух последовательных сопротивлений можно использовать одно, соответствующего типа.
Сигнал ZERO попадает на микроконтроллер PD2/INT0 и вызывает аппаратное прерывание ниспадающим фронтом. Как будет показано далее, программа обработки прерывания запускает счетчик, время работы которого и будет определять фазовую задержку включения симистора относительно события перехода через ноль. Сигнал DRV формируется этой задержкой. На диаграмме показано, что передний фронт сигнала DRV смещается так, что энергетика на нагрузке уменьшается синхронно, через каждые 10 миллисекунд. Этого можно достичь только программным способом.
Если задача управления нагрузкой простая (включить/выключить) , то датчик Zero-Cross можно и не применять. Однако его использование уменьшает помехи при коммутации сильноточной нагрузки, да и режим, в котором пребывает силовой симистор более щадящий и он меньше нагревается. Используя данный подход в полном объеме, можно строить достаточно сложные воздействия на двигатель.
В представленной схемотехнике имеется один не большой «подводный камушек», о который можно споткнуться. При инициализации микроконтроллера может пройти достаточное время, это связано с конкретной задачей, когда его выходные сигналы находятся в третьем состоянии. В течении этого времени необходимо запереть транзистор BC847. Иначе возможен скачек напряжения, который пройдет на нагрузку.
Сглаживающий фильтр RC-snubber.
Необходимо иметь в виду, что при отключении и включении симистора из-за реактивного сопротивления обмоток может возникать короткий бросок и даже затухающие колебания на нагрузке. Для предотвращения этих бросков служит фильтр RS, CS. В литературе по триакам приводятся номиналы этих элементов: RS = 39 Ом, CS = 0.01 мкФ. При этом для мощности RS нет рекомендаций. Мой практический опыт говорит о том, что сопротивление RS горит так, что выгорает весь узел с симистором. При этом оборудование испытывалось, собственные колебания подавлены, работа стабильная, но иногда у заказчика происходит пробой узла. Причины этих возгораний носят случайный характер и систематизации не поддаются. Можно только предположить, что причиной может быть не сам узел симистор – двигатель, а наводимая на него через питающую сеть импульсная помеха от другого оборудования.
И так, для подавления собственных колебаний представленные номиналы вполне оправданы, и вообще-то не критичны. RS должно быть того же порядка, что и активное сопротивления двух обмоток (схема «звезда»). Собственные колебания могут быть от 1 до 10кГц. На этой частоте реактивное сопротивление CS от 16кОм до 1.6кОм, поэтому всё напряжение приложено к CS. Гораздо хуже, когда возникает внешняя импульсная помеха, её параметры не известны.
Поэтому мои рекомендации таковы:
RS эквивалентно активному сопротивлению обмоток, а мощность не менее двух ватт. CS большего номинала чем 0.01 мкФ, с напряжением 400V и более.
Вот здесь есть интересные материалы на эту тему:
Программная реализация управления.
Пример программы реализован в проекте AVR-studio Ver 4.18 build 716.
- Частота процессора 8 МГц внутренняя без кварца.
- Регистр счетчика TCCR2 настроен на внутреннее прерывание с периодом 20 мкс.
- Программа обработки этого прерывания SIGNAL(SIG_OUTPUT_COMPARE2) вызывает процедуру drv_act().
- Процедура drv_act() в зависимости от флага drv_faza0 запускает счетчик задержки относительно момента перехода через ноль.
- Процедура обработки прерывания SIGNAL (SIG_INTERRUPT0) от датчика Zero-Cross управляет флагом drv_faza0.
- Весь период полуволны в 10 мс разбивается на 500 значений задержки.
- В массиве pwm_array[] заранее формируется набор задержек. Перебор индекса массива происходит в программе обработки прерывания SIGNAL (SIG_INTERRUPT0).
Более подробно см. проект.
Ниже будет описано, что можно получить, манипулируя полуволнами, но автор, работая над реальным проектом управления двигателем, не ограничился статическими значениями задержек. Для более стабильного результата была реализована следящая система поддержания заданных оборотов двигателя на основе тахометра. Программно это поддержано в процедуре NormalCtrl(), но описания этой части не входит в рамки данной статьи.
Управление двигателем с помощью манипуляций полуволнами.
- Двигатель: асинхронный , 3 фазы, 250 Ватт, 220 В, 2730 об/мин, тип АИР56В2N3.
- Фазосдвигающий конденсатор CF = 10мкФ х 400 В.
- Активное сопротивление каждой обмотки Ra = 39 Ом.
- RS = 46 Ом, CS = 0.22 мкФ.
- Двигатель не нагружен, холостой ход.
- Напряжения снимались через резистивный делитель относительно нейтрали N.
На диаграммах 1,2,3 зелёный график – напряжение на нагрузке (LOAD), жёлтый график – точка между сопротивлением RZ1 и PC814, она показывает реальные моменты перехода через ноль.
При определённой задержке фазы включения симистора, близкой к той, что показана на диаграмме 1, наблюдалась устойчивая работа двигателя на оборотах в два раза меньше максимальных. Однако незначительное уменьшение этой задержки, приводило к тому, что двигатель, постепенно разгоняясь, выходил на полные обороты и симистор открывался полностью, игнорируя управляющее воздействие.
Диаграмма 1. Начало вращения, постепенный набор оборотов.
Диаграмма 2. Обороты, близкие к максимальным, вырождение участков закрытого симистора.
Диаграмма 2. Обороты максимальные, симистор открыт.
Можно предположить, что срыв работы симистора, как управляющего элемента, объясняется динамическим изменением реактивной составляющей сопротивления обмоток двигателя, в результате чего симистор переходит в открытое состояние. К этим сложностям добавляется то обстоятельство, что неустойчивость симистора так же зависит и от момента на валу двигателя. Если удалось подобрать фазы задержек на холостых оборотах, то при нагрузке для устойчивой работы эти параметры будут совершенно иными.
Однако же заставить работать двигатель на оборотах, кратных максимальным можно. Получить достаточно плавную регулировку, правда, не получится. Самое же проблематичное это получить вращение двигателя при оборотах в диапазоне 0.75MAX