Методы эффективного управления инверторами напряжения в приводах переменного тока презентация

Содержание

ШИМ-модуляция базовых векторов Структура типового инвертора для управления 3-х фазным двигателем

Слайд 1 Современные методы эффективного управления инверторами напряжения в приводах переменного тока
Структура

типового инвертора напряжения
Классические методы ШИМ-управления инверторами – ассимметричная (фронтовая) и симметричная (центрированная) ШИМ
Принцип широтно-импульсной модуляции базовых векторов («векторной» ШИМ)
Основные состояния инвертора и базовые вектора
ШИМ базовых векторов
Сектора, внутри-секторный угол, компоненты базового вектора
Реализация «векторной» ШИМ на базе центрированной
Реализация «векторной» ШИМ с привязкой к верхней или нижней шине
Преимущества «векторной» ШИМ-модуляции

Слайд 2 ШИМ-модуляция базовых векторов
Структура типового инвертора для управления 3-х фазным двигателем


Слайд 3ШИМ-генератор
Выбор между классической и «векторной» ШИМ-модуляцией


Слайд 4Модуль ШИМ контроллера F28x

Таймер Т1 – является базовым для менеджера событий

A, на базе которого реализуется векторная ШИМ.
T1CON – регистр управления таймером T1.
COMCONA – регистр управления модулем сравнения.
ACTRA – регистр управления блоком формирования вектора и выходной логикой:
– биты 12÷14 (D2, D1, D0) определяют начальный базовый вектор;
– бит 15 (SVRDIR) определяет последовательность перебора базовых векторов (против/по часовой стрелке);
– остальные биты определяют полярность работы выходов PWM1-PWM6
DBTCONA – регистр управления генератором «мёртвого» времени.

Слайд 5Асимметричная ШИМ
Задержка переднего фронта для активного высокого!


Слайд 6Центрированная ШИМ
Задержка заднего фронта для активного низкого!


Слайд 7Состояния инвертора и базовые вектора


Слайд 8Состояния инвертора и базовые вектора


Слайд 9
Векторная ШИМ
Из условия инвариантности мгновенных значений электрических величин:


Слайд 10 ШИМ-модуляция базовых векторов
Базовые вектора- в одной стойке включен только один

ключ

Слайд 116 состояний, 6 базовых векторов


Слайд 12Векторная ШИМ
Для получения синусоидального напряжения постоянной амплитуды годографом вектора напряжения должна

являться вписанная в шестиугольник окружность, при этом:

Слайд 13Сравнение эффективности центрированной и векторной ШИМ-модуляции
Классическое управление в режиме
центированной ШИМ-модуляции
Управление

в режиме «векторной» ШИМ-модуляции

Слайд 14Реализация «векторной» ШИМ на базе центрированной


Слайд 15Реализация одного вектора двумя способами


Слайд 20Бутстрепное питание драйвера ключа


Слайд 216-секторная векторная ШИМ


Слайд 22Определение сектора и скважностей
Вектор напряжения в относительных единицах:
В матричной форме (в

осях α-β):

Тогда:


Слайд 23Определение сектора и скважностей
Для каждого сектора величины U*k,α, U*k+60,β, U*k+60,α, U*k,β

являются постоянными:

Слайд 24Определение сектора и скважностей
Введём вспомогательные переменные:
Тогда
Свяжем однозначно каждый базовый вектор с

определённым сектором:

С учётом этого, а также того, что γ≥0 и γ1≥0 можно определить знаки λ1, λ2 и λ3 для каждого сектора


Слайд 25Определение сектора и скважностей
В соответствии с этим можно составить итоговую таблицу,

согласно которой работает алгоритм определения сектора и скважностей базовых векторов по вычисленным значениям λ:

Слайд 26Ограничение вектора напряжения
Ограничение вектора на уровне максимальной амплитуды (постоянство фазы)


