В этой статье описывается универсальный трехфазный преобразователь частоты на микроконтроллере(МК) ATmega 88/168/328P. ATmega берет на себя полный контроль над элементами управления, ЖК-дисплеем и генерацией трех фаз. Предполагалось, что проект будет работать на готовых платах, таких как Arduino 2009 или Uno, но это не было реализовано. В отличие от других решений, синусоида не вычисляется здесь, а выводится из таблицы. Это экономит ресурсы, объем памяти и позволяет МК обрабатывать и отслеживать все элементы управления. Расчеты с плавающей точкой в программе не производятся.
Частота и амплитуда выходных сигналов настраиваются с помощью 3 кнопок и могут быть сохранены в EEPROM памяти МК. Аналогичным образом обеспечивается внешнее управление через 2 аналоговых входа. Направление вращения двигателя определяется перемычкой или переключателем.
Регулируемая характеристика V/f позволяет адаптироваться ко многим моторам и другим потребителям. Также был задействован интегрированный ПИД-регулятор для аналоговых входов, параметры ПИД-регулятора могут быть сохранены в EEPROM. Время паузы между переключениями ключей (Dead-Time) можно изменить и сохранить.
- Введение
- Программное обеспечение, работа и компиляция
- Генерация синуса
- Скалярное(Вольт-частотное) управление (V/f)
- Схема устройства
- Выводы
В целом, программное обеспечение основано на документации Atmel AVR447, но было значительно изменено для использования описанного здесь контроллера. Аналогично, используется ЖК-библиотека Питера Флери, большое спасибо за это красивое программное обеспечение. К сожалению, программа не совсем вписывается в ATmega48 в текущем состоянии, но может работать с небольшой оптимизацией в строковых функциях. Чтобы избежать каких-либо вопросов - нет, код не работает в (устаревшей) ATMega8. Этот МК не имеет такого функционала таймеров и прерываний.
Характеристики:
Диапазон частот: 0,6 - 162 Гц;
Выходное напряжение: 0 - 325 В постоянного тока, максимально существующее напряжение промежуточной цепи;
Формы выходного сигнала: двугорбая синусоида или синус, выбираемые перед компиляцией.
Устройство оснащено стандартным ЖК-дисплеем HD44780 работающим в 4-битном режиме и тремя простыми (цифровыми) кнопками. При включении питания MК проверяет наличие перемычки, а затем переключается на внутренний или внешний режим управления. Печатная плата управления гальванически изолирована от выходного каскада двигателя. Для этой цели используются шесть оптронов HCPL3120. Эти оптроны обеспечивают сигналы управления для классического полумостового драйвера IR2110/2113, которые, в свою очередь, приводят в действие мощные ключи на MOSFET/IGBT. Данный выходной каскад следует понимать только как пример, конечно, другие конфигурации вполне возможны.
Используются три таймера ATmega и синхронизация OC (Output Compare) всех таймеров. Один из таймеров (Таймер 1) обеспечивает прерывание переполнения, которое используется для установки ступенчатой cкорости генерации синусоиды и для синхронной записи новых значения ШИМ во все таймеры. Исходный код также содержит подробные комментарии. Скорость шага прямо пропорциональна генерируемой частоте и задается пользователем. Подробнее об этом можно найти в разделе «Генерация синуса».
Для удобства пользователя МК вычисляет частоту в Герцах и отображает ее на дисплее. Аналогично, амплитуда выходного сигнала вычисляется по длительности импульса сигналов ШИМ и показана на дисплее в процентах от напряжения промежуточного контура. Поскольку трехфазные двигатели обычно управляются с характеристикой V/f, это также вычисляется до переполнения таймеров.
Вот фотографии прототипа. Управляющая часть была собрана на макетной плате 2,54 мм, силовая часть на макетной плате с шагом 5,08 мм. МК находится под ЖК-дисплеем. Справа изображен один из моих трехфазных двигателей. Этот двигатель мощностью 550 ватт и работал с 1969 года в моем насосе. Насос полностью заржавел и вышел из строя, но двигатель все еще прекрасно работает. Он был сделан Стефаном-Верке в Хамельне.
Программное обеспечение, работа и компиляция
Программное обеспечение сконструировано таким образом, что ШИМ генератор полностью работает в прерываниях. Основной цикл программы дополняет пользовательский интерйейс и управление ЖК-дисплеем. Всего есть два режима отображения:
Режим 1 - это нормальное меню, в котором кнопка 1 может использоваться для переключения между настройками V/f и настройкой частоты. Клавиши 2 и 3 уменьшают или увеличивают выбранное значение. Курсор на дисплее ниже редактируемого значения. Функция автоповтора с ускорением упрощает настройку.
Режим 2 - активируется одновременным нажатием кнопок 1 и 2. Это меню используется для установки значений ПИД-регулятора и Dead-Time, начальных значений для V/f и частоты и для их записи в EEPROM. Опять же, клавиша 1 переключается между параметрами, а клавиши 2 и 3 используются для настройки. Одновременное нажатие 1 и 2 сохраняет значения, одновременное нажатие 1 и 3 выходит из режима без сохранения, но сохраняет значения для V/f и частоты, которые в настоящее время установлены в меню режима 1.
При работе с внешним сигналом в режиме 1 отображаются значения, но их нельзя изменить, нажав кнопку. С другой стороны, режим 2 выбирается, а также работает с внешним управлением для настройки значений ПИД и Dead-Time. Прерывание инициируется аналого-цифровым преобразователем. Оно считывает значение АЦП и сохраняет его в глобальных переменных. Конструкция «switch-case» позволяет вам использовать больше каналов АЦП, если это необходимо. DIP-вариант ATMega88/168 не дает этой возможности, здесь используются не все каналы АЦП. Однако в версии QFP еще есть каналы АЦП 6 и 7, они могут использоваться.
Описанная здесь схема позволяет применять как частотные, так и V/f-значения в качестве аналоговых сигналов. Без внешних делителей напряжения на входе ожидается в пределах 0-5 В.
Библиотеку ЖК-дисплея пришлось слегка модифицировать, поскольку здесь используется два разных порта для данных и линий управления. Изменения в lcd.h должны применяться, поскольку аппаратные выходы ШИМ МК не могут быть изменены.
Кстати, за исключением ПИД-регулятора и ЖК-подпрограмм, все части программного обеспечения были объединены в один файл, чтобы дать компилятору наилучшую возможную оптимизацию. В качестве параметра оптимизации "-О" оправдал себя. Перед компиляцией не следует забывать вводить частоту использованного кристалла в Гц в настройках проекта. В Linux файл Makefile должен быть дополнен -DF_CPU 16000000, в AS4 в разделе «Настройки проекта -> Общие». Однако использование поставляемого * .aps в качестве шаблона проекта не требуется. Пакет программного обеспечения содержит все файлы для создания проекта с помощью AVR Studio 4.
Исходный код состоит из следующих файлов:
main.c, pid.c, lcd.c
и заголовочные файлы:
vfd.h, vfdtables.h, pid.h, lcd.h
Особое внимание заслуживает vfd.h. Здесь описаны все определения проекта. Если вы посмотрите main.c, вы найдете много констант, все они будут объявлены в vfd.h. Наиболее часто используемыми переменными являются скорость шага (inco), указатель на таблицу синусов (sinTableIncrement), амплитуду (amplitude) и отношение V/f (VperHz). Эти переменные хранятся непосредственно в регистрах для увеличения рабочей скорости. Вероятно, это было бы необязательно, но в качестве примера, использующего переменные прямого реестра, это может быть полезно и для других проектов. Другая переменная прямого регистра (fastFlags). Эта структура используется поразрядно, но здесь используются только 4 бита. Один бит для переключения между внешним и внутренним управлением, затем 2 бита для используемой формы сигнала (либо «неопределенный», либо «синус»), а затем еще один бит для желаемого направления вращения. Параметры отображения вычисляются с использованием целочисленной математики, так как числа с плавающей точкой следует избегать. Регулярное прерывание таймера вызывает процедуру «SpeedController» (после 200 переполнений таймера). Здесь, во внешнем режиме управления, вызывается ПИД-регулятор и вычисляются параметры отображения. Индикация ЖК-дисплея выполнена с использованием командного интерпретатора.
После сброса сначала инициализируются ЖК-дисплей и порты, и все предварительно назначеные переменные. За этим следует инициализация таймеров, прерываний, АЦП и ПИД-регулятора. После проверяется состояние перемычек и считывается EEPROM. Наконец, разрешается глобальное прерывание и, следовательно, начинается генерация частоты.
Во время процесса диагностические коды выводятся на ЖК-дисплей, чтобы сообщать о любых проблемах с «залипшими» клавишами или другими проблемами. В конце следует основной цикл, в котором запущен «командный интерпретатор» (execCommand).
Командный интерпретатор не делает ничего, кроме как сначала проверяет нажатые клавиши. Если он найдет одну или несколько нажатых клавиш, будет выполнена одна из функций. После этого ЖК-дисплей будет обновлен. Второй уровень команд делает это для расширенного меню, так как он работает одинаково. Все настройки гарантируют, что значения не могут быть «за пределом», так как это часто приводит к фатальным последствиям. Так, например, Невозможно переключить рабочую частоту от 0,1 Гц непосредственно до 162 Гц или установить "Dead-Time" в ноль.
Еще одно замечание по AVR Studio 4, последняя версия 4.19, чтобы избежать ошибок компиляции, вы должны использовать AVR Toolchain 3.3.1 - 1020, иначе вас будут беспокоить ошибки. В качестве альтернативы WinAVR подходит - например, версия 20100110.
Генерация синуса
Значения синусоид для трех фаз (U, V и W) сохранены в массиве, который находится в файле «vfdtables.h». Выходы фаз в настоящее время обозначаются L1, L2 и L3, а также R, S и T. Сгенерированная частота определяется тем, после скольких вызовов в ISR "TIMER1_CAPT" указатель увеличится в таблице. Если «inco», например "1", указатель в таблице увеличивается после 255 проходов, а следующее значение таблицы загружается в таймеры. Так как таблица имеет длину 192, это приводит к выходной частоте 0,635 Гц, что является следствием частоты повторения ШИМ 31,25 кГц/256 = 8,192 мс * 192. Если «inco» 255, следующее значение таблицы уже загружается после 1/31,25 кГц = 32 мкс, и это приводит к выходной частоте 1/(32мкс * 192) = 162,7 Гц. Направление вращения изменяется путем замены значений для V и W перед загрузкой таймеров. Доступ к таблице и загрузка таймеров ШИМ выполняются в процедуре прерывания переполнения таймера 1. Таким образом, эта процедура представляет собой ядро генерации синуса.
Для работы полумостов требуется использование паузы "Dead-Time", благодаря чему ни верхний, ни нижний ключи полумоста не могут быть включены одновременно. Без этой паузы происходило бы короткое замыкание, что ни в коем случае нельзя допустить. (Этот случай часто упоминается как «прострел»). Поскольку "Dead-Time" сильно зависит от используемых драйверов, пауза была сделана регулируемой. Процедура InsertDeadband вычисляет требуемое "Dead-Time" для каждого таймера перед записью значений ШИМ.
"Dead-Time" хранится в EEPROM. По соображениям безопасности используется минимальное значение вместо недопустимого, если есть ошибки чтения EEPROM или установлено слишком малое значение. Слишком большое значение "Dead-Time" не вредно, но ограничивает диапазон использования ШИМ и эффективность привода. Разумеется, при первоначальном запуске рекомендуется установить большое значение "Dead-Time", а затем уменьшить его при соблюдении текущего потребления. Единица "Dead-Time" (DEAD_TIME_HALF), отображаемая на дисплее, представляет собой время одного цикла МК. Полученное "Dead-Time" на полумосте в два раза выше, чем цикл МК. В показанном примере было использовано значение 20, что привело к значению "Dead-Time" (2*20*62,5 нс = 2500 нс). Для быстрых MOSFET или IGBT это значение может быть уменьшено. Потребление тока можно измерить на шунте R7. Внимание: эта часть не отделена от сети гальванически и с ней следует обращаться с осторожностью. Прямое соединение между GNDI и PE неизбежно приводит к повреждению элементов при подаче питания.
Форма сигнала фаз адаптирована к работе двигателей в приведенной таблице. Другие формы сигнала могут быть сформированы путем замены значений таблицы. Опция «#define PURE_SINE_DRIVE» теперь находится в vfd.h. В этом случае генерируются 3 стандартные синусоиды с фазовым сдвигом на 120° без типичных двугорбых синусоид для BLDC. Если МК работает с частотой, отличной от 16 МГц, параметр «DIVISIONEER» в файле «vfd.h» также должен быть изменен так, чтобы дисплей работал правильно. Если вам нужен только источник переменного тока, вы должны заменить таблицу на реальные значения синуса (как указано в обновлении) и создать только два выходных каскада. Между двумя выходами преобразователя будет регулируемый потенциал переменного тока.
При вращении двигателя с полной скоростью не следует изменять направление вращения на противоположное. В любом случае рекомендуется остановить двигатель, а затем изменить направление вращения.
Скалярное(Вольт-частотное) управление (V/f)
Скалярное управление является наиболее часто используемым методом для преобразователей частоты. При скалярном методе управления, скорость асинхронного электродвигателя контролируется установкой величины напряжения и частоты статора, таким образом, чтобы магнитное поле в зазоре поддерживалось на нужной величине. Для поддержания постоянного магнитного поля в зазоре, отношение В/Гц должно быть постоянным на разных скоростях. На низких оборотах необходимо компенсировать падение напряжения на сопротивлении статора, поэтому отношение В/Гц на низких оборотах устанавливают выше чем номинальное значение. Скалярный метод управления наиболее широко используется для управления асинхронными электродвигателями.
Характеристика «Вольт/частота» означает, что двигатель работающий на 100% частоте может работать с полным номинальным напряжением, но с понижением частоты также должно быть отрегулировано рабочее напряжение. Например на двигатель работающий на 50% от номинальной частоты не должно подаваться более 50% рабочего напряжения и т. Д. Точные значения различны и поэтому должны быть взяты из документации на двигатель или определены путем проб и ошибок.
Индикация обеспечивает достигнутый крутящий момент («мощность») двигателя. Он должен быть не больше, чем может обеспечить двигатель. Громкий шум, например, знак слишком большого напряжения, отношение V/f должно быть меньше. Тем не менее, часто достаточно предоставить двигателю 100% рабочее напряжение при номинальной частоте (например, 50 Гц), а на пониженной частоте МК также пропорционально уменьшит среднее напряжение на обмотках двигателя.
В схеме не используются какие-либо специальные компоненты. 5-вольтовый DC-DC преобразователь используется от зарядки мобильного телефона, а в случае 18-Вольтового преобразователя был использован небольшой источник питания для светодиодных светильников, где путем изменениея номиналов компонентов было увеличено напряжение с 12 до 18 Вольт. Требуемый ток зависит от выбранной микросхемы драйвера полумоста и ключей, находится в пределах около 150 мА для всех трех каналов. Как всегда, хорошая гальваническая развязка максимально важна для компонентов драйвера. Импульсы в нагрузке, вызванные переключением затворов, должны сглаживаться конденсаторами, как показано на схеме. 5-вольтовая часть питания потребляет около 40-80 мА без подсветки ЖК-дисплея, а львиная доля идет на светодиоды оптопар. Импульсные источники питания (например, зарядное от мобильного телефона) питаются от сети переменного тока. Так как в схеме имеется диодный мост B1, можно удалить внутренние диодные мосты этих источников питания и подключится уже к сети постоянного тока V+.
Известно, что частотные преобразователи генерируют высокочастотные импульсы поэтому необходимо исключить попадание их в бытовую сеть.Также желательно, чтобы более длинные провода от выхода преобразователя до потребителя были экранировны, либо проходили через фильтр непосредственно на выходе преобразователя. Частота ШИМ составляет около 31 кГц и имеет крутые фронты, поэтому необходимо уделить не мало внимания для подавления этих помех. Конденсаторы C15 - C18 должны быть класса X2, причем C17/C18 типа Y. Подходящими являются специально предназначенные конденсаторы для подавления помех, если они имеют необходимый диэлектрический запас прочности. Как видно на рисунке, я использовал готовый сетевой фильтр с разъемом для шнура питания. Шунт R7 (шунт) должен выдерживать рабочий ток двигателя, я использовал 5-ваттный керамический резистор. Высокий пусковой ток, когда конденсатор постоянного тока не заряжен, ограничен R11, высокоамперный NTC, который также распространен в блоках питания ПК. здесь хорошо подходит тип 644, например, Philips.
Кстати, 18 Вольт используются только потому, что доступные мне в данный момент оптопары типа 3120 требуют напряжения питания не менее 16 вольт. Если бы у меня были оптопары типа HCPL3180, 12 Вольт было бы достаточно.
Показанный на схеме выходной каскад (показана только одна фаза, две другие идентичны) имеет встроенную токовую защиту, реализованную на шунте R7 и транзисторах T1 и T2. Если ток потребления слишком высок (около 2 А), T1 открывается и включает T2. Высокий уровень на коллекторе T2 активирует вход отключения микросхемы драйвера. Дросселя L4 и L3 должны быть сильноточными, имеющими запас по максимальному току двигателя.
Конденсаторы, подключенные параллельно кнопкам, предотвращают поступление помех от соседних линий LCD и PWM и обеспечивают минимальный ток на кнопках. Кнопки циклически опрашиваются командный интерпретатором и, следовательно, не требуют отдельной функции антидребезга.
Рядом с ISP разъемом имеется дополнительный разъем SV1. К его контактам могут быть подключены два аналоговых сигнала (контакты 6 и 8). Контакт 6 (5 канал АЦП) управляет отношением V/f, сигнал управления частотой подается на контакт 8 (4 канал АЦП). Контакт 4 переключает между внешним (АЦП) и внутренним (кнопка и ЖК-дисплей) управлением. Когда контакт замкнут на землю, система переключается на внешнее управление. Контакт 2 используется для изменения направления вращения двигателя.
Важным замечанием является различие между GND и GNDI: GND - это часть питания управляющей электроники, отделенная от сети, в то время как GNDI подключается напрямую к сети. Ни при каких обстоятельствах нельзя соединять GND и GNDI! Наоборот, в любом случае следует соблюдать достаточные безопасные расстояния. Поэтому в моем прототипе плата управления и питания полностью отделены друг от друга и соединены только платой оптопар.
Из-за простоты управляющей части и использования стандартных компонентов представленный преобразователь частоты является достойным проектом, чтобы продемонстрировать возможности современных микроконтроллеров и поэкспериментировать с управлением двигателями. В зависимости от используемого выходного каскада возможно управлять другими типами двигателей, например, от электромобилей, жестких дисков, зеркальных головок лазерных принтеров. Изменение частоты ШИМ, производится в подпрограмме TimersInit(). Другие настройки прескалера для всех 3-х таймеров могут изменены с помощью битов «CSx1», в настоящее время установленных на 0. Конечно, MК также может работать с внутренним генератором 8 МГц. Это дает еще два свободных контакта порта, например, для осуществления обратной связи по току или контроль скорости.
Внешнее управление аналоговыми входами позволяет использовать привода серводвигателей, таких как "Capstan" и, например этими средствами стабилизировать PLL. Встроенный ПИД-регулятор с регулируемыми параметрами позволяет адаптировать его к широкому кругу задач. В любом случае мне интересно, что читатель может подумать о дополнениях, и я с нетерпением жду предложений и идей. Еще одно замечание: стоит сравнить цены различных возможных контроллеров. Зачастую «большой» ATmega328 теперь дешевле купить, чем его младших братьев. Если используется другой контроллер (Mega88, 168 и 328 все совместимы друг с другом), это следует учитывать в настройках проекта.
Файлы к статье "Частотный преобразователь для асинхронного двигателя на AVR" | |
Описание:
Исходный код(Си), схема Eagle |
|
Размер файла: 202.16 KB Количество загрузок: 3 758 | Скачать |
Комментарии
Контакт 2(PD7) разъема SV1 используется для изменения направления вращения двигателя.
перемычки для отключения защиты по току ir2110
Приветствую, помогал хороший товарищ
Да, можно
ISP - разъем для программировани я микроконтроллера
SV1 - разъем для подключения внешних элементов управления, потенциометров, переключателей, все подробно описано в статье