Н.В. Клиначев
(фрагменты учебного курса)

Цифровые управляющие системы для электропривода

  1. Обзор инструментов разработчика цифровой системы управления электропривода
  2. Термины. Опорные факты о системах управления для электропривода
  3. Подчиненное управление двигателем постоянного тока (Brushed DC Motor control)
  4. Подчиненное управление ВД с датчиками Холла (BLDC Motor Hall control)
  5. Подчиненное управление ВД по противо-ЭДС (BLDC Sensorless BEMF control)
  6. Управление СДПМ с векторной подсистемой регулирования тока (PMSM Sensorless FOC-control)
  7. Управление СРД с векторной подсистемой регулирования тока (SynRM Sensorless FOC-control)
  8. Управление АД с векторной подсистемой регулирования тока (ACIM Sensorless FOC-control)
  9. Синтез напряжений статора. Пространственно-векторная модуляция (Space vector modulation)
  10. Векторная подсистема регулирования тока для питания ВД (BLDC Sensorless FOC-control)
  11. Переход от дифференциальных уравнений к разностным вычислительным схемам
  12. Машина состояний – шаблон программы цифровой системы управления

Обзор инструментов разработчика цифровой системы управления для электропривода

Мировыми лидерами в разработке систем управления для электропривода являются корпорации, имеющие собственное производство микросхем и микроконтроллеров. В список входят: Texas Instruments (C2000, ARM), Freescale Semiconductor (MC56F84xx/56800EX, ARM), Toshiba Electronics (ARM + Vector Engine (VE)), NXP Semiconductors (ARM), STMicroelectronics (ARM), Atmel Corporation (AVR/8051), Infineon Technologies (ARM, 8051 + CORDIC and MDU coprocessor units), International Rectifier (8051 + Motion Control Engine (MCE)), Microchip Technology (PIC), НИИ электронной техники (1867ВЦ-x).

Принципы построения векторной подсистемы регулирования тока привода (момента) разработаны еще до появления микроконтроллеров. Требуемые для её реализации вычислительные ресурсы существенны и просчитаны (50..80 MIPS). Поэтому приведённый выше список разработчиков можно сократить до трех позиций. На первом месте Texas Instruments со своим "силовым решением" в виде 32-x разрядных микроконтроллеров собственной разработки (серии Piccolo – 40..60 MIPS и Delfino – 20..60 MFLOPS) семейства C2000. На втором – Freescale Semiconductor с серией микроконтроллеров MC56F84xx на базе 32-x разрядного ядра 56800EX. На третьем – Toshiba Electronics, которая встроила в 32-x разрядный микроконтроллер общего назначения ARM (ядро Cortex-M3) аппаратный модуль собственной разработки – специализированный, целочисленный математический сопроцессор – "Vector Engine" (VE), который справляется с необходимыми вычислениями.

Vector_Engine_Block_I.jpg, 111kB

Рис. 1

Прочим решениям можно дать следующую характеристику. Любой электропривод характеризуется двумя важнейшими координатами – скорость и момент. Во многих случаях особых требований к моменту не выдвигается (например, привод радара должен прецизионно стабилизировать лишь скорость вращения антенны). По этой причине особой необходимости в реализации подчиненного контура регулирования тока нет (развязка соответствующих координат требует наибольшую долю вычислительных ресурсов – 60..75 %). В обозначенных условиях достаточно пользоваться принципом прямого управления (без обратной связи). Как и поступают прочие поставщики демонстрационных комплектов для управления электроприводом (Digital Motor Control Kit to reference design), ограничиваясь реализацией контура скорости для машин с датчиками (BLDC Hall control) и не обеспечивая работоспособность на низких частотах вращения.

Для разработчика цифровой системы управления неотъемлемым инструментом является компилятор исполняемого кода. Общая ситуация негативная. Самые сложные алгоритмы управления двигателями реализованные разработчиками комплектов не превышают 20+5 КБ (release-версия) и 50+20 КБ (debug-версия, с загрузчиком и с модулем удаленного мониторинга функционирования привода по USB-кабелю или стандартному TCP-IP подключению). При этом типовые размеры инсталляционных пакетов компиляторов 200, 450, 1200 МБ (было время – умещались на дискетке). Все разработчики компиляторов распространяют версии своих продуктов с ограничением по размеру исполняемого кода (4..8 КБ для 8-и разрядных микроконтроллеров и 24..32 КБ для 32-х разрядных) для которых предоставляется бессрочная лицензия.

Программный код для микроконтроллеров фирмы Texas Instruments (семейство C2000) можно создать одной из версий C++ компилятора – Code Composer Studio (альтернатив нет). Которая предоставляется с ограничением по размеру кода (24 КБ) покупателям комплектов разработчика.

Для микроконтроллеров ARM-семейства существовал свободный компилятор GNU ARM GCC compiler (C, C++). Сообщество разработчиков коммерческих ARM-компиляторов вытеснило его с рынка, а так же привязало свои компиляторы к платформе Eclipse (200 МБ).

MCUs      Размер/Код   Платформа   Компилятор
---------------------------------------------------------------
ARM/AVR   200МБ/32КБ    Windows    IAR Embedded Workbench
ARM       1.2ГБ/Free    Eclipse    CCS (free for Stellaris KIT)
ARM       465МБ/32КБ    Eclipse    Keil MDK-ARM
ARM       2##МБ/##КБ    Eclipse    Sourcery CodeBench
ARM       2##МБ/##КБ    Eclipse    Code Red
ARM       47МБ/30day    Windows    Rowley CrossWorks
ARM/AVR   10МБ/32КБ     Windows    ImageCraft ICC (ARM7/ARM9)
ARM       31МБ/Free     Windows    GNU ARM GCC compiler (???)
---------------------------------------------------------------

Завершая обзор компиляторов, следует отметить что Ассемблер – не является адекватным инструментом для разработчика систем управления электропривода. Отладка программ векторной подсистемы регулирования тока сложна. Требует многочисленных попыток перестройки кода, выполнять которые (в разумных временных интервалах), используя Ассемблер, невозможно.

Вторым неотъемлемым программным инструментом разработчика систем управления электропривода является программа для математического моделирования сложных технических систем. Если речь идет о развитии теории систем управления, то альтернативы имеются – подойдет любая программа, принадлежащая классу динамических решателей. Практическую же разработку поддерживают лишь две программы – VisSim и Simulink. Обе имеют специализированные расширения, обеспечивающие взаимодействие с интегрированной средой разработки (IDE) компилятора Code Composer Studio, ориентированные на семейство микроконтроллеров C2000. Однозначным лидером по эффективности является VisSim.

Третий программный инструмент – это "пульт оператора" (Motor Control GUI) – предназначен для удаленного формирования задающих воздействий, изменения коэффициентов регуляторов и подачи управляющих команд (инициирующих процедуры мониторинга основных координат привода и самотестирования). Это ПО создается с применением графического языка программирования пакета LabVIEW. Требует наличия платформы NET. Исходники не предоставляются. Поэтому функция этого ПО расширяющая возможности JTAG-интерфейса (во время отладки цифровой системы управления) ограничена.

MexBIOS.jpg, 97kB

Рис. 2

Процесс разработки любого электропривода следует начинать с загрузки документации на комплекты разработчика с сайтов производителей микроконтроллеров. Документация в обязательном порядке содержит: схемы электрические принципиальные, эскизы бельков печатных плат, перечни элементов, листинги примеров программирования всех модулей микроконтроллеров (АЦП, таймеры, компараторы, порты, прерывания и пр.), исходники программ управления (C или C++), технические описания программ и аппаратной части. Уже на этом этапе станет очевидно, что разработка собственного прототипа будет стоить много дороже. И то, что некоторые микроконтроллеры, имея проблемы с периферией, для серьёзных решений не подходят – таймеры не поддерживают ШИМ с формированием безтоковой паузы (deadband PWM), отсутствуют синхронизируемые таймером (в ШИМ-режиме) УВХ, в качестве компараторов используется АЦП, входы для внешних прерываний принадлежат разным портам и пр.

Термины. Опорные факты о системах управления для электропривода

Задача создания качественного электропривода опирается на совокупность технологий, которые невозможно сосредоточить в руках одного инженера, группы или предприятия. Поэтому инженер-электромеханик должен знать стратегическую линию разработки электропривода, которая состоит из совокупности простых фактов, к которым следует возвращаться в случае появления ситуаций кажущихся неразрешимыми отдельно взятому коллективу.

Факт 1-ый. Датчики положения и скорости вала (резольверы – вращающиеся трансформаторы / энкодеры – поворотные шифраторы) являются устройствами прецизионной механики – цена их высока (машина с датчиками дороже в 4..5 раз), а стойкость к грубым механическим воздействиям (попадание снаряда в броню) низкая. Поэтому не первое десятилетие эволюционно решается задача их замены на измерители электрических величин (тока и напряжения) и разработки соответствующих бездатчиковых управляющих систем (Sensorless BEMF- or FOC-control).

Факт 2-ой. Для электропривода принцип подчиненного регулирования координат универсален, позволяет обеспечить требуемую точность и подходит для любых машин.

Факт 3-ий. В соответствии с принципом подчиненного регулирования координат, любой качественный привод должен иметь два регулятора. ПИ-регулятор в подчиненном контуре тока (момента). И ПИ-регулятор в контуре скорости. В быстродействующем контуре тока практически всегда используется непрерывный регулятор. Более медленный контур скорости допускает использование регуляторов других типов: релейно-импульсных, импульсно-фазовых, и пр.

Факт 4-ый. Сложность разработки цифровой системы управления для электропривода возрастает в строгом соответствии с типом используемой электромашины и применяемым решением для коммутации её обмоток.

  1. Подчиненное управление двигателем постоянного тока (Brushed DC Motor control)
  2. Подчиненное управление ВД с датчиками Холла (BLDC Motor Hall control)
  3. Подчиненное управление ВД по противо-ЭДС (BLDC Sensorless BEMF control)
  4. Управление СДПМ с векторной подсистемой регулирования тока (PMSM Sensorless FOC-control)
  5. Управление СРД с векторной подсистемой регулирования тока (SynRM Sensorless FOC-control)
  6. Управление АД с векторной подсистемой регулирования тока (ACIM Sensorless FOC-control)