Слайд 27Инициализация Таймера 1
void PWM6SECT_Init(int period)
{
// Инициализируем регистр периода

Таймера 1
EvaRegs.T1PR = period;
// Настраиваем работу Таймера 1
// Вариант 1 (побитовая установка)
EvaRegs.T1CON.all = 0;
EvaRegs.T1CON.bit.TMODE = 1; // непрерывный счёт вверх-вниз
EvaRegs.T1CON.bit.TPS = 0; // делитель частоты = x/1
EvaRegs.T1CON.bit.TENABLE = 1; // разрешить работу таймера
// Вариант 2 (запись целиком всего регистра)
EvaRegs.T1CON.all =
TIMER_CONT_UPDN + \ // непрерывный счёт вверх-вниз
TIMER_CLK_PRESCALE_X_1 + \ // делитель частоты = x/1
TIMER_ENABLE; // разрешить работу таймера

Слайд 28Настройка «мёртвого» времени
// Настраиваем модуль генератора "мёртвого" времени

EvaRegs.DBTCONA.all =
DBT_VAL_15 + \ // период генерации "мёртвого" времени (12 мкс)
EDBT1_EN + \ // разрешить генерацию "мёртвого" времени для PWM1/PWM2
EDBT2_EN + \ // разрешить генерацию "мёртвого" времени для PWM3/PWM4
EDBT3_EN + \ // разрешить генерацию "мёртвого" времени для PWM5/PWM6
DBTPS_X32; // делитель частоты = x/32

Слайд 29Настройка полярности выходов ШИМ
// Настраиваем поведение (полярность работы) выходов ШИМ
EvaRegs.ACTRA.all

=
COMPARE1_AH + \ // PWM1 - активно "высокий" уровень
COMPARE2_AL + \ // PWM2 - активно "низкий" уровень
COMPARE3_AH + \ // PWM3 - активно "высокий" уровень
COMPARE4_AL + \ // PWM4 - активно "низкий" уровень
COMPARE5_AH + \ // PWM5 - активно "высокий" уровень
COMPARE6_AL; // PWM6 - активно "низкий" уровень

Слайд 30Инициализация модуля сравнения
// Настраиваем модуль сравнения
EvaRegs.COMCONA.all =
CMPR_ENABLE + \

// разрешить операцию сравнения
CMPR_LD_ON_ZERO + \ // перегружать регистры сравнения при T1CNT = 0 (underflow)
SVENABLE + \ // разрешить режим векторной ШИМ
ACTR_LD_ON_ZERO + \ // перегружать регистр ACTRA при T1CNT = 0 (underflow)
FCOMPOE; // разрешить выходы сравнения
// Инициализируем регистры сравнения
// Особенность модуля векторной ШИМ такова, что устройство сравнения не работает, если
// и CMPR1 = 0, и CMPR2 = 0, либо если CMPR1 > CMPR2; поэтому:
EvaRegs.CMPR1 = 1;
EvaRegs.CMPR2 = 2;

Слайд 31Инициализация портов ввода/вывода
// Настраиваем нужные дискретные порты ввода/вывода на выполнение

спецфункций
EALLOW; // разрешить доступ к защищённым регистрам
GpioMuxRegs.GPAMUX.all = 0x003F; // PWM1-PWM6 выходы
EDIS; // запретить доступ к защищённым регистрам

Слайд 32//Основная процедура модуля векторной ШИМ
void PWM6SECT_Update(
_iq UaRef,

// задание выходного напряжения по оси Alpha (отн.ед.)
_iq UbRef // задание выходного напряжения по оси Beta (отн.ед.)
)
{
long tmp;
_iq lambda1;
_iq lambda2;
_iq lambda3;
_iq knorm;
// Приводим компоненты заданного вектора напряжения к масштабу окружности,
// ограниченной базовыми векторами
UaRef = _IQmpy(UaRef, _IQ(0.866));
UbRef = _IQmpy(UbRef, _IQ(0.866));
// Проверяем и при необходимости ограничиваем вектор напряжения на уровне
// максимальной амплитуды синусоидального напряжения
knorm = _IQmag(UaRef, UbRef); // получаем текущую амплитуду вектора
if (knorm >= _IQ(0.866))
{
knorm = _IQdiv(_IQ(0.866), knorm); // получаем коэффициент коррекции
UaRef = _IQmpy(knorm, UaRef);
UbRef = _IQmpy(knorm, UbRef);
}
// Рассчитываем скважности базовых векторов непосредственно в единицах
// загрузки регистров сравнения
tmp = _IQmpy(_1_SQRT3, UbRef);
lambda1 = _IQmpy(EvaRegs.T1PR, (UaRef - tmp));
lambda2 = _IQmpy(EvaRegs.T1PR, 2*tmp);
lambda3 = lambda1 + lambda2;

Слайд 33 // По расчитанным скважностям определяем номер сектора, величины загрузки

// регистров сравнения и порядок перебора базовых векторов модуля векторной ШИМ
if (lambda1 <= 0)
{
if (lambda3 > 0) // Сектор 1
{
EvaRegs.CMPR1 = lambda3;
EvaRegs.CMPR2 = -lambda1+lambda3+1;
EvaRegs.ACTRA.all = 0x3666;
}
else if (lambda2 > 0) // Сектор 2
{
EvaRegs.CMPR1 = -lambda3;
EvaRegs.CMPR2 = -lambda3+lambda2+1;
EvaRegs.ACTRA.all = 0xE666;
}
else if (lambda1 != 0) // Сектор 3
{
EvaRegs.CMPR1 = -lambda1;
EvaRegs.CMPR2 = -lambda2-lambda1+1;
EvaRegs.ACTRA.all = 0x6666;
}
else // Сектор 4
{
EvaRegs.CMPR1 = lambda1;
EvaRegs.CMPR2 = lambda1-lambda3+1;
EvaRegs.ACTRA.all = 0xD666;
}
}

Слайд 34else
{
if (lambda2 > 0)

{
// Сектор 0
EvaRegs.CMPR1 = lambda2;
EvaRegs.CMPR2 = lambda2+lambda1+1;
EvaRegs.ACTRA.all = 0xB666;
}
else if (lambda3 < 0)
{
// Сектор 4
EvaRegs.CMPR1 = lambda1;
EvaRegs.CMPR2 = lambda1-lambda3+1;
EvaRegs.ACTRA.all = 0xD666;
}
else
{
// Сектор 5
EvaRegs.CMPR1 = -lambda2;
EvaRegs.CMPR2 = lambda3-lambda2+1;
EvaRegs.ACTRA.all = 0x5666;
}
}
}

Слайд 35Коррекция амплитуды вектора
// Приводим компоненты заданного вектора напряжения к

масштабу окружности,
// ограниченной базовыми векторами
UaRef = _IQmpy(UaRef, _IQ(0.866));
UbRef = _IQmpy(UbRef, _IQ(0.866));
// Проверяем и при необходимости ограничиваем вектор напряжения на уровне
// максимальной амплитуды синусоидального напряжения
knorm = _IQmag(UaRef, UbRef); // получаем текущую амплитуду вектора
if (knorm >= _IQ(0.866))
{
knorm = _IQdiv(_IQ(0.866), knorm); // получаем коэффициент коррекции
UaRef = _IQmpy(knorm, UaRef);
UbRef = _IQmpy(knorm, UbRef);
}

Слайд 36Расчёт скважности базовых векторов
// Рассчитываем скважности базовых векторов непосредственно

в единицах
// загрузки регистров сравнения
tmp = _IQmpy(_1_SQRT3, UbRef);
lambda1 = _IQmpy(EvaRegs.T1PR, (UaRef - tmp));
lambda2 = _IQmpy(EvaRegs.T1PR, 2*tmp);
lambda3 = lambda1 + lambda2;

#define _1_SQRT3 _IQ(0.5773503)


Слайд 37Определение номера сектора и скважностей
// По расчитанным скважностям определяем

номер сектора, величины загрузки
// регистров сравнения и порядок перебора базовых векторов модуля векторной ШИМ
if (lambda1 <= 0)
{
if (lambda3 > 0)
{
// Сектор 1
EvaRegs.CMPR1 = lambda3;
EvaRegs.CMPR2 = -lambda1+lambda3+1;
EvaRegs.ACTRA.all = 0x3666;
}
else if (lambda2 > 0)
{
// Сектор 2
……………………………………………………………

Слайд 38Настройка ШИМ для сектора 0
// Сектор 0

// Загружаем регистры сравнения
EvaRegs.CMPR1 = lambda2;
EvaRegs.CMPR2 = lambda2+lambda1+1;
// Задаём начальный базовый вектор и направление обхода
// Вариант 1 (инициализируем регистр через битовые поля)
EvaRegs.ACTRA.bit.D = 0x3; // 011b (U60)
EvaRegs.ACTRA.bit.SVRDIR = 1; // обход по часовой стрелке
// Вариант 2 (инициализируем сразу весь регистр целиком)
EvaRegs.ACTRA.all = 0xB666;

Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика