- •Министерство образования и науки Российской Федерации
- •Введение
- •1 Параметры и динамическая модель исследуемого привода. Выбор методов синтеза
- •Выводы по первому разделу
- •2 Синтез регулятора тока методом желаемых лачх
- •2.1 Краткая теория вопроса
- •2.1.1 Динамическая модель контура тока
- •2.1.2 Метод желаемых лачх
- •2.2 Синтез регулятора тока с помощью программыAmLahx
- •2.2.1 Построение лачх объекта управления
- •2.2.2 Построение желаемой лачх
- •2.2.3 Графическое вычитание из лачх разомкнутой системы лачх объекта управления и получение таким образом лачх регулятора.
- •2.2.4 Определение передаточной функции регулятора по его лачх.
- •2.2.5 Реализация регулятора тока на операционных усилителях
- •2.3AmLahx— программа построения асимптотических лачх и синтеза регуляторов методом желаемых лачх
- •2.3.1 Общие сведения о программе
- •2.3.2 Командная строка программы
- •2.3.3 Режимы работы программы и пример расчета
- •Выводы по второму разделу
- •3 Синтез регулятора скорости
- •3.1 Синтез регулятора скорости методом двупараметрического расширенного d-разбиения
- •3.2 Синтез регулятора скорости методом афи-коррекции
- •3.2.1 Критериальная стратегия синтеза
- •3.2.2 Проведение низкочастотной коррекции
- •3.2.3 Проведение среднечастотной коррекции
- •3.3. Сравнение качества регуляторов скорости синтезированных с помощью двух методов
- •Выводы по третьему разделу
- •4 Имитационное моделирование
- •Выводы по четвертому разделу
- •5 Расчет устройства, обеспечивающего инвариантность системы к моменту сопротивления
- •Выводы по пятому разделу
- •Заключение
- •Список использованных источников
- •Приложение а. Текст программы AmLahx 0.1
- •Приложение b. Текст программы синтеза регулятора методом двупараметрического rd-разбиения
Выводы по пятому разделу
Синтезированное в этом разделе корректирующее устройство обеспечивает инвариантность привода к возмущению в виде момента сопротивления, что подтверждается переходным процессом скорости.
Заключение
В данной работе методами желаемых ЛАЧХ и двупараметрического RD-разбиения были синтезированы регуляторы скорости и тока для привода постоянного тока с якорным управлением. Привод с этими регуляторами отвечает заданным критериям качества (быстродействие, запасы устойчивости, колебательность). В четвертом разделе работы было проведено имитационное моделирование привода с регуляторами, которое показало, что система правильно реагирует на входной ступенчатый сигнал и возмущающее воздействие. Синтезированное в пятом разделе корректирующее устройство позволило обеспечить инвариантность привода к возмущению в виде момента сопротивления.
В рамках выполнения работы автором была создана программа AmLAHXпостроения асимптотических ЛАЧХ и синтеза регуляторов методом желаемых ЛАЧХ. Программа имеет удобный интерфейс и работает в полуавтоматическом режиме. Она может использоваться самостоятельно в качестве средства синтеза регуляторов различными объектами, а также в качестве обучающей построению асимптотических ЛАЧХ программы.
Список использованных источников
Лекции по курсу "Синтез ЗУ в ТС"
Лекции по курсу "Теория управления" за 1 семестр.
Дьяконов В.П. MatLab6: учебный курс. — СПб.: Питер, 2001.— 592 с.: ил.
Дьяконов В.П, SimuLink4. Специальный справочник. — СПб.: Питер, 2002. — 528 с.: ил.
Дьяконов В.П. Maple 7: учебный курс. — СПб.: Питер, 2002.
Клиначёв Н. В. Лекции по теории систем автоматического регулирования (http://vissim.nm.ru/lectures/0090.htm), 2003.
Пример применения метода желаемых ЛАЧХ (http://iu4.bmstu.ru/student/stud/sem7/uts/dz_uts2.htm), 1996.
Ключев В.И. Теория электропривода, М.:Энергоатомиздат, 1985.
Приложение а. Текст программы AmLahx 0.1
function [yy,handles]=amlahx(num,den,flag)
% AmLAHX ver 0.1
%
% handles=amlahx(num,den,flag)
%
% Программа построениь асимптотической ЛАЧХ любой ПФ (flag=1 - default)
% и синтеза регультора методом желаемых ЛАЧХ (flag=2).
%
% Без параметров программа работает в demo-режиме.
%
% Возвращает матрицу указателей на созданные графические объекты.
%clc;
%close all;
if nargin<1
num=[1 -25 -1250]
den=[1 8 26.666666666666671 37.0370370370370520 0 0 0]
flag=1;
elseif nargin<2 error('Недостаточно входных параметров');
elseif nargin==2 flag=1; end
% Формат надписей
% 1 - структура свойств дль вывода заголовков;
intr(1).FontWeight='bold';
intr(1).FontSize=12;
intr(1).FontAngle='normal';
% 2 - структура свойств дль подписей осей координат
% (внешние по отношению к графичиескому окну надписи)
intr(2).FontWeight='normal';
intr(2).FontSize=10;
intr(2).FontAngle='italic';
% 3 - структура свойств надписей на графиках (внутри графического окна)
intr(3).FontWeight='bold';
intr(3).FontSize=8;
intr(3).FontAngle='normal';
% Различные точки дл различных графиков
pt.z='rp';
pt.k='ko';
% ---------------------------------------------------------------------------
% Блок построениь асимптотической ЛАЧХ объекта управлениь
% ---------------------------------------------------------------------------
if length(num)>length(den) warning('Идеальный объект!'); end
% Находим нули
nuli=roots(num);
m=length(nuli);
% Находим полюсы
pol=roots(den);
n=length(pol);
% Анализ корней
nuli0=0;
J=1;
% (p-(a+bj))*(p-(a-bj))=p^2-2*a*p+a^2+b^2
%
yy=[];
src=[];
src1=[];
for I=1:m,
if nuli(I)==0 nuli0=nuli0+1;continue; end
if imag(nuli(I))<0 continue; end
src(J).a=real(nuli(I));
src(J).b=imag(nuli(I));
src(J).krt=1;
src(J).vid=1;
if imag(nuli(I))>0
src(J).por=2;
src(J).T=1/sqrt((real(nuli(I)))^2+(imag(nuli(I)))^2);
src(J).e=abs(real(nuli(I)))*src(J).T;
else
src(J).por=1;
src(J).T=1/abs(nuli(I));
src(J).e=0;
end
J=J+1;
end
pol0=0;
J=1;
for I=1:n,
if pol(I)==0 pol0=pol0+1;continue; end
if imag(pol(I))<0 continue; end
src1(J).a=real(pol(I));
src1(J).b=imag(pol(I));
src1(J).krt=1;
src1(J).vid=-1;
if imag(pol(I))>0
src1(J).por=2;
src1(J).T=1/sqrt((real(pol(I)))^2+(imag(pol(I)))^2);
src1(J).e=abs(real(pol(I)))*src1(J).T;
else
src1(J).por=1;
src1(J).T=1/abs(pol(I));
src1(J).e=0;
end
J=J+1;
end
% - поиск одинаковых нулей и полюсов и их удаление-
I=1;
while(I<=length(src))
J=1;
while(J<=length(src1))
if (round2(src(I).a,6)==round2(src1(J).a,6))&(round2(src(I).b,6)==round2(src1(J).b,6))
src=dlkr(src,I);
src1=dlkr(src1,J);
I=I-1;
break;
else
J=J+1;
end
end
I=I+1;
end
% > поиск одинаковых нулей и полюсов <
% - поиск кратных нулей -
I=1;
while(1)
J=I+1;
while(J<=length(src))
if (round2(src(I).a,6)==round2(src(J).a,6))&(round2(src(I).b,6)==round2(src(J).b,6))
src=dlkr(src,J);
src(I).krt=src(I).krt+1;
else
J=J+1;
end
end
I=I+1;
if I>(length(src)-1) break; end
end
% > поиск кратных нулей <
% - поиск кратных полюсов -
I=1;
while(1)
J=I+1;
while(J<=length(src1))
if (round2(src1(I).a,6)==round2(src1(J).a,6))&(round2(src1(I).b,6)==round2(src1(J).b,6))
src1=dlkr(src1,J);
src1(I).krt=src1(I).krt+1;
else
J=J+1;
end
end
I=I+1;
if I>(length(src1)-1) break; end
end
% > поиск кратных полюсов <
% Астатизм и наклон объекта
voy=nuli0-pol0;
nakl=20*voy;
% Коэффициент усилениь канонической формы
koy=abs(num(m-nuli0+1)/den(n-pol0+1));
% Объединение структур нулей и полюсов
src=[src src1];
n=length(src);
% Сортировка нулей и полюсов
for I=n:-1:2,
for J=1:I-1,
if src(J).T<src(J+1).T
temp=src(J);
src(J)=src(J+1);
src(J+1)=temp;
end
end
end
if flag==1
disp('Наклон НЧ части ЛАЧХ ОУ');nakl
disp('Коэффициент усилениь ОУ');koy
disp('Структура нулей и полюсов');
end
for I=1:length(src),
src(I).w=1/src(I).T;
src(I).lgw=log10(src(I).w);
if flag==1 src(I), end
end
% handles=src;
temp=length(src);
src(temp+1).lgw=src(temp).lgw+0.5;
src(temp+1).T=10^(-src(temp+1).lgw);
lgw1=src(1).lgw-0.5;
lgw2=src(1).lgw;
b=nakl*lgw2+20*log10(koy);
hoy(1)=line([lgw1 lgw2],[nakl*lgw1+20*log10(koy) b],'Color',[0 0 0]);
hold on;
grid on;
oy(1).nwn=nakl; % даные дль выичитаниь
oy(1).lgw=lgw1; % ЛАЧХ ОУ из ЛАЧХ РС
nwn=nakl;
ht(1)=text((lgw1+lgw2)/2,(b+nakl*lgw1+20*log10(koy))/2,num2str(nwn),intr(3));
I=1;
J=2;
while(I~=length(src)),
plot(lgw2,b,pt.z);
while(1),
if src(I).por==1
nwn=nwn+20*src(I).krt*src(I).vid;
elseif src(I).por==2
nwn=nwn+40*src(I).krt*src(I).vid;
else error('Ошибка. Программа не работает с порьдком > 2.');
end
if ( (round2(src(I).T,6)~=round2(src(I+1).T,6) )|(I==length(src)-2))
break;
else
I=I+1;
end
end
lgw1=src(I).lgw;
lgw2=src(I+1).lgw;
oy(J).nwn=nwn; % даные дль выичитаниь
oy(J).lgw=lgw1; % ЛАЧХ ОУ из ЛАЧХ РС
hoy(J)=line([lgw1 lgw2],[b nwn*(lgw2-lgw1)+b],'Color',[0 0 0]);
ht(J)=text((lgw1+lgw2)/2,b+nwn*(lgw2-lgw1)/2,num2str(nwn),intr(3));
b=nwn*(lgw2-lgw1)+b;
J=J+1;
I=I+1;
end
xlabel('lg(w), дек',intr(2),intr(2)); ylabel('L(w), дБ',intr(2),intr(2));
title('Асимптотическаь ЛАЧХ',intr(1),intr(1));
% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if flag==1 return; end % проверка флагов
% ---------------------------------------------------------------------------
% Блок построениь желаемой ЛАЧХ разомкнутой системы
% ---------------------------------------------------------------------------
%while 1==1,
pause;
k={'-1','20','0.5','10'};
tmp='';
while 1==1,
k=inputdlg({strvcat('Желаемый...','... порьдок астатизма'),...
'... коэффициент усилениь',...
'... времь регулированиь',...
'... перерегулирование'},...
['Ввод данных о системе',' ',tmp],1,k);
if ~length(k) return; end
if ~(strcmpi(k{1},'') | strcmpi(k{2},'') | strcmpi(k{3},'') | strcmpi(k{4},''))
vug = str2num(k{1});
kg = str2num(k{2});
tpg = str2num(k{3});
qg = str2num(k{4});
if tpg>0&qg>=0&qg<=100 break; end
end
tmp='(повторите ввод)';
end
% по номограммам
[wcpg,dl,chn]=nomo(tpg,qg)
lgwcg=log10(wcpg);
% Определьем астатизм управльещего устройства
vuu=vug-voy
% Определьем коэффициент усил. УУ
kuu=kg/koy
% Построение НЧ-части
% - диапазон -
lgw1=src(1).lgw-2.5;
%lgw2=src(1).lgw;
lgw2=0.5;
% - уравнение -
% 20*vug*W+20*log10(kg)
hg(1)=line([lgw1 lgw2],[20*vug*lgw1+20*log10(kg) 20*vug*lgw2+20*log10(kg)],'Color',[1 0 0]);
ld1=(dl+chn*lgwcg)/chn;
ld2=(-dl+chn*lgwcg)/chn;
lld1=chn*(ld1-lgwcg);
lld2=chn*(ld2-lgwcg);
% Построение СЧ-части
hg(2)=line([ld1 ld2],[lld1 lld2],'Color',[1 0 0]);
plot(ld2,lld2,pt.k);
ht(J)=text((ld1+ld2)/2,(lld1+lld2)/2,num2str(chn),intr(3));
J=J+1;
kollin=1;
rs(kollin).nwn=chn; % даные дль вычитаниь
rs(kollin).lgw=ld1; % ЛАЧХ ОУ из ЛАЧХ РС
kollin=kollin+1;
% Сопрьжение
pause;
k={'-40'};
tmp='';
while 1==1,
k=inputdlg('Укажите желаемый наклон сопрьгающей прьмой',...
['Ввод данных о желаемой ЛАЧХ',' ',tmp],1,k);
if ~length(k) return; end
if ~(strcmpi(k{1},''))
k2 = str2num(k{1});
A=[k2 -1 ; 20*vug -1];
break;
end
tmp='(повторите ввод)';
end
delete(hg(1));
if det(A)
b=[k2*ld1-lld1 ; -20*log10(kg)];
xy=inv(A)*b;
hg(3)=line([xy(1) ld1],[xy(2) lld1],'Color',[1 0 0]);
plot(ld1,lld1,pt.k);
ht(J)=text((xy(1)+ld1)/2,(xy(2)+lld1)/2,num2str(k2),intr(3));
J=J+1;
rs(kollin).nwn=k2; % даные дль вычитаниь
rs(kollin).lgw=xy(1); % ЛАЧХ ОУ из ЛАЧХ РС
kollin=kollin+1;
% 20*vug*W+20*log10(kg)
hg(1)=line([xy(1)-0.5 xy(1)],[20*vug*(xy(1)-0.5)+20*log10(kg) xy(2)],'Color',[1 0 0]);
plot(xy(1),xy(2),pt.k);
ht(J)=text(xy(1)-0.25,(20*vug*(xy(1)-0.5)+20*log10(kg)+xy(2))/2,num2str(20*vug),intr(3));
J=J+1;
rs(kollin).nwn=20*vug; % даные дль вычитаниь
rs(kollin).lgw=xy(1)-0.5; % ЛАЧХ ОУ из ЛАЧХ РС
kollin=kollin+1;
else
delete(hg(2));
ld1=(dl+chn*lgwcg)/chn-0.5;
lld1=chn*(ld1-lgwcg);
hg(1)=line([ld1 ld2],[lld1 lld2],'Color',[1 0 0]);
rs(kollin-1).nwn=chn; % даные дль вычитаниь
rs(kollin-1).lgw=ld1; % ЛАЧХ ОУ из ЛАЧХ РС
end
% Построение ВЧ-части
% nwn*(ld2+0.5)+lld2-nwn*ld2
hg(kollin)=line([ld2 ld2+0.5],[lld2 nwn*0.5+lld2],'Color',[1 0 0]);
% plot(ld2+0.5,nwn*0.5+lld2,pt.k);
ht(J)=text(ld2+0.25,lld2+nwn*0.25,num2str(nwn),intr(3));
J=J+1;
rs(kollin).nwn=nwn; % даные дль выичитаниь
rs(kollin).lgw=ld2; % ЛАЧХ ОУ из ЛАЧХ РС
kollin
% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
% ---------------------------------------------------------------------------
% Блок построениь ЛАЧХ управльющего устройства
% ---------------------------------------------------------------------------
% Сортировка
for I=length(rs):-1:2,
for J=1:I-1,
if rs(J).lgw>rs(J+1).lgw
temp=rs(J);
rs(J)=rs(J+1);
rs(J+1)=temp;
end
end
end
oylgw=[oy.lgw];
rslgw=[rs.lgw];
gllgw=[oylgw(2:length(oylgw)) rslgw(2:length(rslgw))];
gllgw=sort([min(gllgw)-0.5 gllgw]);
% Корректировка дублированиь частот
I=1;
while(1)
J=I+1;
while(J<=length(gllgw))
if (round2(gllgw(I),6)==round2(gllgw(J),6))
gllgw=dlkr(gllgw,J);
else
J=J+1;
end
end
I=I+1;
if I>(length(gllgw)-1) break; end
end
% -----------------------------------------------
x1=get(hoy(1),'XData');
y1=get(hoy(1),'YData');
kb1=inv([x1(1) 1;x1(2) 1])*[y1(1);y1(2)];
x2=get(hg(1),'XData');
y2=get(hg(1),'YData');
kb2=inv([x2(1) 1;x2(2) 1])*[y2(1);y2(2)];
b=(kb2(1)-kb1(1))*gllgw(1)+(kb2(2)-kb1(2));
% -----------------------------------------------
for I=1:length(gllgw),
yy(I).lgw=gllgw(I);
yy(I).nwn=getNakl(rs,gllgw(I))-getNakl(oy,gllgw(I));
end
plotLAHX(yy,b,intr(3));
% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
% ---------------------------------------------------------------------------
% Блок формированиь ПФ УУ
% ---------------------------------------------------------------------------
I=2;
while(I<=length(yy))
yy(I).por=(yy(I).nwn-yy(I-1).nwn)/20;
% if ~yy(I).por
% dlkr(yy,I);
% continue;
% end
yy(I).w=10^(yy(I).lgw);
yy(I).T=1/yy(I).w;
I=I+1;
end
% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
handles=[hoy hg ht];
hold off;
% --------------------------------------------------------------------------
function St=dlkr(St,ind)
% Удальет элемент массива (ind - индекс удальемого элемента массива)
n=size(St);
if n==1 St=[]; return; end
n=n(2);
if ind==1
St=St(2:n);
elseif ind==n
St=St(1:n-1);
else
St=[St(1:ind-1) St(ind+1:n)];
end
% --------------------------------------------------------------------------
function nakl=getNakl(St,lgw)
% Опрдельет на частоте lgw наклон ЛАЧХ, заданной в виде частот и
% наклонов после этих частот.
n=size(St);
n=n(2);
for I=2:n,
if lgw<St(I).lgw
nakl=St(I-1).nwn;
return;
end
end
nakl=St(n).nwn;
% --------------------------------------------------------------------------
function h=plotLAHX(St,b,intr)
% Выводит на экран асимптотическую ЛАЧХ, заданную структурой.
n=length(St);
St(n+1).lgw=St(n).lgw+0.5;
for I=1:length(St)-1,
lgw1=St(I).lgw;
lgw2=St(I+1).lgw;
nwn=St(I).nwn;
h(I)=line([lgw1 lgw2],[b nwn*(lgw2-lgw1)+b],'Color',[1 0 1]);
text((lgw1+lgw2)/2,b+nwn*(lgw2-lgw1)/2,num2str(nwn),intr);
b=nwn*(lgw2-lgw1)+b;
end