Занятие 7. Разработка микропроцессорной системы управления двигателем постоянного тока — КиберПедия 

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

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

2017-11-16 679
Занятие 7. Разработка микропроцессорной системы управления двигателем постоянного тока 0.00 из 5.00 0 оценок
Заказать работу

 

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

Для разработки алгоритма управления сначала разработаем модель электропривода. Для этого в системе Симулинк открываем новое рабочее окно и вносим в него готовую модель двигателя постоянного тока DC Machine, которая находится в Simulink Library Browser, группа SimPowerSystems, подгруппа Machines. В целях проверки работоспособности модели двигателя подадим на якорь и обмотку возбуждения постоянное напряжение, для чего используем элементы DC Voltage Source, находящиеся в группе SimPowerSystems, подгруппа Electrical Sources. Для задания момента сопротивления на валу двигателя используем блок задания констранты Constant (находится в группе Simulink, подгруппа Commonly Used Blocks), для вывода координат двигателя используем осциллограф Scope, находящийся в группе Simulink, подгруппа Sinks. Полученная схема показана на рисунке 1. Если необходимо повернуть изображение блока, то нужно щелкнуть по нему правой кнопкой мыши и в выпавшем меню выбрать Format – Rotate block или Flip Block.

Устанавливаем время моделирования 0,5 секунд, запускаем моделирование и наблюдаем переходные характеристики по крутящему моменту, току и скорости двигателя. Если схема собрана правильно, то характеристики совпадут с показанными на рисунке 1

Задание для самостоятельной работы

1. Убедитесь, что при увеличении нагрузки установившаяся скорость становится меньше, а установившееся значение тока больше относительно первоначального варианта модели.

2. Убедитесь, что при увеличении напряжения на якоре двигателя установившаяся скорость возрастает относительно первоначального варианта модели.

Соберем теперь модель силовой схемы управления и подключим ее к двигателю и сети переменного тока. Силовая схема показан на рисунке 2 и состоит из двух диодов (неуправляемых полупроводников, находятся внизу) и двух тиристоров (полууправляемых полупроводников, находятся вверху). Данная схема представляет собой управляемый выпрямитель. Диоды и тиристоры находятся в подгруппе Power Electronics, где необходимы выбрать Thyristor и Diode.

 

 

Рисунок 1

 

Подключаем средние точки моста к источнику переменного напряжения AC Voltage Source (находятся в группе SimPowerSystems, подгруппа Electrcai Sources), а выход поста подсоединяем к модели двигателя (см.рисунок 2). В компоненте AC Voltage Source необходимо установить частоту в значение «50» Гц. Для подачи сигнала открытия на тиристоры в целях проверки собранной модели используем блок константы со значением «1». Запускаем моделирование, результат должен совпасть с графиком на рисунке 2, на котором явно прослеживается влияние пульсаций выпрямленного напряжения в сигнале тока и момента.

Устанавливаем в систему модель датчика напряжения (см.рисунок 3), которая должна передавать сигнал напряжения в систему управления, причем сигнал напряжения содержит помехи. Для этого ставим блок Voltage Measurement (группа SimPowerSystems, подгруппа Measurements), соединяем его входы с клеммами модели источника напряжения. Выход измерителя вводим в сумматор (находится в группе Simulink, подгруппа CommonlyUsedBlocks), в котором происходит сложение с синусоидальным сигналом, имитирующем помехи в системе. Источник синусоидального сигнала находится в группе Simulink, подгруппа Sources, в блоке установить частоту синуса как 5000 рад/с, амплитуду – 15. Добавляем в имеющийся осциллограф еще один вход (через настройки осциллографа, в окне самого осциллографа найти пиктограмму Parameters, и установить в появившемся окне значение «2» в поле Number of Axes). Заводим на второй вход осциллографа сигнал с модели датчика напряжения, делаем это через мультиплексор, второй вход мультиплексора пока остается неподключенным. Если все сделано правильно, то результат будет аналогичным с рисунком 3: сигнал напряжения зашумлен высокочастотной гармоникой. Теперь модель готова для встраивания в нее системы управления.