Примечание. Под вентильным двигателем (ВД) подразумевается бесколлекторная машина с трапецеидальной ЭДС. Под синхронным двигателем с возбуждением от постоянных магнитов (СДПМ | PMSM | PMAC | BLAC) подразумевается та же бесколлекторная машина, но с синусоидальной формой ЭДС.

Факт 5-ый. Контур регулирования тока привода требует наибольшую долю вычислительных ресурсов микроконтроллера. Если осталось 20% и более, то можно решить все прочие задачи. Написать программы регуляторов скорости, положения, самотестирования, удаленной коммуникации по TCP-IP протоколу, обслуживания локального пульта управления и индикации.

Примечание. Заблуждением является мнение о том, что в случае реализации маломощного привода низкой ценовой группы без требований к моменту достаточно реализовать лишь регулятор скорости не требующий существенных вычислительных ресурсов. Без контура регулирования тока – потребуется коррекция. Т.е. не ПИ-, а ПИД-регулятор. С постоянной времени дифференцирующего канала равной электромагнитной постоянной якоря. Т.е. период дискретизации такого регулятора должен совпадать с периодом дискретизации подчиненного контура тока. В случае любых других вариантов настроек можно однозначно утверждать, что из-за экономии на микроконтроллере ценой 5 долларов, недоиспользуется машина ценой от 70 долларов.

Подчиненное управление двигателем постоянного тока
(Brushed DC Motor control)

Рабочие файлы: [Настройки регуляторов] [Эквивалентный ДПТ] [СДПМ 0.2..2 кВт] [СДПМ 2..20 кВт]

В зависимости от типа используемой в приводе машины сигналы в ЦСУ могут обрабатываться тремя группами преобразователей: регуляторы, наблюдатели, устройства развязки координат (УРК). Абсолютную необходимость их применения отражает сводная таблица 1.

Таблица 1
Тип машины Регуляторы Наблюдатели УРК
ДПТ (BDC) + - -
ВД (BLDC) + + -
СДПМ (PMSM) + + +
СРД (SynRM) + + +
АД (ACIM) + + +
"+" признак невозможности исключения из ЦСУ

Регуляторы нужны приводу с любой машиной. Более того, если параметры обмоток машин приведены, то регуляторы будут совпадать вплоть до разностной схемы (до программного кода) и настраиваемых коэффициентов. Приводят машины к эквивалентному ДПТ (см. формулы в таблице 2), сохраняя неизменным коэффициент преобразования электрических величин в механические: $KΦ=z_pΨ=z_pk_2Ψ_{2d}$. Угловой скорости – в ЭДС, и тока – в момент (при условии $I_я=3/2·I_{фm}$).

Таблица 2
Баланс для приведения машин: $U_яI_я=3U_фI_ф=3U_{фm}I_{фm}/2$.
Условие (равенства скоростей): $U_я=U_{фm}$. Отсюда: $I_я=3/2·I_{фm}$.
Приводимая машина Условие Параметры эквивалентного ДПТ
Y ВД (BLDC) $2×E_ф=E_я$ $R_я=R_{2ф}=2×R_ф$,   $L_я=L_{2ф}=…$
Y PMSM | SynRM $E_{фm}=E_я$ $R_я=2×R_s/3$,   $L_я=2×L_{sσ}/3$
Y АД (ACIM) $R_я=2×R_{sr}/3$,   $L_я=2×L_{srσ}/3$
Поэтому и указываются для BLDC машин сопротивления между линиями

Завершив настройку регуляторов, полученные значения коэффициентов переносят на более сложные модели ЦСУ приводов на вентильных, синхронных или асинхронных двигателях. И приступают к следующему этапу настройки наблюдателей. Устройства развязки координат характеризуются отсутствием параметров зависимых от нагрузки привода и паспортных данных двигателя. Для них определена процедура юстировки под экземпляр изготовленной машины лишь в случае разработки привода особого назначения.

Рабочие файлы: [BDC_Debug_H] [BDC_Debug_T] [BDC_Debug_S]

Отладку модели привода с эквивалентным ДПТ (см. чертеж 1) выполняют в три этапа. На первом – запитывают двигатель от источника тока (замещая им подчиненный контур тока). Вместо регулятора скорости устанавливают реле с гистерезисом, обеспечивая циклический реверс. Настраивают модель ДПТ с приведенной к валу нагрузкой. И подбирают масштабные коэффициенты для контроля главных координат привода виртуальными осциллографами. Реле должно переключаться при достижении номинальной скорости и формировать пусковой ток в якоре в 2..4 раза больше номинального (равный номинальному току АИН).

Чертеж 1

На втором этапе восстанавливают питание двигателя от источника ЭДС вместе с подчиненным контуром тока. Настраивают коэффициенты ПИ-регулятора. Постоянную времени интегрирующего канала уравнивают с постоянной времени якоря ДПТ $T_{i~рт}=L_я/R_я$. Коэффициент усиления пропорционального канала $K_{p~рт}$ выбирают в соответствии с законом Ома так, чтобы мгновенное изменение задающего воздействия (от нуля до максимума) вызывало в активном сопротивлении якоря ток пусковой величины.

Завершают отладку привода настраивая контур скорости. В соответствующем ПИ-регуляторе предустанавливают неоптимальные, но гарантированно обеспечивающие функционирование коэффициенты. $K_{p~рс}$ – из условия, что усиленная им десятипроцентная ошибка по скорости должна формировать максимально возможное задание на подчиненный контур тока. Постоянную времени интегрирующего канала $T_{i~рс}$ уравнивают с механической постоянной времени $T_{мех}=R_я·J_{прив}/(KΦ)^2$. В последствии оптимизируют настройки, увеличивая $K_{p~рс}$ и уменьшая $T_{i~рс}$, стремясь снизить ошибку до шума квантования.

Примечание 1. Если электродвигатель имеет малоинерционный ротор, то правильно настроенный регулятор тока, с включенным И-каналом, в режиме релейного переключения направления движения (файл BDC_Debug_T) не должен сводить ошибку к нулю. Для проверки корректности функционирования И-канала вал нужно блокировать или увеличить момент инерции.

Примечание 2. Если ротор электродвигателя малоинерционный, нагрузка малоинерционная и её активная составляющая может снижаться до нуля, то при завышенном $K_{p~рс}$ в регуляторе скорости привод будет склонен к колебательности (возрастет чувствительность системы к вариации параметра). В этом случае $K_{p~рс}$ должен быть выбран для режима ХХ, внешний вид МХ должен отличаться от квадрата – не страшно, переходный процесс будет безупречным. Интегратор регулятора скорости должен иметь защиту от глубокого насыщения (что ограничит выбег по скорости после снятия блокировок вала). Сигнал на входе интегратора так же должен быть ограничен. Пределы ограничения должны быть на 20% больше статической ошибки в номинальном режиме.

Примечание 3. Предел токовой отсечки рекомендуется выбрать по амплитудному значению номинального тока статора СДПМ: $(2÷4)×(1.414 I_{ном~PMSM})×3/2·z_pΨ$. Или по q-проекции амплитудного значения тока статора АД: $(2÷4)×(1.414 I_{ном~ACIM}\cosφ)×3/2·z_pΨ$. В этом случае общие решения в ЦСУ для приводов с разными машинами будут более наглядны (будет меньше масштабных коэффициентов).

Подчиненное управление ВД с датчиками Холла
(BLDC Motor Hall control)

Рабочие файлы: [ВД: Механические Характеристики] [ВД: 120-ти градусная коммутация]
[Программный код 120-ти градусного коммутатора]

dcs_03.png, 29kB
dcs_04.png, 49kB
Рис. 3

Особенность питания ВД с трапецеидальной ЭДС (BLDC Motor) от автономного инвертора напряжения (АИН) (например, от трехфазного моста) заключается в том, что токовый шунт установленный в схеме позволяет выполнить измерение лишь модуля тока. ЦСУ должна иметь наблюдатель, который вычисляет момент смены знака тока после изменения последовательности фазных напряжений. Модель ВД с трапецеидальной ЭДС (BLDC Motor), учитывающая количество его фазных обмоток, ни чем не помогает в разработке соответствующей ЦСУ и наблюдателя. Поэтому используют модель ДПТ и наблюдатель, который восстанавливает знак тока ВД в соответствии с формулой:

(1)

$I_я=I_{я~abs}×\sign(gI_я/(1+T_яs))$,

здесь: $I_{я~abs}$ – ток трехфазного мостового инвертора питающего ВД; $I_я$ – ток якоря эквивалентного ДПТ; $gI_я$ – задание на подчиненный контур тока привода; $T_я$ – электрическая постоянная времени.

Чертеж 2

...

Подчиненное управление ВД по противо-ЭДС
(BLDC Sensorless BEMF control)

Питание ВД с трапецеидальной ЭДС имеет характерную особенность, заключающуюся в том, что в любой момент имеется обмотка, которая на протяжении 60 электрических градусов не подключается к шинам источника (см. осциллограммы на рис. 4). Наводимая в ней противо-ЭДС (back-ElectroMotive Force) содержит информацию о положении ротора. Которую удобно фиксировать компаратором, отслеживающим переход противо-ЭДС через ноль (Воронин С.Г., 1973 г.). Далее, с 30-ти градусной задержкой, ЦСУ может осуществить необходимую для организации вращения коммутацию фаз двигателя (т.е. управление ВД по противо-ЭДС (BLDC Sensorless BEMF control)).

dcs_01.png, 4,5kB
Рис. 4

В динамических режимах хорошо управляем драйвер ВД, в котором задержку коммутации (на 30°) обеспечивает интегратор угла ($θ=ω/s$), корректируемый каждые 60 электрических градусов (предустанавливаемый к нулю в моменты перехода противо-ЭДС через ноль). Поясняющие осциллограммы приведены на рисунке 5. Функционирование этого устройства обеспечивает наблюдатель, вычисляющий скорость ротора в соответствии с формулой:

(2)

$ω=(U/(1+T_яs)-I_яR_я)/(KΦ)$.

dcs_02.png, 4,0kB
Рис. 5

Накапливаемая интегратором угла ошибка имеет две составляющие. Первая – увеличивается по мере снижения скорости вала. Объясняется уменьшением амплитуды противо-ЭДС. И скрытием источника информации за уровнем шума. Причина второй составляющей погрешности – большой период дискретизации у наблюдателя скорости. При наличии свободных вычислительных ресурсов микроконтроллера его можно уменьшить в диапазоне от периода дискретизации контура скорости, до периода дискретизации контура тока.

