task4_savenkox

advertisement
ФИТ НГУ
Курс «Основы теории автоматического управления»
2011г.
Задание 4
Вариант 5-8
Выполнил:
Савенко С.А.
Оглавление
Содержание ............................................................ Error! Bookmark not defined.
Постановка задачи ............................................................................................... 3
Дискретная реализация системы автоматического управления
с ПИ-
регулятором .......................................................................................................... 4
Дискретная реализация системы автоматического управления
с ПИД-
регулятором .......................................................................................................... 9
Исследование
точности
дискретной
модели
для
разных
времен
дискретизации .................................................................................................... 14
Выводы................................................................................................................ 15
Приложение........................................................................................................ 16
2
Постановка задачи
В
цифровых
системах
вместо
непрерывного
времени
используется
дискретное время. То есть вместо непрерывного пространства времени
имеется квантованное, где частота квантования соответствует частоте,
генерируемой тактовым генератором. Так как цифровые схемы на
сегодняшний день очень распространены, то используются и дискретные
регуляторы, а значит, актуальна задача моделирования схем при дискретном
времени.
Одним из методов моделирования таких схем и являются разностные схемы.
Данный метод состоит в представлении непрерывных функций табличными,
а дифференциальных уравнений – разностными уравнениями. Непрерывные
переменные заменены дискретными переменными, определёнными в N
моментов времени, то есть x[i] = x(i*h), где i = 1, …, N, а за h обозначен шаг
сетки.
Целью
данного
задания
является
проведение
анализа
качества
моделирования работы схемы, проведенного в среде MicroCap, с
аналогичной разностной схемой.
Таблица 1 Параметры моделируемой системы
Регулятор
T0
n
T
K
Tи
Tд
Tс
ПИ
1.21
6
1.2
1.086
11.2
-
-
ПИД
1.21
6
1.2
1.086
11.2
2.8
0.35
3
Дискретная реализация системы автоматического управления
с
ПИ-регулятором
Рисунок 1 Структурная схема моделирования с ПИ регулятором
Математическое описание системы управления с ПИ-регулятором
Непрерывная система управления может быть описана следующей системой
дифференциальных уравнений:
𝑆𝑣(𝑡) = 𝐴 ∙ 𝑣(𝑡) + 𝐵 ∙ 𝑢(𝑡)
{
𝑥(𝑡) = 𝐶 ∙ 𝑣(𝑡) + 𝐷 ∙ 𝑢(𝑡)
Дискретная же система описывается как:
𝜔[𝑘 + 1] = 𝐴𝑑 ∙ 𝜔[𝑘] + 𝐵𝑑 ∙ 𝑢[𝑘]
{
𝑥[𝑘] = 𝐶𝑑 ∙ 𝜔[𝑘] + 𝐷𝑑 ∙ 𝑢[𝑘]
4
Графики переходной характеристики
Рисунок 2 h = T
5
Рисунок 3 h = T / 2
6
Рисунок 4 h = 0,1T
7
Рисунок 5 h = 0,01T
8
Дискретная реализация системы автоматического управления
с
ПИД-регулятором
Рисунок 6 Структурная схема моделирования с ПИД регулятором
Математическое описание системы управления с ПИ-регулятором
Непрерывная система управления может быть описана следующей системой
дифференциальных уравнений:
𝑆𝑣(𝑡) = 𝐴 ∙ 𝑣(𝑡) + 𝐵 ∙ 𝑢(𝑡)
{
𝑥(𝑡) = 𝐶 ∙ 𝑣(𝑡) + 𝐷 ∙ 𝑢(𝑡)
Дискретная же система описывается как:
𝜔[𝑘 + 1] = 𝐴𝑑 ∙ 𝜔[𝑘] + 𝐵𝑑 ∙ 𝑢[𝑘]
{
𝑥[𝑘] = 𝐶𝑑 ∙ 𝜔[𝑘] + 𝐷𝑑 ∙ 𝑢[𝑘]
9
Графики переходной характеристики
Рисунок 7 h = T
10
Рисунок 8 h = 0.5T
11
Рисунок 9 h = 0.1T
12
Рисунок 10 h = 0.01T
13
Исследование точности дискретной модели для разных времен
дискретизации
Ошибки дискретизации
Шаг дискретизации
Ошибка дискретизации
ПИ
ПИД
T
0.0026931
0.0023857
T/2
0.0010805
0.0010279
T/10
0.0000661
0.0001783
T/100
0.0000169
0.0006705
14
Выводы
С уменьшением шага дискретизации уменьшается и её ошибка – чего и
следовало ожидать.
В таблице для ПИД регулятора и самой высокой частоты дискретизации
наблюдается странный выброс, объяснение природы которого автор не
придумал. Данный факт не позволяет сделать вывод о зависимости качества
дискретизации от сложности используемого объекта.
15
Приложение
Функции для генерации матриц
function [A,B,C,D]=parallel(A1,B1,C1,D1,A2,B2,C2,D2)
nul1=zeros(size(A1,'r'),size(A2,'c'));
nul2=zeros(size(A2,'r'),size(A1,'c'));
A=[A1 nul1 ; nul2 A2];
B=[B1 ; B2];
C=[C1 C2];
D=D1+D2;
endfunction
function [A,B,C,D]=posled(A1,B1,C1,D1,A2,B2,C2,D2)
nul1=zeros(size(A1,'r'),size(A2,'c'));
A=[A1 nul1 ; B2*C1 A2];
B=[B1 ; B2*D1];
C=[D2*C1 C2];
D=D2*D1;
endfunction
function [A,B,C,D]=back(A1,B1,C1,D1)
edin=eye(D1);
A=A1-B1*((edin+D1)\C1);
B=B1-B1*((edin+D1)\D1);
C=(edin+D1)\C1;
D=(edin+D1)\D1;
endfunction
function [A,B,C,D]=integr(T,h)
A=[ 1 ];
B=[ h/T ];
C=[ 1 ];
D=[ h/T ];
endfunction
function [A,B,C,D]=dif(Ti,h)
Td=Ti*0.25;
Tc=Td*0.125;
a1=(2*Tc-h)/(2*Tc+h);
b0=2*Td/(2*Tc+h);
b1=-b0;
A=[ 0 0; b1 a1];
B=[ 1 ; b0 ];
D=[ b0 ];
C=[ b1 a1 ];
endfunction
function [A,B,C,D]=line()
A=[ 0 ];
B=[ 0 ];
C=[ 0 ];
D=[ 1 ];
endfunction
function [A,B,C,D]=power(K)
A=[0];
B=[0];
C=[0];
D=[K];
endfunction
function [A,B,C,D]=element(T0,h)
m=T0/h;
A=[ m/(1+m) ];
B=[ 1/(1+m) ];
C=[ m/(1+m) ];
D=[ 1/(1+m) ];
endfunction
function [A,B,C,D]=hold(m)
A=[zeros(m,1)'; eye(m-1,m-1), zeros(m-1,1)];
B=[1; zeros(m-1,1)];
C=[zeros(1,m-1),1];
D=[0];
Endfunction
16
Программа для вычисления ошибки и построения графиков
K=1.086;
T0=1.21;
Ti=11.2;
n=6;
T=1.2;
endTime=240;
m=1;
h=T/m;
[A3,B3,C3,D3]=line();
/* для ПИД заменить строку выше на следующее:
[A1,B1,C1,D1]=dif(Ti, h);
[A2,B2,C2,D2]=line();
[A3,B3,C3,D3]=parallel(A1,B1,C1,D1,A2,B2,C2,D2);
*/
[A1,B1,C1,D1]=integr(Ti,h);
[A3,B3,C3,D3]=parallel(A1,B1,C1,D1,A3,B3,C3,D3);
[Ak,Bk,Ck,Dk]=power(K);
[A,B,C,D]=posled(A3,B3,C3,D3,Ak,Bk,Ck,Dk);
[Ae,Be,Ce,De]=element(T0,h);
for k=1:n
[A,B,C,D]=posled(A,B,C,D,Ae,Be,Ce,De);
end;
[Ah,Bh,Ch,Dh]=hold(m);
[A,B,C,D]=posled(A,B,C,D,Ah,Bh,Ch,Dh);
[A,B,C,D]=back(A,B,C,D);
time = [0:h:endTime - h];
l=length(time)
w=zeros(size(A, 'r'),l);
sciLabValues=zeros(l);
time(1)
for k=1:l
w(:,k+1)=A*w(:,k)+B;
sciLabValues(k)=C*w(:,k)+D;
end;
length(time)
length(sciLabValues)
plot2d(time,sciLabValues, 2);
microCapValues = [
// data from mCap
];
length(time)
length(microCapValues)
plot2d(time, microCapValues, 5);
err=0;
for k=1:l
err=err+(microCapValues(k)-sciLabValues(k))^2;
end;
err=err/l
print(%io(2), err)
17
Download