Алгоритм системы управления будет реализован на базе S-функции, для чего необходимо в рабочее окно модели установить компонент S-function builder. Открываем окно S-Функции двойным нажатием на компонент, и устанавливаем имя S-функции (например, DC_motor_control). Данный компонент будет моделировать работу управляющего микропроцессора, который на основе поступающих данных из модели будет формировать импульсы на управляющие электроды тиристора. Как правило, микропроцессорные системы управления электроприводами работают с жестким периодом дискретизации, для чего устанавливаем дискретный режим работы компонента (Sample Mode - Discrete), а время дискретизации Sample time value – как 0.000055555.

 

 

Рисунок 2

 

Данное время для рассматриваемого примера было рассчитано из следующих соображений: контроль выдачи импульса тиристора будет осуществляться с погрешностью 1 градус, в каждом периоде напряжения 360 градусов, в каждой секунде – 50 периодов напряжения, а значит длительность одного градуса равна 1/360/50 = 0,000055555, или 1/18000 секунды, то есть микропроцессорная система будет 18000 раз в секунду принимать решение о том, выставить сигнал на открытие тиристора или убрать.

 

 

Рисунок 3

Также необходимо обеспечить ввод и вывод информации в модель микропроцессора. Для этого на закладке Data Properties устанавливаем в закладке Input Ports входные переменные set_angle (переменная для задания угла открытия тиристора) и u_net (переменная для ввода в систему информации о напряжении сети с целью синхронизации системы управления тиристором). На закладке Output Ports устанавливаем переменную out, в которую будет выдаваться сигнал для передачи на управляющий электрод тиристора.

 

 

Рисунок 4

 

 

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

 

 

Рисунок 5

 

В закладку Output компонента S-функции вставляем алгоритм управления СИФУ (объявление переменных и сам алгоритм):

 

int static angle = 0; //переменная с инфомрацией о текущей угле фазы синусоиды с датчика напряжения

int static u = 0; // сигнал с датчика напряжения

int static u_prev = 0; // сигнал с дачтика напряжения, полученный в предыдущий раз

 

// СИФУ

u = u_net[0];// забираем сигнал с датчика напряжения

angle++; // увеличиваем текущее значение угла фазы сигнала с датчика напряжения

if (angle > set_angle[0]) out[0] = 100; // если угол больше чем заданный, то в включаем тиристор

else out[0] = 0;// иначе - выключаем

if (u>=0) if (u_prev<0) angle = 0; //если положительный переход синусоиды через ноль, то обнуляем значение угла

if (u<=0) if (u_prev>0) angle = 0; //если отрицательный переход синусоиды через ноль, то обнуляем значение угла

u_prev = u;// запоминаем для следующего шага текущее значение с датчика напряжения

 

Основная цель функционирования такого алгоритма – выдача импульса открытия на управляющий электрод тиристора в соответствии с заданным углом открытия. Сам тиристор находится под переменным напряжением, поэтому для обеспечения открытия в заданный момент (задаваемый углом открытия) необходимо отслеживать фазу приложенного к нему напряжения. Когда напряжение переходит через нулевое значение, считается что угол тоже равняется нулю. Затем, угол начинает увеличиваться до 180 градусов, и в этот промежуток времени можно подавать управляющий импульс для его открытия.

Идея алгоритма заключается в следующем: при переходе сигнала напряжения через ноль необходимо обнулить значение угла. Переход может быть как положительный, так и отрицательный – в нашем случае это значение не имеет, так как импульс будет выдаваться сразу на оба тиристора – из них реально откроется только тот, который находится под своей полуволной напряжения, другой не сможет открыться из-за физического принципа действия. Каждый раз при запуске процедуры (а это будет происходить 18000 раз в секунду, об этом говорилось выше) происходит увеличение значение угла фазы синусоидального сигнала напряжения на единицу. Когда это значение становится больше заданного, происходит выдача значение 100 (возможно любое, большее нуля), в противном случае выдается значение 0, которое не позволяет тиристору произвести открытие. Если все было сделано правильно, то для случая задания угла открытия 90 градусов показан рисунок 6: на нижнем графике показан сигнал с модели датчика напряжения и формируемые импульсы, строго следующие в середину полуволны сигнала.

Обязательным является объявление переменных алгоритма как static – это необходимо для того, чтобы при очередном вызове процедуры эти переменные не создавались заново, и соответственно, не теряли предыдущего значения.