Примечание 1. Погрешность срабатывания датчиков Холла, которыми оборудованы маломощные восьмиполюсные машины (DT4260-24-055-04, DN4261-24-053, FL42BLS02, или BLY172S-24V-4000), составляет величину +/-60 электрических градусов.

Примечание 2. Оборудованные датчиками Холла электродвигатели с синусоидальной противо-ЭДС (DT4260-24-055-04, BLY172S-24V-4000 и пр.) часто продаются под наименованием BLDC Motor. Их можно питать подобно вентильным двигателям. Более того, используя предустанавливаемый к константе интегратор угла и таблицу со значениями синусоидальной функции превышающими 0.866, можно компенсировать пульсации тока, но не в динамических режимах.

Примечание 3. Алгоритм коммутации стоек моста "0 / 1" проще, чем – "0 / 1 и Z-состояние". Поэтому представленные на рис. 4 осциллограммы напряжений на фазах ВД встречаются редко.

Управление СДПМ с векторной подсистемой регулирования тока
(PMSMs Sensorless FOC-control)

Рабочие файлы: [СДПМ: Угол коммутации]

СДПМ – первая, из рассматриваемых, машина переменного тока. А ПИ-регуляторы, которые используются для реализации подчиненного управления, формируют управляющие воздействия в виде постоянного тока. Стыковку выходных координат регуляторов и координат, описывающих электрическое состояние обмоток статора, обеспечивают устройства развязки координат (УРК) – прямой и обратный преобразователи числа фаз (преобразователи Кларка) и ротаторы (обратимый преобразователь Парка). К ним вернемся, после определения трех терминов.

Система координат uvw-xyz (abc-xyz)
Классическая трехфазная система координат переменного тока. В которой векторы фазных напряжений сдвинуты на 120°. В документах о системах цифрового управления электроприводом индексы фаз "a" и "b" (αβ), как правило, зарезервированы за фазами ортогональной системы координат. Поэтому три фазы обозначены индексами "u", "v", "w".
Система координат ab (αβ)
Ортогональная система координат переменного тока (сдвиг между фазами – 90°). В системах цифрового управления электроприводом к ней преобразуется многофазная система координат напряжений и токов (например, uvw), характеризующая мгновенное состояние электрической машины. Данное преобразование выполняется с целью снижения требований к вычислительным ресурсам микроконтроллера.
Система координат dq
Ортогональная система координат постоянного тока, чьи оси вращаются вместе с ротором синхронной машины. Она же – "неподвижная система координат" для проекций вращающихся векторов двухфазной системы ab (αβ). Вещественную ось d принято ориентировать по полю ротора (field-oriented). Поскольку один из эффективных способов управления (векторный) синхронной машиной с возбуждением от постоянных магнитов (PMSM Sensorless FOC-control) заключается в стремлении свести соответствующую проекцию вектора тока статора $I_d$ к нулю (ток намагничивания). Задание же величины проекции тока по ортогональной оси $I_q$ позволяет контролировать момент машины (motor torque).

Преобразователи Кларка (Clarke transform) и Парка (Park transform) используются в ЦСУ двигателями переменного тока (PMSM и ACIM) как в прямом канале (сигнал которого должен быть распределен на n-фазный АИН), так и в канале обратной связи (для преобразования к вещественной и к мнимой составляющим (т.е. к постоянному току) n-фазной системы токов). Функционирование преобразователей в канале обратной связи демонстрирует модель, представленная на чертеже 3.

Чертеж 3. Модели преобразователей Кларка и Парка

dcs_PMSM.png, 6,2kB
Рис. #

От своих прототипов ЦСУ для привода на СДПМ (см. чертёж 4) наследует: регуляторы, наблюдатель скорости (3) (совпадает с (2)), и интегратор угла. Отличий – два. В подчинённом контуре не один, а два идентичных ПИ-регулятора – для вещественной и для мнимой составляющих тока статора (отсюда и название – векторная подсистема регулирования тока). А интегратор угла – проще – ортогональная система обратных связей позволяет ему захватывать и отслеживать ротор с любого начального положения при ограниченном и пренебрежимо малом превышении в потреблении тока. А проблема перегрузки мантиссы (свойственная интеграторам без процедуры периодической предустановки) имеет простое решение при переходе к разностной схеме вычисления.

(3)

$ω=(U_q/(1+L_{sσ}/R_s×s)-I_qR_s)/(z_pΨ)$.

Чертеж 4

Примечание. Система управления, разработанная для электропривода на СДПМ, без изменений подходит синхронным реактивным двигателям (СРД | Synchronous reluctance motor (SynRM), реже – Reluctance synchronous motor (RSM | РСД)). Достаточно лишь учесть изменение конструктивных коэффициентов в наблюдателях и выставить ненулевую уставку для намагничивающей составляющей тока статора $I_d$. Начальное значение которой, при отладке, можно выбрать из того факта, что $\cosφ$ реактивных машин меньше 0.5.

Управление СРД с векторной подсистемой регулирования тока
(SynRMs Sensorless FOC-control)

Рабочие файлы: [SynRM: Psi = var, λ = const]

В случае реализации векторной подсистемы регулирования тока, ориентированной по полю ротора, момент СРД определяет формула:

(4)

(5)

$M=K_t×Φ×i_{1q}=3/2·z_p·Ψ×Φ×i_{1q}$,

где:   $Φ=(i_{1d}/i_{1d.н})·Φ_н/(1+T_2s)$.

Следовательно, проекция тока статора $i_{1q}$ позволяет контролировать момент безынерционно, а проекция $i_{1d}$ – с инерционностью, описываемой апериодическим звеном с постоянной времени равной постоянной времени перемагничивания ротора.

Распространение получили два способа контроля момента СРД. Первый предполагает сохранение магнитного состояния ротора ($i_{1d}=\const$, $i_{1q}=\var$) для всех режимов работы электропривода. Второй – постоянного коэффициента мощности ($i_{1q}/i_{1d}=\const$, $i_{1q}=\var$, $i_{1d}=\var$).

Явный недостаток второго способа контроля момента (инерционность) компенсируется большим значением коэффициента мощности $(\cosφ)$, который остается неизменным во всех режимах и при любых нагрузках.

Чертеж 5

Примечание 1. Синхронные реактивные двигатели с материалом ротора близким по свойствам к магнитотвердым сглаживают ошибки намагничивающего контура цифровой управляющей системы и рекомендуются для безынерционного (по моменту) электропривода. СРД с магнитомягким материалом ротора улучшают динамику электропривода, сохраняющего постоянный коэффициент мощности.

Примечание 2. Электропривод на СРД, сохраняющий коэффициент мощности (λ), проявляет инерционные свойства (по моменту) в режиме разгона. Процесс торможения – безынерционный.

Примечание 3. В близких к холостому ходу режимах, снижающий намагниченность ротора электропривод на СРД или на АД (т.е. сохраняющий коэффициент мощности), можно питать от источника с пониженным напряжением.

Примечание 4. ЦСУ для привода на СРД, так же как и её младшие по иерархии версии-прототипы (для ВД и для СДПМ), может быть построена на основе предустанавливаемого интегратора угла (в достоверное состояние, по прерываниям от датчиков Холла, каждые 60 электрических градусов). Процесс функционирования которого обеспечивается наблюдателем скорости вала СРД:

(6)

$ω=((U_q-I_d·z_pωL_{sσ})/(1+L_{sσ}/R_s×s)-I_q·R_s)/(z_pΨ)$,

где $Ψ=\var$ если электропривод сохраняет $λ=\const$.    

Формула наблюдателя (6), в отличие от прототипов (2) и (3), имеет алгебраическую петлю. Для составления программы выражение следует переписать относительно скорости или разорвать петлю регистром задержки.

Способы контроля момента АД векторной подсистемой регулирования тока

В случае реализации векторной подсистемы регулирования тока, ориентированной по полю ротора $(Ψ_{2q}=0)$, момент АД определяет формула:

(7)

(8)

$M=3/2·z_p×L_m/L_r×i_{1q}·Ψ_{2d}$,

где:   $Ψ_{2d}=i_{1d}×L_m/(1+T_2s)$,   $T_2=(L_m+L_{rσ})/R_r$.

Следовательно, проекция тока статора $i_{1q}$ позволяет контролировать момент безынерционно, а проекция $i_{1d}$ – с существенной инерционностью, описываемой апериодическим звеном с постоянной времени равной постоянной времени ротора.

Распространение получили два способа контроля момента АД. Первый предполагает сохранение постоянного потокосцепления ($i_{1d}=\const$, $i_{1q}=\var$) для всех режимов работы электропривода. Второй – постоянного скольжения ($i_{1q}/i_{1d}=\const$, $i_{1q}=\var$, $i_{1d}=\var$).

Явный недостаток второго способа контроля момента (инерционность) компенсируется большим значением коэффициента мощности $(\cosφ)$, который остается неизменным во всех режимах и при любых нагрузках.

Управление АД с векторной подсистемой регулирования тока при контролируемом скольжении и постоянном потокосцеплении
(ACIMs Sensorless FOC-control)

Рабочие файлы: [АВП: Psi = var, s = const]

Векторная подсистема регулирования тока, разработанная для электропривода на СДПМ, может быть использована для питания АД, но требует доработки. Ротор машины перемагничивается, и создающая момент составляющая тока статора $i_{1q}$ будет стремиться к нулю по завершении любого переходного процесса. Её можно сохранять равной некоторой константе, если процесс перемагничивания ротора будет запаздывать. Достичь подобного состояния координат машины можно – удерживая под контролем частоту питающего напряжения. Которая должна превышать скорость ротора и быть тем больше, чем большей величины требуется проекция тока $i_{1q}$, см. формулы (9) и (10).

(9)

(10)

$ω_1=ω+ω_2$,

$ω_2=i_{1q}×L_m/(T_2Ψ_{2d})=i_{1q}/(T_2i_{1d}/(1+T_2s))$.

Поскольку рассматриваемая ЦСУ сохраняет потокосцепление (8) постоянным ($gI_{1d}=\const$), после запуска и разгона привода можно перейти к расчету статической версии формулы (10). А приняв во внимание тот факт, что токи ротора меняются существенно медленней токов статора, для расчета частоты роторной ЭДС (10) можно использовать не измеряемые токи статора, а задания для них (с целью снижения нагрузки на микроконтроллер).

