Скачиваний:
87
Добавлен:
23.02.2014
Размер:
916.99 Кб
Скачать

Выводы по пятому разделу

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

Заключение

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

В рамках выполнения работы автором была создана программа AmLAHXпостроения асимптотических ЛАЧХ и синтеза регуляторов методом желаемых ЛАЧХ. Программа имеет удобный интерфейс и работает в полуавтоматическом режиме. Она может использоваться самостоятельно в качестве средства синтеза регуляторов различными объектами, а также в качестве обучающей построению асимптотических ЛАЧХ программы.

Список использованных источников

  1. Лекции по курсу "Синтез ЗУ в ТС"

  2. Лекции по курсу "Теория управления" за 1 семестр.

  3. Дьяконов В.П. MatLab6: учебный курс. — СПб.: Питер, 2001.— 592 с.: ил.

  4. Дьяконов В.П, SimuLink4. Специальный справочник. — СПб.: Питер, 2002. — 528 с.: ил.

  5. Дьяконов В.П. Maple 7: учебный курс. — СПб.: Питер, 2002.

  6. Клиначёв Н. В. Лекции по теории систем автоматического регулирования (http://vissim.nm.ru/lectures/0090.htm), 2003.

  7. Пример применения метода желаемых ЛАЧХ (http://iu4.bmstu.ru/student/stud/sem7/uts/dz_uts2.htm), 1996.

  8. Ключев В.И. Теория электропривода, М.:Энергоатомиздат, 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

Соседние файлы в папке amlahx строит графы ЛАЧХ