Замыкаем теперь выход системы управления на управляющие электроды тиристоров (рисунок 7). Можно наблюдать поведение координат двигателя при «полуоткрытых» тиристорах.

Замкнем систему по скорости. Для этого убираем входной порт set_angle в S-функции, и вместо него устанавливаем два новых входа – задание скорости (set_speed) и сигнал обратной связи по скорости (fb_speed, fb – от английского feedback – «обратная связь»), см. рисунок 8.

 

 

Рисунок 6

 

 

В закладку Outputs добавляем код регулятора скорости (ниже выделен шрифтом), в результате управляющий код выглядит следующим образом:

 

#define step 10 // шаг интегрирования

int static angle = 0;

int static u = 0;

int static u_prev = 0;

int static set_angle = 120;

int static counter = 0;

// регулятор скорости

counter++;

if (counter>36)

{

if (set_speed[0]>fb_speed[0]) set_angle = set_angle - step;

if (set_speed[0]<fb_speed[0]) set_angle = set_angle + step;

if (set_angle>170) set_angle = 170;

if (set_angle<1) set_angle = 1;

counter = 0;

}

 

// СИФУ

u = u_net[0];

angle++;

if (angle > set_angle) out[0] = 100; else out[0] = 0;

if (u>=0) if (u_prev<0) angle = 0;

if (u<=0) if (u_prev>0) angle = 0;

u_prev = u;

 