dcs_06.png, 5,3kB
Рис. 6

...

Чертеж 6

...

$T_{мех}=R_я·J_{прив}/(KΦ)^2$,   $T_{мех}=2R_r/3·J_{прив}/(Ψ_{2d})^2·1/z_p$.

Примечание 1. На период отладки ЦСУ для АД можно понизить коэффициенты связи статора и ротора, выбрав заниженное значение взаимной индуктивности $L_m≤[12÷18]L_{sσ}$. Чувствительность к округлению параметров и требования к шагу симуляции снизятся.

Примечание 2. У эквивалентных АД и СДПМ сопротивления обмоток статора должны отличаться в два раза (у АД меньше – вместо магнита его ротор имеет обмотку со своими потерями). На этапе адаптации ЦСУ к АД можно пренебречь данным фактом. При удвоении индуктивного и активного сопротивлений электрическая постоянная времени не измениться (подстройка регуляторов контура тока не потребуются).

Синтез напряжений статора. Пространственно-векторная модуляция

Рабочие файлы: [SVM-60 ч1] [SVM-60 ч2] [SVM-120 ч3] [SVM-120 ч4] [C-SVM ч5]

Пространственно-векторная модуляция (Space vector modulation)
Совокупность способов синтеза напряжения с применением широтно-импульсного модулятора. Используется в автономных инверторах напряжения (в преобразователях частоты) питающих электромоторы переменного тока. Осциллограммы задающих сигналов для SVM не являются синусоидальными. Но в фазах симметричной нагрузки подключаемой без нейтрального провода формируется синусоидальный ток. Различают пространственно-векторную модуляцию и пространственно-векторную коммутацию. При том же источнике питания, пространственно-векторная модуляция позволяет поднять напряжение на двигателе на 15%. И более ни чем не отличается от классической ШИМ (PWM). Пространственно-векторная коммутация, дополнительно, предполагает, что в любой момент времени одна из стоек моста не переключается (замирает в одном из положений). В результате снижаются динамические потери при коммутации ключей.

При решении задачи питания электромоторов переменного тока классическая ШИМ (PWM) уступает пространственно-векторной модуляции по нескольким критериям.

  1. При заданном напряжении шины постоянного тока (DC-bus), питающей электропривод, пространственно-векторная модуляция позволяет синтезировать трехфазную систему синусоидальных напряжений с двойной амплитудой, большей, чем классическая ШИМ (на 15% больше напряжения DC-шины).
  2. В трехфазном мосте, который управляется пространственно-векторным коммутатором, каждую шестую часть периода напряжения синтезируют лишь три ключа. Если применена классическая ШИМ – все шесть ключей всегда активны.
  3. Пространственно-векторная модуляция имеет свободные для выбора атрибуты, что определило существование четырёх пространственно-векторных алгоритмов коммутации ключей.
  4. Если используется тот или иной алгоритм пространственно-векторной коммутации, ключи трехфазного моста меняют потенциалы выводов обмоток на величины, составляющие часть от напряжения DC-шины. Поэтому динамические потери в ключах ниже, чем при классической ШИМ.

При малой амплитуде модулирующего сигнала синусоидальной формы или сигнала для осуществления пространственно-векторной модуляции ключи силового моста переключаются со скважностью близкой к 50%. С ростом частоты вращения вала двигателя одна из стоек будет включаться на меньший интервал времени. Это приведет к погрешности измерения тока, если используется самая дешевая схема – резистивные шунты в стойках моста и согласующие ОУ. Поскольку самые быстродействующие ОУ не могут без искажения отработать импульс амплитудой в половину шкалы и длительностью от 1 до 3 мкС. Поэтому датчиков надо устанавливать не два, а три. И в каждый момент времени выбирать для измерений те две стойки, где скважность больше.

Если используется пространственно-векторная коммутация, то при малой скорости вала стойки моста включаются на очень малые интервалы времени. Схема измерения тока, предполагающая установку шунтов в стойки становиться неработоспособной. Шунты следует устанавливать в цепи нагрузки, и применять более дорогие микросхемы датчиков тока. ACS712 – на основе эффекта Холла. Или IR2175 – с бутстрепным питанием (от коммутируемого конденсатора) и ШИМ-выходом.

Для приводов малой и средней мощности возможно комбинированное решение. При низкой частоте вращения можно использовать синусоидальную модуляцию, а при высокой – пространственно-векторную коммутацию. И три шунта в стойках.

dcs_05.png, 17kB
Рис. 7. Пространственно-векторная модуляция

Чертеж 7

В сравнении с альтернативами, программная реализация пространственно-векторной модуляции требует больших вычислительных ресурсов. Поскольку для контроля фазы третьей гармоники или сигнала треугольной формы необходимо вычислять функцию арктангенса. Преобразователи синусоидальной трехфазной последовательности для пространственно-векторной коммутации проще.

// Си-код Пространственно-векторного коммутатора
// (преобразователя 3-x фазной синусоидальной после-
// довательности на входе регистров сравнения таймера)
if (SVPWM_Enable) {
    if (ab2uvw.u < ab2uvw.v) {
        if (ab2uvw.u < ab2uvw.w) {
            ab2uvw.v = ab2uvw.v - (_IQ(1.0) + ab2uvw.u);
            ab2uvw.w = ab2uvw.w - (_IQ(1.0) + ab2uvw.u);
            ab2uvw.u = _IQ(-1.0);
        } else {
            ab2uvw.u = ab2uvw.u - (_IQ(1.0) + ab2uvw.w);
            ab2uvw.v = ab2uvw.v - (_IQ(1.0) + ab2uvw.w);
            ab2uvw.w = _IQ(-1.0);
        }
    } else if (ab2uvw.v < ab2uvw.w) {
        ab2uvw.w = ab2uvw.w - (_IQ(1.0) + ab2uvw.v);
        ab2uvw.u = ab2uvw.u - (_IQ(1.0) + ab2uvw.v);
        ab2uvw.v = _IQ(-1.0);
    } else if (ab2uvw.w < ab2uvw.v) {
        ab2uvw.u = ab2uvw.u - (_IQ(1.0) + ab2uvw.w);
        ab2uvw.v = ab2uvw.v - (_IQ(1.0) + ab2uvw.w);
        ab2uvw.w = _IQ(-1.0);
    } else {
        ab2uvw.u = _IQ(-1.0);
        ab2uvw.v = _IQ(-1.0);
        ab2uvw.w = _IQ(-1.0);
    }
}   /* (c) Клиначев Николай Васильевич */

Следует отметить, что пространственно-векторный коммутатор, предполагающий замирание стоек на треть периода, ассиметрично искажает форму синтезируемого напряжения при насыщении ШИ-модулятора. Этот недостаток преодолевается логическим комбинированием двух пространственно-векторных коммутаторов, с чередующимся замиранием стоек через каждую треть и шестую часть периода.

Примечание. Если разделить такие понятия как пространственно-векторная модуляция и пространственно-векторные алгоритмы коммутации ключей, то можно разобраться в том, что 80% решений в секторе низковольтного электропривода (на основе популярных интегрированных драйверов DRV8312/32, DRV8301/2; 12..60 В), используют пространственно-векторную ШИМ-модуляцию (SV-PWM), но не используют соответствующие алгоритмы коммутации ключей.

Векторная подсистема регулирования тока
для штатного или аварийного питания ВД
(BLDC Sensorless FOC-control)

Рабочие файлы: [DTC: BLAC BLDC SynRM ACIM]

