Современные методы эффективного управления инверторами напряжения в приводах переменного тока
ШИМ-модуляция базовых векторов
ШИМ-генератор
Модуль ШИМ контроллера F28x
Асимметричная ШИМ
Центрированная ШИМ
Состояния инвертора и базовые вектора
Состояния инвертора и базовые вектора
Векторная ШИМ
ШИМ-модуляция базовых векторов
6 состояний, 6 базовых векторов
Векторная ШИМ
Сравнение эффективности центрированной и векторной ШИМ-модуляции
Реализация «векторной» ШИМ на базе центрированной
Реализация одного вектора двумя способами
Бутстрепное питание драйвера ключа
6-секторная векторная ШИМ
Определение сектора и скважностей
Определение сектора и скважностей
Определение сектора и скважностей
Определение сектора и скважностей
Ограничение вектора напряжения
Инициализация Таймера 1
Настройка «мёртвого» времени
Настройка полярности выходов ШИМ
Инициализация модуля сравнения
Инициализация портов ввода/вывода
Коррекция амплитуды вектора
Расчёт скважности базовых векторов
Определение номера сектора и скважностей
Настройка ШИМ для сектора 0
1.26M
Категория: ФизикаФизика

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

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

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

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. Векторная ШИМ

Из условия
инвариантности
мгновенных значений
электрических
величин:
*
*
u ua
1 * 2 *
*
u
ua
ub
3
3

10. ШИМ-модуляция базовых векторов

Базовые вектора- в одной стойке включен только один ключ

11. 6 состояний, 6 базовых векторов

12. Векторная ШИМ

us
Tk
TШИМ
U k
Tk 60
T
U k 60 0 O
TШИМ
TШИМ
Tk длительность включения базового вектора U k
Tk 60 длительность включения базового вектора U k 60
T0 TШИМ Tk Tk 60 длительность включения нулевого базового вектора O (000) или O (111)
Обозначим " скважности":
TШИМ период несущей частоты ШИМ
Tk
TШИМ
Tk 60
1 TШИМ
Тогда :
u s U k 1 U k 60
Для получения синусоидального
напряжения постоянной амплитуды
годографом вектора напряжения должна
являться вписанная в шестиугольник
окружность, при этом:
um _ sin
2
U dc cos 30 0.577 U dc
3

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

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

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

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

16.

17.

18.

19.

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

21. 6-секторная векторная ШИМ

22. Определение сектора и скважностей

u s U k 1 U k 60
Вектор напряжения в относительных
единицах:
U k*,
U k* 60,
u *
В матричной форме (в осях
* * 1 *
- ):
*
u
или
U k ,
u * U k*,
* *
u U k ,
Тогда
:
*
U k ,
*
1 U k ,
или
*
*
U k 60,
U k* 60,
*
U k 60, 1
1
U k* 60, u *
*
*
U k 60, u
1
U * U *
*
*
U
U
1
k ,
k 60,
k 60,
k ,
U k* 60, U k* 60, u *
*
*
*
U k , U k ,
u

23. Определение сектора и скважностей

Для каждого сектора величины U*k, , U*k+60, , U*k+60, , U*k, являются
постоянными:

24. Определение сектора и скважностей

Введём вспомогательные
переменные:
*
u
*
1 u
3
2 u *
2
3
*
u
3 1 2 u *
3
Тогда
Свяжем однозначно каждый базовый вектор с определённым
сектором:
С учётом этого, а также того, что 0 и 1 0 можно определить знаки 1, 2 и
3 для каждого сектора

25. Определение сектора и скважностей

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

26. Ограничение вектора напряжения

Ограничение вектора на уровне максимальной амплитуды (постоянство фазы)
1) Проверяется условие : u
*
s
u u
* 2
* 2
0.866
2) Если требуется ограничение, рассчитывается коэффициен т k норм
u * _ огр k норм u *
3) Рассчитываются скорректированные составляющие : *
*
u _ огр k норм u
4) Согласно найденным u * _ огр , u * _ огр рассчитываются скважности
0.866
u s*

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;
}
}

34.

else
{
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. Расчёт скважности базовых векторов

*
u
*
1 u
3
2 u *
2
3
u *
*
3 1 2 u
3
#define _1_SQRT3
_IQ(0.5773503)
// Рассчитываем скважности базовых векторов непосредственно в единицах
// загрузки регистров сравнения
tmp = _IQmpy(_1_SQRT3, UbRef);
lambda1 = _IQmpy(EvaRegs.T1PR, (UaRef - tmp));
lambda2 = _IQmpy(EvaRegs.T1PR, 2*tmp);
lambda3 = lambda1 + lambda2;

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

CMPR1 1pwm 2
CMPR2 pwm pwm 1pwm 1 2
Начальный сектор : U 60( 011)
// Сектор 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;
English     Русский Правила