Регулятор скорости построен по следующему принципу: если сигнал скорости двигателя (сигнал обратной связи) меньше заданного, то в таком случае начинаем уменьшать значение угла управления СИФУ, тем самым тиристоры открываются раньше, приложенное напряжение к двигателю больше, соответственно ток двигателя больше, он развивает больший момент и в конечном счете увеличивает скорость. Если сигнал скорости двигателя больше заданного, то в таком случае начинаем увеличивать угол открытия тиристора, уменьшая тем самым приложенное к двигателю напряжение, что приводит к снижению тока двигателя, а также его момента, в результате чего скорость падает. Изменение угла за одно вычисление происходит на величину step, которая задана в данном примере как константа (объявлена в начале директивой #define). Для того, чтобы увеличение или уменьшение шага не происходило бесконечно, значение выхода регулятора скорости (в данном случае это вход СИФУ, то есть переменная set_angle) ограничено минимальным и максимальным значением.

Так как двигатель обладает механической инерцией якоря, то нет необходимости рассчитывать управление с той же частотой, на которой рассчитывается управление тиристорами. Для снижение частоты расчета регулятора скорости применена переменная counter, которая каждый раз, достигая значения 36, обнуляется, и при этом происходит вычисление значения регулятора скорости. В результате расчет происходит в 36 раз медленнее чем расчет алгоритма СИФУ, то есть частота дискретизации регулятора скорости равна 18000/36 = 500 Гц.

Выполняем операцию компиляции S-функции (нажатием кнопки Build), и если компиляция прошла без ошибок, то переходим к следующему шагу, в противном случае исправляем выявленные компилятором ошибки.

Как показывает осциллограф, компонент модели двигателя одновременно посылает на визуализацию вектор данных, состоящий из сигнала скорости тока и крутящего момента двигателя. Для выделения сигнала скорости используем компонент Bus selector (находится в группе Simulink, подгруппа Commonly Used Blocks), который позволяет выделить из шины, по которой идет вектор данных, только нужные сигналы. Подсоединяем вход компонента к шине выдачи сигналов координат двигателя (см. рисунок 9).

Двойным нажатием на компонент Bus selector вызываем окно настройки, в котором в области выбранных сигналов Selected signals удаляем имеющиеся сигналы с помощью кнопки Remove. Выделяем сигнал скорости Speed wm в области имеющихся сигналов Signals in the bus, и добавляем его в область выбранных сигналов с помощью кнопки Select (см. рисунок 10) Нажимаем кнопку OK для закрытия окна.

 

 

Рисунок 7

 

 

Рисунок 8

 

 

Рисунок 9

 

Рисунок 10

 

 

Соединяем выделенный сигнал скорости двигателя со входом S-функции, отвечающей за сигнал обратной связи fb_speed (см.рисунок 11).

Устанавливаем в компоненте AC Voltage Source значение амплитуды напряжения как 310 вольт (для 220 вольт фазного напряжения), см. рисунок 12.

Теперь система готова к запуска процесса проверки написанного управляющего кода. Устанавливаем время моделирования 1 секунда. Устанавливаем значение заданной скорости 150 (константа на входе set_speed S-функции), а задание на момент двигателя – 50 (константа на входе TL компонента модели двигателя). Запускаем моделирование, и убеждается в том что, система удерживает скорость в районе 150 рад/сек (см.рисунок 13). Пульсирующий характер скорости около заданного значения является следствием 3 причин – несовершенством регулятора скорости, несовершенством алгоритма СИФУ и примененной силовой схемой управления. Уменьшаем момент сопротивления до 20, и убеждаемся в том, что система теперь опять пытается удержать скорость в районе 150 рад/сек, однако период пульсаций стал больше. Проведите эксперименты для заданий скорости 200, 150, 100, 75 рад/сек при моментах нагрузки 20 и 50 Нм. Как покажут результаты моделирования, система «далека от совершенства».

 

 

Рисунок 11

 

 

 

Рисунок 12

 

 

Рисунок 13

 

 

Задание для самостоятельной работы

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

 

Одним из решений по улучшению работы алгоритма будет совершенствование алгоритма СИФУ. Применим не постоянное открытие тиристора вплоть до очередного перехода сигнала напряжения через ноль, а будем выдавать импульс только на время 8 градусов.

Для этого необходимо программу доработать до следующего вида (изменения касаются только той части, где происходит вычисление СИФУ, выделены шрифтом):

 

 

// СИФУ

u = u_net[0];

angle++;

if ((angle > set_angle)&&(angle < (set_angle+8)))

out[0] = 100; else out[0] = 0;

if (u>=0) if (u_prev<0) angle = 0;

if (u<=0) if (u_prev>0) angle = 0;

u_prev = u;

 

Повторим моделирование для заданий скорости 200, 150, 100, 75 рад/сек при моментах нагрузки 20 и 50 Нм и убедимся в том, что пульсации снизились, а диапазон регулирования увеличился.

В завершении, доработаем код до уровня, который позволит применить его в реальном микропроцессоре. Для этого надо убрать из алгоритма порты ввода/вывода, и оперировать только с объявленными в программе переменными. В результате в программе появляются переменны FbSpeed, SetSpeed, Out, а сама программа будет иметь следующий вид:

#define step 10 // шаг интегрирования

int static angle = 0;

int static u = 0;

int static u_prev = 0;

int static set_angle = 120;

int static counter = 0;

int static Out=170;

int static FbSpeed = 0;

int static SetSpeed = 0;

 

// секция присоединения входных портов S-функции к симулинку

u = u_net[0];

SetSpeed = set_speed[0];

FbSpeed = fb_speed[0];

 

// регулятор скорости

counter++;

if (counter>36)

{

if (SetSpeed>FbSpeed) set_angle = set_angle - step;

if (SetSpeed<FbSpeed) set_angle = set_angle + step;

if (set_angle>170) set_angle = 170;

if (set_angle<1) set_angle = 1;

counter = 0;

}

 

// СИФУ

angle++;

if ((angle > set_angle)&&(angle < (set_angle+8))) Out = 100;

else Out = 0;

if (u>=0) if (u_prev<0) angle = 0;

if (u<=0) if (u_prev>0) angle = 0;

u_prev = u;

 

// секция присоединения выходных портов S-функции к симулинку

out[0] = Out;

 

  Содержание  
  Введение    
  Занятие 1. Создание моделей в среде Симулинк    
  Занятие 2. Разработка систем логического управления электроприводами    
  Занятие 3. Создание цифровых регуляторов    
  Занятие 4. Среда программирования CodeComposerStudio. Использование симулятора    
  Занятие 5. Технология создания собственных функций для приложений    
  Занятие 6. Использование пакета Матлаб для разработки программного обеспечения сигнального процессора    
  Занятие 7. Разработка микропроцессорной системы управления двигателем постоянного тока    

Учебное издание

КАРАКУЛОВ Александр Сергеевич

 


Поделиться с друзьями:

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.134 с.