ВД и СДПМ могут быть изготовлены по одним чертежам. И, не проверив порядок намотки обмоток, идентифицировать то ли это двигатель постоянного тока, то ли переменного (BLDC / BLAC) невозможно. Однако существующие системы управления, соответствующие машинам, разнятся значительно. Этот интригующий факт позволил авторам публикаций [20] и [21] сформулировать две задачи.

  1. Синтеза формы тока, которая сведет пульсации момента ВД к нулю (при заданном критерии – минимуме электрических потерь (11) или ? минимальном количестве гармоник ? (12).
  2. Адаптации векторной подсистемы регулирования тока (т.е. АИН) для питания ВД несинусоидальным током заданной формы.

Примечание. Здесь под ВД подразумевается СДПМ. Но. Либо к приводу (электромобиля) предъявлено требование функционирования при возможном обрыве одной из питающих фаз, либо требования к постоянству момента (привода радара) столь высоки, что игнорировать зубцовый эффект (cogging) недопустимо. И в том и в другом случае, векторная система управления должна поддерживать режим питания машины, при котором противо-ЭДС будет несинусоидальной – атрибут ВД.

(11)

$i_l(α)=$ $n×F(\sin(α+2π(l-1)/n))$  ,
$2×_{k=1,~k≠j}^n∑F^2(\sin(α+2π(k-1)/n))$

(12)

$i_l(α)=$ $n×\sin^2(α+2π(l-1)/n)$  ,
$F(\sin(α+2π(l-1)/n))×2×_{k=1,~k≠j}^n∑\sin^2(α+2π(k-1)/n)$

где: $n$ – число фаз, $l$ – номер фазы, $j$ – номер фазы, силовой канал которой отказал (может быть не определён), $F$ – нелинейное преобразование, описывающее приведенную ЭДС ВД (с амплитудой равной единице).

Рабочие файлы: [3Ph current 4 BLDC]

Прототип векторной подсистемы регулирования тока для привода на ВД представлен на чертеже 8. Общее представление об идее авторов можно составить, выполнив 2×2 группы экспериментов. Во-первых, авторы предложили две формулы (11) и (12) для вычисления формы тока питающего ВД. Во-вторых, упомянутые формулы описывают как штатное питание ВД, так и аварийное. В-третьих, к эксперименту предложена модель машины, для которой определены синусоидальная и три несинусоидальные формы противо-ЭДС. Общее количество предусмотренных экспериментов – 2×2×4 (см. примечания в чертеже модели).

Чертеж 8

Примечание. Если форму тока ВД определяют формулы (11) и (12), то электропривод функционирует с коэффициентом мощности $(\cosφ)$ близком к 1 (с намагничивающей составляющей тока равной нулю). И возможности регулировать его – нет.

Переход от дифференциальных уравнений к разностным вычислительным схемам

Рабочие файлы: [Настройка част. преобр.] [Модель программы ЦСУ]

Математические ядра моделирующих программ предоставляют разработчику моделей совокупность решателей, воплотить которую в виде программы, исполняемой микроконтроллером в реальном времени, невозможно. Данный факт был учтен при составлении моделей электроприводов (чертежи 1-7). Результат положительный – ресурсоемкие решатели не используются – задача преобразования модели в программу решаема (см. архив файлов "Модель программы ЦСУ").

Ниже представлены два списка атрибутов – модели цифровой управляющей системы для электропривода и соответствующей программы. На этапе отладки все атрибуты программы и микроконтроллера можно отразить в модели. Целочисленную арифметику – масштабированием и квантованием (блоки gain и quantize). Деление – целочисленным умножением и сдвигом вправо (делением на 2). Дискретизацию – стробируемым устройством выборки-хранения (блоки timeStep, pulseTrain и S&H).

Атрибуты модели ЦСУ для электропривода:

Атрибуты программы / микроконтроллера (MCU) ЦСУ для электропривода:

...

Примечание. Настоятельно рекомендуется определять имена переменных программы (координат САР) с использованием стандартных для дисциплины ТАУ префиксов (см. список в приложении и пример программы в архиве).

Библиотека математических функций для операций с псевдоплавающей точкой – Texas Instruments TMS320C28x IQmath Library (A Virtual Floating Point Engine)

Для поддержки разработчиков цифровых систем управления фирма Texas Instruments опубликовала математическую библиотеку IQmath. Высока вероятность – что это программная модель математического сопроцессора с плавающей точкой. Библиотека IQmath исполняет операции с 32-х битными целыми числами (тип данных long). Однако результат может быть интерпретирован как число с плавающей точкой. Функции библиотеки исполняются быстрее и точнее, чем эквивалентный код, написанный на стандартном языке ANSI C (с применением типа данных float). Компилятор Code Composer Studio поддерживает специальный режим визуализации типа данных long – в формате числа с плавающей точкой. На современном этапе – это ключевое технологическое решение.

typedef long _iq;    /* Fixed point data type: GLOBAL_Q format */
typedef long _iq30;  /* Fixed point data type:      Q30 format */
typedef long _iqxx;  /* Fixed point data type:      Qxx format */
typedef long _iq24;  /* Fixed point data type:      Q24 format */
typedef long _iqxx;  /* Fixed point data type:      Qxx format */
typedef long _iq15;  /* Fixed point data type:      Q15 format */
typedef long _iq1;   /* Fixed point data type:       Q1 format */

+-------+--------------------------------------+----------------+
| Data  |              Диапазон                |   Разрешение   |
|  Type |      Min                    Max      |   (точность)   |
+-------+--------------------------------------+----------------+
| _iq30 |          -2            1.999 999 999 |  0.000 000 001 |
| _iq29 |          -4            3.999 999 998 |  0.000 000 002 |
| _iq28 |          -8            7.999 999 996 |  0.000 000 004 |
| _iq27 |         -16           15.999 999 993 |  0.000 000 007 |
| _iq26 |         -32           31.999 999 985 |  0.000 000 015 |
| _iq25 |         -64           63.999 999 970 |  0.000 000 030 |
| _iq24 |        -128          127.999 999 940 |  0.000 000 060 |
|-------|--------------------------------------|----------------|
| _iq23 |        -256          255.999 999 981 |  0.000 000 119 |
| _iq22 |        -512          511.999 999 762 |  0.000 000 238 |
| _iq21 |       -1024         1023.999 999 523 |  0.000 000 477 |
| _iq20 |       -2048         2047.999 999 046 |  0.000 000 954 |
| _iq19 |       -4096         4095.999 998 093 |  0.000 001 907 |
| _iq18 |       -8192         8191.999 996 185 |  0.000 003 815 |
| _iq17 |      -16384        16383.999 992 371 |  0.000 007 629 |
| _iq16 |      -32768        32767.999 984 741 |  0.000 015 259 |
| _iq15 |      -65536        65535.999 969 482 |  0.000 030 518 |
|-------|--------------------------------------|----------------|
| _iq14 |     -131072       131071.999 938 965 |  0.000 061 035 |
| _iq13 |     -262144       262143.999 877 930 |  0.000 122 070 |
| _iq12 |     -524288       524287.999 755 859 |  0.000 244 141 |
| _iq11 |    -1048576      1048575.999 511 719 |  0.000 488 281 |
| _iq10 |    -2097152      2097151.999 023 437 |  0.000 976 563 |
| _iq9  |    -4194304      4194303.998 046 875 |  0.001 953 125 |
| _iq8  |    -8388608      8388607.996 093 750 |  0.003 906 250 |
| _iq7  |   -16777216     16777215.992 187 500 |  0.007 812 500 |
| _iq6  |   -33554432     33554431.984 375 000 |  0.015 625 000 |
| _iq5  |   -67108864     67108863.968 750 000 |  0.031 250 000 |
| _iq4  |  -134217728    134217727.937 500 000 |  0.062 500 000 |
| _iq3  |  -268435456    268435455.875 000 000 |  0.125 000 000 |
| _iq2  |  -536870912    536870911.750 000 000 |  0.250 000 000 |
| _iq1  | -1073741824  1 073741823.500 000 000 |  0.500 000 000 |
+-------+--------------------------------------+----------------+ -

Обращение к функциям библиотеки возможно после выбора типа данных для аргументов: _iq, _iq1, ..., _iq30. Выбор определяют требуемая точность и диапазон вычисляемого значения. Для построения векторных систем управления электроприводом достаточно лишь двух типов данных. _iq24 – для основных расчётов. И _iq15 – для взаимодействия с периферией. Результат: 5.4 мкС – расчетный цикл дискретной системы управления для ВД; и 13.4 мкС – расчетный цикл непрерывной (векторной) системы управления для СДПМ.

Примечание 1. Если привести входные и выходные координаты модулей систем управления к диапазону [-1.0, +1.0], то их внутренние координаты так же будут близки к указанному диапазону – не возникнет потребность в смене iq-типа.

Примечание 2. Рекомендуется уделить внимание результату преобразования _IQtoQ15(_IQ(1.0)).

Машина состояний – шаблон программы цифровой системы управления обеспечивающий разные периоды дискретизации подчиненных контуров

Цифровая управляющая система для электрического двигателя в авторской реализации на любом микроконтроллере превращается в одну или в две (функционирующих параллельно) Машины с конечным числом Состояний (в Конечный Автомат – Finite State Machines) – т.е. в набор схожих алгоритмов для робота-исполнителя, которые имеют такие атрибуты как "Событие", "Состояние", "Действие". Если микроконтроллер устаревший (архитектуры 8051, x86), то взаимодействие между его модулями (Таймер, АЦП, Порты ввода / вывода, и пр.) организуется программно-реализованными Машинами Состояний. В микроконтроллерах современных семейств (C2000, ARM), каждый из названных модулей находится под контролем собственной Машины Состояний (конфигурируемой – см. рис. 8, и запускаемой, но не обслуживаемой постоянно), чьи атрибуты "Событие", "Состояние", а иногда / частично и "Действие" реализованы аппаратно.

Piccolo-ADC.png, 4,9kB

Рис. 8. Мастер программы VisSim, предназначенный для генерации C-кода, который конфигурирует аппаратную Машину Состояний аналогово-цифрового преобразователя (АЦП) микроконтроллеров семейства Piccolo

Программа ЦСУ для ВД на программно-реализованных Машинах Состояний

Подчиненная управляющая система для ВД с дискретной коммутацией может быть реализована на двух Машинах Состояния. Задача первой – формировать управляющее воздействие. Задача второй машины состояний – реализовать драйвер электродвигателя.

Управляющая машина состояний представляет собой функцию обслуживания прерывания таймера (см. листинг 1.1). Соответственно Событием для неё является само прерывание. Состоянием – текущее значение инкрементируемого циклического счетчика (см. по листингу переменные C4, C20). Действием – соответствующая Состоянию функция (обслуживания АЦП, вычисления наблюдателей, регуляторов, внешней коммуникации). За вызов которых отвечают такие управляющие конструкции языка программирования, как switch или if.

Листинг 1.1

// Функция обработки прерывания по переполнению таймера-счетчика Т0
#ifdef __GNUC__
  ISR(TIMER0_OVF_vect)
#elif __IMAGECRAFT__
  #pragma interrupt_handler  TIMER0_OVF_handler: iv_TIMER0_OVF
  void TIMER0_OVF_handler(void)
#elif __IAR_SYSTEMS_ICC__
  #pragma vector = TIMER0_OVF_vect
  __interrupt void timer0_ovf_isr(void)
#else
  #error Current COMPILER not supported
//  interrupt [TIM0_OVF] void timer0_ovf_isr(void)
#endif
{
  static unsigned char C4  = 0;   // Счетчик Состояний 1ого каскада
  static unsigned char C20 = 0;   // Счетчик 2ого каскада Состояний

  switch (++C4)
  {
    case 1 :
    {
      // Действие №1 1ого каскада
    } break;
    case 2 :
    {
      // Действие №2 1ого каскада
    } break;
    case 3 :
    {
      // Действие №3 1ого каскада
      // ...
      if (C20 == 1)
      {
        // Действие №1 2ого каскада
        // ...
      };
    } break;
    default:
    {
      // Действие №4 1ого каскада
      // ...
      // Обслуживаем счетчик Состояний 1ого каскада
      C4 = 0;
      // Обслуживаем счетчик 2ого каскада Состояний
      if (++C20  >= 20 ) C20 = 0;
    } break;
  }
}

Вариант сценария вызова функций, подходящий для реализации ЦСУ электропривода на ВД, представлен на рис. 9. Здесь главный временной интервал определяет самый быстропротекающий процесс изменения тока в обмотке ВД (точнее – соответствующий ему, период дискретизации регулятора тока (РТ)). Но прерывания таймера делят указанный интервал еще на несколько равных частей. Что увеличивает количество возможных вариантов вызовов функций программы, из которых можно выбрать создающие более равномерную нагрузку на вычислительное ядро микроконтроллера.

    Период дискретизации РТ  
 
C0 Функции 1-ого каскада →     АЦП $i_{bus}$ АЦП $u_{bus}$ АЦП $U_{gS}$ АЦП $U_{gI}$
 
C0 Функции 2-ого каскада →     UART РС РT Набл.

Рис. 9.

Если коммутация фаз ВД организована по сигналам датчиков Холла, то соответствующую машину состояний образуют три функции обслуживающие внешние прерывания (см. листинг 1.2). Решаемая ими задача – идентификация последовательности фаз. Если датчики выдают прямую трехфазную последовательность $(ABC)$, то двигатель вращается "вперед" (по часовой стрелке – CW). Если – обратную $(ACB)$, то – "назад" (CCW – counter-clockwise). Предложенный вариант программы не предполагает опрос состояний датчиков не являющихся источником текущего прерывания, поэтому может быть адаптирован для организации коммутации ВД по противо-ЭДС.

Листинг 1.2

unsigned char r3PhU;  // Флаг реверса 3Ф-ой последовательности напряжений на обмотках ВД
unsigned char r3PhE;  // Флаг реверса 3Ф-ой последовательности ЭДС на датчиках Холла
unsigned char sensor; // Состояние Датчиков Холла априорно вычисляемое по прерываниям
unsigned char zABC = 0x00; // Регистр задержки для идентификации последовательности фаз

// Внешнее прерывание INT0 (по двум фронтам)
ISR(INT0_vect)
{
  Disable_interrupt();          // Запрет прерываний
  // Идентифицируем трехфазную последовательность (3Ф:ABC или 3Ф:ACB)
  // и априорно вычисляем состояние  датчиков Холла
  if      (zABC == 0xCB) { r3PhE = 0; sensor = (PIND & 0x04) ? 5 : 2; }
  else if (zABC == 0xBC) { r3PhE = 1; sensor = (PIND & 0x04) ? 3 : 4; }
  // Если не было дребезга, то обновим регистр задержки
  if ((zABC & 0x0F) != 0x0A) { zABC <<= 4; zABC |= 0x0A; }
  else { zABC = (sensor & 0x08) ? 0xCA : 0xBA; sensor = 0; } // Был дребезг
  Driver();
}

// Внешнее прерывание INT1 (по двум фронтам)
ISR(INT1_vect)
{
  Disable_interrupt();          // Запрет прерываний
  // Идентифицируем трехфазную последовательность (3Ф:ABC или 3Ф:ACB)
  // и априорно вычисляем состояние  датчиков Холла
  if      (zABC == 0xAC) { r3PhE = 0; sensor = (PIND & 0x08) ? 3 : 4; }
  else if (zABC == 0xCA) { r3PhE = 1; sensor = (PIND & 0x08) ? 6 : 1; }
  // Если не было дребезга, то обновим регистр задержки
  if ((zABC & 0x0F) != 0x0B) { zABC <<= 4; zABC |= 0x0B; }
  else { zABC = (sensor & 0x08) ? 0xAB : 0xCB; sensor = 0; } // Был дребезг
  Driver();
}

// Внешнее прерывание INT2 (по двум фронтам)
ISR(INT2_vect)
{
  Disable_interrupt();          // Запрет прерываний
  // Идентифицируем трехфазную последовательность (3Ф:ABC или 3Ф:ACB)
  // и априорно вычисляем состояние  датчиков Холла
  if      (zABC == 0xBA) { r3PhE = 0; sensor = (PINB & 0x04) ? 6 : 1; }
  else if (zABC == 0xAB) { r3PhE = 1; sensor = (PINB & 0x04) ? 5 : 2; }
  // Если не было дребезга, то обновим регистр задержки
  if ((zABC & 0x0F) != 0x0C) { zABC <<= 4; zABC |= 0x0C; }
  else { zABC = (sensor & 0x08) ? 0xBC : 0xAC; sensor = 0; } // Был дребезг
  Driver();
}

Устарела архитектура 8051. Правы китайцы, продающие PMSM с датчиками Холла под именем BLDC Motor. Неплохие кстати. Поэтому не расскажу, как делать регуляторы на восьмибитной арифметике. Да и морока эта – еще та. А результат (если учесть что ВД – почти миф) посредственный.

Программа ЦСУ для СДПМ на аппаратно-реализованных Машинах Состояний

Рабочие файлы: [Си ARM Sensorless PMSM]

Повторим. Современные микроконтроллеры, рекомендуемые разработчикам электропривода, на аппаратном уровне решают существенную долю задач синхронизации функционирования собственных модулей. Это означает, что после конфигурирования соответствующих Машин Состояний (см. рис. 8), без каких-либо прерываний и действий, вызванных исполнением программного кода, происходит: требуемая коммутация аналоговых каналов, перевод одного или нескольких УВХ из режима Выборка в режим Хранение, в моменты времени соответствующие Состояниям Машин состояний ШИМ-модулей, при соблюдении необходимых для выборки задержек и блокировки питания модулей – источников шума, запуск АЦП, последующая активация контроллера ПДП (DMA) и пр. Для дискретного / векторного управления, варианты конфигурации ШИМ-модулей и АЦП являются составной частью пакета драйверов микроконтроллера, распространяются и обновляются изготовителем, который и отвечает за соответствующую документацию.

Программа, реализующая векторное управление для СДПМ состоит из трех фрагментов. Первый фрагмент кода – это линейный алгоритм инициализации, завершающийся бесконечным циклом энергосбережения (см. листинг 2.1, функция main). Исполнение которого приостанавливается лишь для обслуживания прерываний от датчиков Холла и ШИМ-модуля.

Листинг 2.1

void main(void)
{
    // Штатная инициализация мК и конфигурирование GPIO для контроля периферии
    DeviceInit();

    PMSM_CntrlUnit_CreateBlock(); // Создаем матем. блоки ЦСУ для PMSM
    PMSM_CntrlUnit_SetBlkParam(); // Устанавливаем параметры блоков
    PMSM_CntrlUnit_CreateWires(); // Определяем схему передачи аргументов
    PMSM_CntrlUnit_Reset_IC();    // Предустанавливаем Начальные Условия

    /*     Настраиваем мК для обслуживания прерываний
     *        от датчиков Холла и ШИМ-драйвера
     */
    EALLOW;   // "Открываем сейф защищаемых регистров"
    // Определяем адреса ISR-функций в Таблице Векторов Прерываний
    PieVectTable.XINT1     = &xint1_isr;
    PieVectTable.XINT2     = &xint2_isr;
    PieVectTable.XINT3     = &xint3_isr;
    PieVectTable.EPWM1_INT = &MainISR;
    // Подключаем прерывания к GPIO
    // ...
    EDIS;     // "Закрываем сейф защищаемых регистров"
    // Назначаем фронты вызывающие прерывания XINT
    // ...

    EINT;     // Включаем Глобальный рубильник прерываний (INTM-ключ)
    ERTM;     // и прерывания Отладчика Реального Времени (DBGM-ключ)

    // Бесконечный цикл пониженного энергопотребления (IDLE-петля)
    for(;;)
    {
        /* Для отключения привода установим активные уровни (низкие)
         * на входах RESET микросхемы моста (DRV8312), что переведет
         * стойки ключей в Z-состояние.
         */
        if (IsEnable.DRV8312)
        {
            GpioDataRegs.GPASET.bit.GPIO1 = 1;
            GpioDataRegs.GPASET.bit.GPIO3 = 1;
            GpioDataRegs.GPASET.bit.GPIO5 = 1;
        }
        else
        {
            GpioDataRegs.GPACLEAR.bit.GPIO1 = 1;
            GpioDataRegs.GPACLEAR.bit.GPIO3 = 1;
            GpioDataRegs.GPACLEAR.bit.GPIO5 = 1;
        }
        // ... + инструкции IDLE-режима
    }
} // END main CODE

Вызываемые на этапе инициализации функции CreateBlock, SetBlkParam, CreateWires, Reset_IC (см. листинг 2.2) соответствуют этапам создания вычислительных моделей в математических ядрах / библиотеках моделирующих программ: Jigrein, VisSim, Simulink, или MexBIOS. Рекомендуется обратить внимание на код функции CreateWires. Здесь в компактной форме представлено 80% переменных программы, которые инкапсулированы в структуры.

Листинг 2.2

void PMSM_CntrlUnit_CreateBlock(void){}
void PMSM_CntrlUnit_SetBlkParam(void){}

/*
 * Процедура выполняет построение цифровой системы управления для
 * СДПМ (PMSM) из вычислительных модулей - экземпляров объектов.
 * Выход - это атрибут модуля (переменная принадлежит объекту).
 * Вход - не является атрибутом модуля - объект имеет указатели
 * для подключения к аргументам.
 * Суть построения ЦСУ - определение схемы передачи аргументов.
 */
void PMSM_CntrlUnit_CreateWires(void)
{
    // Интегратор Угла (Вычислитель Углового положения ротора)
    Rotor.yS     = &se.yS;          // Подключили модуль к Наблюдателю Скорости вала
    // Преобразователь числа фаз
    uvw2ab.u     = &DRV8312.uIs;    // Подключили датчик тока фазы "U" (UVW)
    uvw2ab.v     = &DRV8312.vIs;    // Подключили датчик тока фазы "V" (UVW)
    // Ротатор (Преобразователь Парка)
    ab2dq.a      = &uvw2ab.a;       // Подключили ток Alpha-фазы
    ab2dq.b      = &uvw2ab.b;       // Подключили ток  Beta-фазы
    ab2dq.Sine   = &Rotor.Sine;     // Подключили ротатор к опорной   синусоиде
    ab2dq.Cosine = &Rotor.Cosine;   // Подключили ротатор к опорной косинусоиде
    // Регулятор Скорости (РС)
    pid_spd.gS   = &SetPnt.gS;      // Подключили Уставку Скорости
    pid_spd.yS   = &se.yS;          // Подключили Наблюдатель Скорости
    pid_spd.gIL  = &SetPnt.gIL;     // Подключили Уставку тока (момента)
    // Регуляторы Тока (РТ) для проекций тока статора
    pid_iq.gI    = &pid_spd.uI;     // Подключили к регулятору задающий сигнал
    pid_iq.yI    = &ab2dq.q;        // Подключили сигнал ОС - q-проекция тока статора
    pid_id.gI    = &SetPnt.gId00;   // Подключили к регулятору задающий сигнал
    pid_id.yI    = &ab2dq.d;        // Подключили сигнал ОС - d-проекция тока статора
    // Наблюдатель Скорости (Speed Estimator)
    se.Vdc       = &DRV8312.Vdc;    // НС: Подключили вход к датчику Напряжения
    se.VqD       = &pid_iq.uV;      // НС: Подключили вход к уставке Скважности
    se.Iq        = &ab2dq.q;        // НС: Подключили вход к датчику Тока
    // Инверсный преобразователь Парка
    dq2ab.d      = &pid_id.uV;      // Подключили выходной сигнал РТ для d-оси
    dq2ab.q      = &pid_iq.uV;      // Подключили выходной сигнал РТ для q-оси
    dq2ab.Sine   = &Rotor.Sine;     // Подключили ротатор к опорной синусоиде
    dq2ab.Cosine = &Rotor.Cosine;   // Подключили ротатор к опорной косинусоиде
    // Преобразователь числа фаз
    ab2uvw.a     = &dq2ab.a;        // Подключили Alpha-фазу к преобразователю
    ab2uvw.b     = &dq2ab.b;        // Подключили  Beta-фазу к преобразователю
    // Модуль обновления ШИМ-регистров
    // ...
}

/*
 * Процедура сброса / предустановки Начальных Условий для элементов
 * с эффектом памяти (регистров задержки и интеграторов.
 * Если программа ЦСУ по блок-схеме собрана корректно, то для сброса
 * к начальному состоянию достаточно предустановить начальные условия
 * на регистрах задержки (на интеграторах). Остальные координаты будут
 * корректно рассчитаны от источников Уставок до Силового Моста.
 */
void PMSM_CntrlUnit_Reset_IC(void)
{
    // 1. Reset IC.
    pid_spd.zo = pid_iq.zo = pid_id.zo = se.zo = 0;
    Rotor.Angle = 0; // скорее всего не требуется

    // 2. Reset Output 4 PRESCALERs Objects.
    // Поскольку алгоритм системы управления предполагает
    // разные периоды дискретизации для модулей, и закрепленные
    // за ними вычисления могут быть выполнены не при первом
    // вызове MainISR. Предустановим их выходы.
    pid_spd.uI = pid_iq.uV = pid_id.uV = se.yS = 0;

    // 3. No IC.
    // Эффектом памяти не обладают следующие объекты:
    // uvw2ab, ab2dq, dq2ab, ab2uvw.
}

Второй фрагмент кода, из трех упомянутых, решает задачу периодической коррекции (предустановки) интегратора угла, по фронтам сигналов датчиков Холла и табличным значениям свойственным экземпляру машины (см. листинг 2.3, массив Rotor.HallPoz).

Листинг 2.3

#define SECT2PU  1.0/6.0 // if PosInRad then define PI/3; else if PosInPU then (PI/3)/(2*PI)

struct PMSM_MOTOR_STATE
{
    Uint16 r3PhE;   // Output: Флаг реверса 3Ф-ой последовательности ЭДС на датчиках Холла
    Uint16 sensor;  // Output: Состояние Датчиков Холла, [код Грея]
    _iq *yS;        // Input:  Указатель на Скорость вала, [-1.0, 1.0]
    _iq Angle;      // Output: Угловое положение ротора, [0.0, 1.0]. (Регистр задержки Интегратора угла)
    _iq Sine;
    _iq Cosine;
    const _iq HallPoz[16]; // Private: Массив значений Углового положения ротора под датчиками Холла
}
// Предустанавливаемый по сигналам датчика тока Интегратор Угла
// + Идентификатор направления вращения (CW_CCW)
Rotor =
{ 0, 0, NULL, 00, 00, 00,
    {
    //   Vd=0.xx            Vd=0.xx         - Отладка d-регулятором
    0,/* По часовой */ 0,/* Против ... */
    _IQ(3.78*SECT2PU), _IQ(4.42*SECT2PU),
    _IQ(5.78*SECT2PU), _IQ(0.42*SECT2PU),
    _IQ(4.78*SECT2PU), _IQ(5.42*SECT2PU),
    _IQ(1.78*SECT2PU), _IQ(2.42*SECT2PU),
    _IQ(2.78*SECT2PU), _IQ(3.42*SECT2PU),
    _IQ(0.78*SECT2PU), _IQ(1.42*SECT2PU),
    0, /*    CW    */  0, /*    CCW    */
    }
};
/*
 *  Код Грея     |  5  |  1  |  3  |  2  |  6  |  4  |
 *
 *   A     ......|'''''''''''''''''|.................|''''''
 *
 *   B     |.................|'''''''''''''''''|............
 *
 *   C     ''''''''''''|.................|'''''''''''''''''|
 */

// Функция с общим кодом обслуживания прерываний от Датчиков Холла
#define Driver() \
{   /*             Предустанавливаем Интегратор Угла             */ \
    Rotor.Angle = Rotor.HallPoz[(Rotor.sensor << 1) | Rotor.r3PhE]; \
    if (Rotor.r3PhE) GpioDataRegs.GPBSET.bit.GPIO34   = 1;          \
    else             GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;          \
}

interrupt void xint1_isr(void)
{
    // Датчики Холла на портах: A == GPIO26; B == GPIO25; C == GPIO24.
    Rotor.sensor = (Uint16)((GpioDataRegs.GPADAT.all & 0x07000000) >> 24);
    Rotor.r3PhE  = (Rotor.sensor == 5 || Rotor.sensor == 2) ? 0 : 1;
    Driver();
    // Снимаем блокировку для 1ой группы прерываний PIE, подтверждая обслуживание
    PieCtrlRegs.PIEACK.bit.ACK1 = 1;
}

interrupt void xint2_isr(void)
{
    // Датчики Холла на портах: A == GPIO26; B == GPIO25; C == GPIO24.
    Rotor.sensor = (Uint16)((GpioDataRegs.GPADAT.all & 0x07000000) >> 24);
    Rotor.r3PhE  = (Rotor.sensor == 3 || Rotor.sensor == 4) ? 0 : 1;
    Driver();
    // Снимаем блокировку для 1ой группы прерываний PIE, подтверждая обслуживание
    PieCtrlRegs.PIEACK.bit.ACK1 = 1;
}

interrupt void xint3_isr(void)
{
    // Датчики Холла на портах: A == GPIO26; B == GPIO25; C == GPIO24.
    Rotor.sensor = (Uint16)((GpioDataRegs.GPADAT.all & 0x07000000) >> 24);
    Rotor.r3PhE  = (Rotor.sensor == 6 || Rotor.sensor == 1) ? 0 : 1;
    Driver();
    // Снимаем блокировку для 12ой группы прерываний PIE, подтверждая обслуживание
    PieCtrlRegs.PIEACK.bit.ACK12 = 1;
}

Третий, завершающий программу фрагмент кода – это Действие определенное для Машины Состояний ШИМ-модуля – функция MainISR (см. листинг 2.4). Код функции реализует регуляторы и его исполнение приводит к синтезу фазных напряжений необходимых для питания СДПМ. Функция написана в соответствии линейным алгоритмом, в котором ветвления обеспечивают децимацию исполнения блоков кода регуляторов скорости, тока и наблюдателя скорости. Прочие вычисления, связанные с преобразователями числа фаз, с интегратором угла и ротаторами, необходимые для синтеза формы фазных напряжений, исполняются при каждом вызове функции. Для организации децимации вызовы индексируются кодом инкрементного циклического счетчика (переменная PWM_IsrTicker).

Листинг 2.4

// Счетчик прерываний - индексатор периодов дискретизации (Шагов Симуляции)
Uint16 PWM_IsrTicker = 0;

/*
 * Время обслуживания прерывания: 13.0, 13.4 мкС (-2.3 мкС SVM)
 */
interrupt void MainISR(void)
{
    // Обслуживаем прерывание каждую 0.0001 сек (подходит любой электромашине общего назначения)

    // Ведем индексацию вызовов ISR (для обеспечения дискретизации контуров Тока и Скорости)
    if (++PWM_IsrTicker >= 16) PWM_IsrTicker = 0;

    if (RunMotor)
    {
        // ------------------------------------------------------------------------------
        //  Вычислительные операции, не требующие децимации (прореживания)
        // ------------------------------------------------------------------------------
        // ...


        // ------------------------------------------------------------------------------
        //  Каждое 16-ое прерывание вызываем макросы ПИ-регулятора контура скорости,
        //  и обновления пределов Уставки тока
        // ------------------------------------------------------------------------------
        if ((PWM_IsrTicker & 0x000F) == 1) { SPD_PID_MACRO(pid_spd); }
        else if ((PWM_IsrTicker & 0x000F) == 7) GI_LIMIT_MACRO(pid_spd);

        // ...

        if ((PWM_IsrTicker & 0x0001) == 0)
        {
            // ------------------------------------------------------------------------------
            //  Каждое 2-ое четное прерывание вызываем макросы ПИ-регуляторов контура тока
            // ------------------------------------------------------------------------------
            // ...
        }
        else // if ((PWM_IsrTicker & 0x0001) == 1)
        {
            // ------------------------------------------------------------------------------
            //  Каждое 2-ое нечетное прерывание вызываем макрос Наблюдателя Скорости
            // ------------------------------------------------------------------------------
            // ...
        }

        // ...

        // ------------------------------------------------------------------------------
        //  Обновляем Регистры Сравнения ШИМ-драйвера
        // ------------------------------------------------------------------------------
        EPwm1Regs.CMPA.half.CMPA = pwm1.PWM1out;    // PWM 1A - Фаза A
        EPwm2Regs.CMPA.half.CMPA = pwm1.PWM2out;    // PWM 2A - Фаза B
        EPwm3Regs.CMPA.half.CMPA = pwm1.PWM3out;    // PWM 3A - Фаза C

    } // end if (RunMotor)

    // ...


    // Снимаем блокировку прерываний таймера, подтверждая обслуживание
    EPwm1Regs.ETCLR.bit.INT = 1;
    // Снимаем блокировку для 3ей группы прерываний PIE, подтверждая обслуживание
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}

Еще одна часть кода функции MainISR (листинг 2.5) исполняется один раз через каждые 2048 вызовов (пять раз в секунду). И решает задачу изменения расчетной схемы управляющей системы (посредствам переключения связей) для поддержки необходимых режимов функционирования и отладки привода. Например, интегратор угла настраивается в режиме, когда уставка для моментной оси подается на намагничивающую ось. Реверс, организованный с помощью реле с гистерезисом, используется для уточнения момента инерции. Автореверс по прошествии временного интервала – для визуализации механической характеристики.

Листинг 2.5

interrupt void MainISR(void)
{
    // ...

    // ------------------------------------------------------------------------------
    //  Низкоресурсные операции. Смена режима, Пуск / остановка электромотора и прочее.
    // ------------------------------------------------------------------------------
    /*
    // На аппаратном таймере ... CpuTimer0Regs.PRD.all = mSec100;
    if (CpuTimer0Regs.TCR.bit.TIF == 1)
    {
        CpuTimer0Regs.TCR.bit.TIF = 1;          // очистка флага
        // ...
    }
    */

    // Или на программном таймере ...
    static Uint32 VirtualTimer = 0;

    if ((VirtualTimer & 0x000007FF) == 0x03)    // ISR_FREQUENCY / 2^11 (0.2048 сек)
    {
        // Сканируем кнопки START и STOP
        if (!GpioDataRegs.GPADAT.bit.GPIO7) IsEnable.DRV8312 = FALSE;
        if (!GpioDataRegs.GPADAT.bit.GPIO9) IsEnable.DRV8312 = TRUE;

        // ------------------------------------------------------------------------------
        //  Перекоммутируем блок-схему, если изменился режим работы привода
        // ------------------------------------------------------------------------------
        static Uint16 mode = 0;    // Локальный идентификатор режима работы привода

        if (IsEnable.MotorMODE.all != mode)
        {
            IsEnable.MotorMODE.all &= ~mode; // опустили старый бит-флаг

            // Настроим связи для обычного (скоростного) режима с ограничением момента
            pid_spd.gS = &SetPnt.gS;      // Подключили Уставку Скорости // rc1.SetpointValue;
            pid_iq.gI  = &pid_spd.uI;     // Подключили к регулятору задающий сигнал
            pid_id.gI  = &SetPnt.gId00;   // Подключили к регулятору задающий сигнал

            if (IsEnable.MotorMODE.all == 0x01)      // SpeedTorque
            {
            }
            else if (IsEnable.MotorMODE.all == 0x02) // TimeRevers
            {
                pid_spd.gS = &SetPnt.gS4TR;
            }
            else if (IsEnable.MotorMODE.all == 0x04) // HystRevers
            {
                pid_iq.gI = &SetPnt.gI4HR;
            }
            else if (IsEnable.MotorMODE.all == 0x08) // dAxisDebug
            {
                pid_iq.gI = &SetPnt.g0000;
                pid_id.gI = &SetPnt.gId05;
            }
            else IsEnable.MotorMODE.all = 0x00;      // Motor Off
            mode = IsEnable.MotorMODE.all;
        }

        // ------------------------------------------------------------------------------
        // Опрос флага. Включение / отключение электродвигателя
        // ------------------------------------------------------------------------------
        if (IsEnable.MotorMODE.all == 0x00)
        {
            RunMotor = FALSE;

            EALLOW;
            EPwm1Regs.TZFRC.bit.OST = 1;
            EPwm2Regs.TZFRC.bit.OST = 1;
            EPwm3Regs.TZFRC.bit.OST = 1;
            EDIS;
        }
        else if (IsEnable.MotorMODE.all != 0x00 && (RunMotor == FALSE))
        {
            // Сбрасываем или предустанавливаем Начальные условия
            // для элементов с эффектом памяти - регистров задержки
            // и интеграторов
            PMSM_CntrlUnit_Reset_IC();

            RunMotor = TRUE;

            EALLOW;
            EPwm1Regs.TZCLR.bit.OST = 1;
            EPwm2Regs.TZCLR.bit.OST = 1;
            EPwm3Regs.TZCLR.bit.OST = 1;
            EDIS;
        }
    }

    // ------------------------------------------------------------------------------
    //  Ведение виртуального таймера и ограничение счета 15-ю битами
    // ------------------------------------------------------------------------------
    VirtualTimer++;
    VirtualTimer &= 0x00007FFF;

    // ...
}

Префиксы для координат САР

$g$ – задающее воздействие,
$y$ – регулируемая координата,
$x$ – ошибка регулирования,
$u$ – управление на объект,
$p$ – верхний предел координаты,
$n$ – нижний предел координаты,
$zo#$ – значение хранящееся в регистре задержки,
$zi#$ – значение на входе регистра задержки,
$u#$ – внутренняя координата регулятора.

Параметры асинхронной машины

$z_p$ – число пар полюсов машины,
$R_s$ – активное сопротивление обмотки статора,
$R_r$ – активное сопротивление обмотки ротора,
$L_{sσ}$ – индуктивность рассеяния обмотки статора,
$L_{rσ}$ – индуктивность рассеяния обмотки ротора,
$L_m$ – взаимная индуктивность обмоток статора и ротора,
$L_s=L_m+L_{sσ}$ – полная индуктивность обмотки статора,
$L_r=L_m+L_{rσ}$ – полная индуктивность обмотки ротора,
$k_s=L_m/L_s$ – коэффициент связи статора,
$k_r=L_m/L_r$ – коэффициент связи ротора,
$σ=1-k_sk_r$ – коэффициент рассеяния,
$R_{sr}=R_s+k_r^2R_r$ – активное сопротивление фазы машины,
$σ·L_s=L_{sσ}+L_{rσ}||L_m$ – индуктивность рассеяния фазы машины,
$T_э=L_{srσ}/R_{sr}$ – электрическая постоянная времени фазы машины,
$T_1=(L_m+L_{sσ})/R_s$ – электромагнитная постоянная времени статора,
$T_2=(L_m+L_{rσ})/R_r$ – электромагнитная постоянная времени ротора,
$ω_1$ – угловая частота вращения магнитного поля статора,
$ω_2$ – угловая частота роторной ЭДС (частота скольжения),
$ω$ – угловая частота вращения ротора приведенной машины ($z_p=1$).

Задание к курсовой работе

Рабочие файлы: [Сервомоторы (СДПМ)]

Цель курсовой работы – приобретение навыка проектирования цифровых систем управления для электроприводов с подчиненным контуром тока. Первый этап выполнения курсовой работы связан с разработкой моделей ЦСУ (см. ниже пункты 1, 2, 3 плана; паспортные данные сервомотора – по варианту). Завершается – представлением отчета к проверке и защитой. Второй этап работы (пункт 4 плана) выполняется при наличии на кафедре "комплектов разработчика электропривода". Форма отчета – демонстрация (с осциллографом) режимов работы двигателя, который перемещает нагрузку (закрепленный в патроне момент инерции) по всем четырем квадрантам плоскости механической характеристики.

  1. Расчет параметров машин – ДПТ, ВД, АД – эквивалентных заданному СДПМ.
  2. Настройка моделей ЦСУ с подчиненным контуром тока для: ДПТ, ВД, СДПМ, АД.
  3. Создание прототипов программ реализующих модели ЦСУ для: ВД, СДПМ, АД.
  4. Разработка программы для микроконтроллера управляющего ВД или СДПМ.

Примечание. Прототипы программы ЦСУ разрабатываются с использованием портируемой версии программы Jigrein, которая позволяет подключить к модели dll-библиотеку платформы NET. Рекомендации. Язык программирования – C#. Редактор – Блокнот. Способ компиляции – командная строка. Место размещения файла модели и dll-файла – папка портируемой версии программы Jigrein.

Литература

  1. Клиначёв Н. В. Моделирующая программа Jigrein: Теория, программа, руководство, модели. – Offline версия 1.1.0.4 (4NET). – Челябинск, 2007-2011. – файлов 140, ил.
  2. Клиначёв Н. В. Теория систем автоматического регулирования и управления: Учебно-методический комплекс. – Offline и Online версия 4.4. – Челябинск, 2000-2011. – файлов 680, ил.
  3. Воронин С. Г. Электропривод летательных аппаратов: Учебно-методический комплекс. – Электронная версия печатного издания 1.0. – Челябинск, 1995-2011. – файлов 489, ил. – Website: http://epla.susu.ac.ru.
  4. Усольцев А. А. Современный асинхронный электропривод оптико-механических комплексов: Учебное пособие. СПб: СПбГУ ИТМО, 2011, – 164 с.
  5. НПФ Мехатроника ПРО. MexBIOS Development Studio. – Website: http://mechatronica-pro.com.
  6. НПO Автоматики. Интегрированная среда разработки RocketSite. – Website: http://npoa.ru.
  7. Visual Solutions Inc. VisSim/Embedded Controls Developer. – Website: http://vissim.com.
  8. Texas Instruments Inc. TI's Piccolo MCUs. – Website: http://ti.com/home_a_motor, http://ti.com/tool/drv8312-c2-kit.
  9. НИИ электронной техники. Процессоры ЦОС 1867ВЦ-x. – Website: http://www.niiet.ru.
  10. Toshiba Electronics Europe GmbH. Toshiba's Motor control Development Center. – Website: http://www.toshiba-components.com/microcontroller/TMPM374_STK.html.
  11. Freescale Semiconductor Inc. Freescale's Motor control Development Center. – Website: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=3PHASELV-KIT.
  12. Infineon Technologies. Infineon's Motor control Development Center. – Website: http://www.infineon.com/motorcontrol.
  13. NXP Semiconductors. NXP's Motor control Development Center. – Website: http://ics.nxp.com/support/microcontrollers/motor.control.
  14. STMicroelectronics. STM's Motor control Development Center. – Website: http://www.st.com/internet/com/segment/413.jsp.
  15. Microchip Technology Inc. Microchip's Motor control Development Center. – Website: http://microchip.com/motorcontrol.
  16. Atmel Corporation. Atmel's Motor control Development Center. – Website: http://www.atmel.com/applications/automotive/motor_control_systems.
  17. Analog Devices Inc. ADI's Motor control Development Center. – Website: http://motorcontrol.analog.com.
  18. National Instruments Corporation. NI's Motor control Development Center. – Website: http://www.ni.com/motion, http://www.ni.com/arm.
  19. International Rectifier. IR's Motor control Development Center. – Website: http://www.irf.com/product-info/imotion.
  20. Воронин С.Г., Шабуров П.О., Курносов Д.А. Обеспечение работоспособности электропривода с вентильным двигателем при единичных отказах в силовом канале. // Электричество. – Москва, 2010. №11. – С. 39-42.
  21. Воронин С.Г., Курносов Д.А., Шабуров П.О. Обеспечение стабильности электромагнитного момента вентильного двигателя на основе синхронной машины с постоянными магнитами. // Электричество. – Москва, 2013. №06. – С. 46-50.

XX.11.2011 – 06.06.2012 – 24.09.2013