- •1Теория автоматического управления
- •1.1Общие сведения
- •1.2Определение параметров типовых динамических звеньев по их временным характеристикам
- •1.2.1Типовые динамические звенья
- •1.2.1.1Апериодическое (инерционное) звено
- •1.2.1.2Дифференцирующее звено первого порядка
- •1.2.1.3Колебательное звено
- •1.3Определение параметров типовых динамических звеньев по их частотным характеристикам
- •1.3.1Апериодическое (инерционное) звено
- •1.3.2Дифференцирующее звено первого порядка
- •1.3.3Колебательное звено
- •1.4Исследование устойчивости и качества линейной системы автоматического управления
- •1.4.1Определение условий устойчивости системы автоматического управления
- •1.4.2Анализ точности системы автоматического управления
- •1.4.3Интегральная оценка качества
- •1.4.4Выбор оптимальных параметров управляющего устройства по минимуму интегральной оценки
- •2.4Окно предыстории
- •2.5Командное окно
- •2.6Программирование в системе MatLab
- •2.6.1Создание m-файлов
- •2.6.2Вывод графиков
- •2.7Моделирование в среде Simulink
- •2.7.1Запуск среды
- •2.7.2Создание моделей
- •2.7.3Построение основных частотных и временных характеристик линейной системы управления
- •2.8Создание исполняемого файла
- •2.8.1Назначение компилятора MatLab
- •2.8.2Конфигурирование компилятора
- •2.8.3Среда разработки Deployment Tool
- •2.8.4Создание приложения
- •2.8.5Использование команды mcc
- •3.1.1.2Дифференцирующее звено
- •3.1.1.3Колебательное звено
- •3.1.2Моделирование с использованием gui-приложения
- •3.1.3Лабораторное задание
- •3.1.4Содержание отчета
- •3.1.5Контрольные вопросы
- •3.2Определение параметров типовых динамических звеньев по их частотным характеристикам
- •3.2.1Порядок выполнения работы в системе MatLab
- •3.2.1.1Апериодическое звено
- •3.2.1.2Дифференцирующее звено
- •3.2.1.3Колебательное звено
- •3.2.2Моделирование с использованием gui-приложения
- •3.2.3Лабораторное задание
- •3.2.4Содержание отчета
- •3.2.5Контрольные вопросы
- •3.3Исследование устойчивости и качества линейной системы автоматического управления
- •3.3.1Порядок выполнения работы в системе MatLab
- •3.3.2Моделирование с использованием gui-приложения
- •3.3.3Лабораторное задание
- •3.3.4Содержание отчета
- •3.3.5Контрольные вопросы
- •Определение параметров дифференциального звена по временным характеристикам
- •Определение параметров колебательного звена по временным характеристикам
- •Определение параметров дифференциального звена по частотным характеристикам
- •Определение параметров колебательного звена по частотным характеристикам
Определение параметров колебательного звена по частотным характеристикам
disp('Лабораторная работа №2')
clear all;
close all;
disp('Определение параметров коллебательного звена по частотным характеристикам ')
for i = 1:100
%вводим начальные данные
R = input('enter resistance, kOm: R = ');
L = input('enter inductance, Gn: L = ');
C = input('enter capacity, mkF: C = ');
%считаем постоянную времени и показатель коллебательности
T=(L*C*0.001)^1/2;
ksi=R*1000/2*(C*0.001/L)^1/2;
%передаточная функция
W = tf([1],[T^2 2*T*ksi 1])
%открываем файл в Simulink
open kolleb.mdl
%строим АФХ
figure(1);
nyquist(W);
grid on;
hold all;
title('АФХ коллебательных звеньев с разными постоянными времени');
%выводим легенду
r(i,1) = R;
c(i,1) = C;
l(i,1) = L;
L1(i,:)=['R ='];
L2(i,:)=['C ='];
L3(i,:)=['L ='];
Legen = [L1, num2str(r),repmat(';', size(L1,1), 1),L2, num2str(c),repmat(';', size(L1,1), 1),L3, num2str(l)];
legend(Legen);
%строим ЛАЧХ и ФЧХ
figure(2);
bodeplot(W);
grid on;
hold all;
title('ЛАЧХ и ФЧХ коллебательных звеньев с разными постоянными времени');
%выводим легенду
r(i,1) = R;
c(i,1) = C;
l(i,1) = L;
L1(i,:)=['R ='];
L2(i,:)=['C ='];
L3(i,:)=['L ='];
Legen = [L1, num2str(r),repmat(';', size(L1,1), 1),L2, num2str(c),repmat(';', size(L1,1), 1),L3, num2str(l)];
legend(Legen);
%запрос о продолжении
k = input('Хотите продолжить? Y/N:', 's');
if (k == 'n') || (k == 'N'), break; end;
end
ПРИЛОЖЕНИЕ 3
ИСЛЕДОВАНИЕ УСТОЙЧИВОСТИИ КАЧЕСТВА ЛИНЕЙНОЙ СИСТЕМЫ АВТОМАТИЧЕСКОГО УПРАВЛЕНИЯ
clear all; % очищаем рабочую область
close all;
clc; % очищаем командное окно
% Задаем постоянные времени объекта управления
T1=1;
T2=1;
g0 = 0.5; % амплитуда ступеньки
kp = 1; % пропорциональный коэффициент
%% 1. Собранная схема САУ
open Regs;
%% Данные для регуляторов
%% Для П–регулятора:
% kp =0,05-1; ku=0; k0=10
%% Для И–регулятора
% kp =1; ku=0.05-10; k0=1
%% Для ПИ–регулятора
% kp =1; ku=0.05-10; k0=1
% Передаточная функция объекта управления без коэффициента усиления
Wob = tf(1,[T1 1])*tf(1,[T2 1]);
%% 2. Рассчитать область возможных значений суммарного коэффициента передачи
% интегрирующего блока ku=Tu^(-1)
% для ПИ–регулятора:
k0 = 1;
Tu1 = k0*T1*T2/(T1+T2)/(1+kp*k0);
ki1 = 1/Tu1;
disp(['Для ПИ–регулятора область возможных значений Kи_sum < ', num2str(ki1)]);
% для И–регулятора:
Tu2 = k0*T1*T2/(T1+T2);
ki2 = 1/Tu2;
disp(['Для И–регулятора область возможных значений Kи_sum < ', num2str(ki2)]);
%% 3. Для САУ с П–регулятором рассчитать установившуюся ошибку и построить
% график e=f(kp)
cp = 0.05:0.05:1;
Kp = cp*kp;
k01 = 10; % Для П–регулятора
Eust = g0./(1+Kp*k01); % Расчет установившейся ошибки
figure
plot(Kp,Eust,'-o');
grid; xlim([Kp(1) Kp(end)]);
title('Установившаяся ошибка системы с П–регулятором при входной ступеньке g_0=0.5');
xlabel('\fontsize{10} Kp_\Sigma'); ylabel('\fontsize{16} е_у_с_т');
Kp = [0.05,0.5,1];
Wp = k01*Wob*Kp; % Передаточные функции разомкнутой системы
% Передаточные функции замкнутой системы
WPloop1 = feedback(Wp(1),1);
WPloop2 = feedback(Wp(2),1);
WPloop3 = feedback(Wp(3),1);
figure
step(WPloop1);
title('Переходной процесс системы с П–регулятором');
grid;
hold on
step(WPloop2); step(WPloop3);
legend(['Kп_\Sigma = ', num2str(Kp(1))],['Kп_\Sigma = ', num2str(Kp(2))],...
['Kп_\Sigma = ', num2str(Kp(3))]);
hold off
%% 4. Для САУ с И– и ПИ–регуляторами пронаблюдать величину установившейся ошибки
% Для САУ с ПИ–регулятором построим переходные процессы для трех
% коэффициентов ku
wpi1 = tf([kp ki1],[1 0]);
wpi2 = tf([kp ki1-1],[1 0]);
wpi3 = tf([kp ki1-2],[1 0]);
Wpi1 = wpi1*k0*Wob;
Wpi2 = wpi2*k0*Wob;
Wpi3 = wpi3*k0*Wob;
WPIloop1 = feedback(Wpi1,1);
WPIloop2 = feedback(Wpi2,1);
WPIloop3 = feedback(Wpi3,1);
figure
stepplot(WPIloop1);
hold on
stepplot(WPIloop2);
stepplot(WPIloop3);
grid;
title('Переходной процесс системы с ПИ–регулятором');
legend(['Kи_\Sigma = ', num2str(ki1)],['Kи_\Sigma = ', num2str(ki1-1)],...
['Kи_\Sigma = ', num2str(ki1-2)]);
hold off
% Для САУ с И–регулятором построим переходные процессы для трех
% коэффициентов ku
wi1 = tf(ki2,[1 0]);
wi2 = tf(ki2-1,[1 0]);
wi3 = tf(ki2-1.5,[1 0]);
Wi1 = wi1*k0*Wob;
Wi2 = wi2*k0*Wob;
Wi3 = wi3*k0*Wob;
WIloop1 = feedback(Wi1,1);
WIloop2 = feedback(Wi2,1);
WIloop3 = feedback(Wi3,1);
figure
stepplot(WIloop1);
hold on
stepplot(WIloop2);
stepplot(WIloop3);
grid;
title('Переходной процесс системы с И–регулятором');
legend(['Kи_\Sigma = ', num2str(ki2)],['Kи_\Sigma = ', num2str(ki2-1)],...
['Kи_\Sigma = ', num2str(ki2-1.5)]);
hold off
%% 5.Для САУ с И– и ПИ–регуляторами построить перходные характеристики и
% проверить выполнение условий устойчивости
% см. п.4
%% 6. Рассчитать оптимальные значения ku для И– и ПИ–регуляторов
% для ПИ–регулятора:
ku_opt1=2*(1+kp*k0)/kp/T1/(3+kp*k0);
disp('Оптимальное значение суммарного коэффициента передачи интегрирующего блока');
disp( ['для ПИ–регулятора kи_опт = ', num2str(ku_opt1)]);
wpi = tf([kp ku_opt1],[1 0]);
Wpi = wpi*k0*Wob;
WPIloop = feedback(Wpi,1);
% для И–регулятора:
ku_opt2=0.67/k0*T1;
disp( ['для И–регулятора kи_опт = ', num2str(ku_opt2)]);
wi = tf([kp ku_opt2],[1 0]);
Wi = wi*k0*Wob;
WIloop = feedback(Wi,1);
figure
step(WPIloop);
hold on
step(WIloop);
title('Переходной процесс системы с оптимальным значением kи_\Sigma');
grid; legend('ПИ–регулятор','И–регулятор');
%% 7.Построить график J0 от ku/kuопт
ki = 0.05:0.05:10;
Ti = 1./ki;
% Для ПИ–регулятора
J1 = Ti.*(2*Ti+(3+kp*k0)*k0*T1)/2/k0./(2*Ti*(1+kp*k0)-k0*T1);
% Для И–регулятора
J2 = Ti.*(2*Ti+3*k0*T1)/2/k0./(2*Ti-k0*T1);
figure
subplot(1,2,1)
plot(ki./ku_opt1, J1,'-d');
grid;
title('Интегральная оценка САУ с ПИ–регулятором');
xlabel('k_и_\Sigma/k_и_\Sigma_о_п_т '); ylabel('J_0');
subplot(1,2,2)
plot(ki./ku_opt2, J2,'-d');
grid;
title('Интегральная оценка САУ с И–регулятором');
xlabel('k_и_\Sigma/k_и_\Sigma_о_п_т '); ylabel('J_0');
%% 8. Построить переходные характеристики и определить перерегулирование при
%ku=0.2kuопт, ku=kuопт, ku=2kuопт
%Для ПИ–регулятора
kpu1 = 0.2*ku_opt1;
kpu2 = ku_opt1;
kpu3 = 2*ku_opt1;
wpi1 = tf([kp kpu1],[1 0]);
wpi2 = tf([kp kpu2],[1 0]);
wpi3 = tf([kp kpu3],[1 0]);
Wpi1 = wpi1*k0*Wob;
Wpi2 = wpi2*k0*Wob;
Wpi3 = wpi3*k0*Wob;
WPIloop1 = feedback(Wpi1,1);
WPIloop2 = feedback(Wpi2,1);
WPIloop3 = feedback(Wpi3,1);
disp('Показатели качества переходного процесса системы с ПИ–регулятором:');
[ypi1 tpi1] = step(WPIloop1,200);
SigmaPI1 = (max(ypi1)-dcgain(WPIloop1))/dcgain(WPIloop1)*100;
TrPI1 = tpi1((ypi1>=1.05*dcgain(WPIloop1))|(ypi1<=0.95*dcgain(WPIloop1)));
Tpi1 = TrPI1(end);
disp(['Для Kи_sum = 0.2*kи_o_п_т = ', num2str(0.2*ku_opt1)]);
disp(['Перерегулирование sigma = ', num2str(SigmaPI1),'%']);
disp(['Время переходного процесса Tr = ', num2str(Tpi1),'c']);
[ypi2 tpi2] = step(WPIloop2,100);
SigmaPI2 = (max(ypi2)-dcgain(WPIloop2))/dcgain(WPIloop2)*100;
TrPI2 = tpi2((ypi2>=1.05*dcgain(WPIloop2))|(ypi2<=0.95*dcgain(WPIloop2)));
Tpi2 = TrPI2(end);
disp(['Для Kи_sum = kи_o_п_т = ', num2str(ku_opt1)]);
disp(['Перерегулирование sigma = ', num2str(SigmaPI2),'%']);
disp(['Время переходного процесса Tr = ', num2str(Tpi2),'c']);
[ypi3 tpi3] = step(WPIloop3,100);
SigmaPI3 = (max(ypi3)-dcgain(WPIloop3))/dcgain(WPIloop3)*100;
TrPI3 = tpi3((ypi3>=1.05*dcgain(WPIloop3))|(ypi3<=0.95*dcgain(WPIloop3)));
Tpi3 = TrPI3(end);
disp(['Для Kи_sum = 2*kи_o_п_т = ', num2str(2*ku_opt1)]);
disp(['Перерегулирование sigma = ', num2str(SigmaPI3),'%']);
disp(['Время переходного процесса Tr = ', num2str(Tpi3),'c']);
figure
subplot(1,2,1)
stepplot(WPIloop1);
hold on
stepplot(WPIloop2);
stepplot(WPIloop3);
grid;
title('Переходной процесс системы с ПИ–регулятором');
legend(['Kи_\Sigma = 0.2*kи_o_п_т = ', num2str(0.2*ku_opt1)],...
['Kи_\Sigma = kи_o_п_т = ', num2str(ku_opt1)],...
['Kи_\Sigma = 2*kи_o_п_т = ', num2str(2*ku_opt1)]);
hold off
% Для И–регулятора
ku1 = 0.2*ku_opt2;
ku2 = ku_opt2;
ku3 = 2*ku_opt2;
wi1 = tf([kp ku1],[1 0]);
wi2 = tf([kp ku2],[1 0]);
wi3 = tf([kp ku3],[1 0]);
Wi1 = wi1*k0*Wob;
Wi2 = wi2*k0*Wob;
Wi3 = wi3*k0*Wob;
WIloop1 = feedback(Wi1,1);
WIloop2 = feedback(Wi2,1);
WIloop3 = feedback(Wi3,1);
disp('Показатели качества переходного процесса системы с И–регулятором:');
[yi1 ti1] = step(WIloop1,250);
SigmaI1 = (max(yi1)-dcgain(WIloop1))/dcgain(WIloop1)*100;
TrI1 = ti1((yi1>=1.05*dcgain(WIloop1))|(yi1<=0.95*dcgain(WIloop1)));
Ti1 = TrI1(end);
disp(['Для Kи_sum = 0.2*kи_o_п_т = ', num2str(0.2*ku_opt2)]);
disp(['Перерегулирование sigma = ', num2str(SigmaI1),'%']);
disp(['Время переходного процесса Tr = ', num2str(Ti1),'c']);
[yi2 ti2] = step(WIloop2,100);
SigmaI2 = (max(yi2)-dcgain(WIloop2))/dcgain(WIloop2)*100;
TrI2 = ti2((yi2>=1.05*dcgain(WIloop2))|(yi2<=0.95*dcgain(WIloop2)));
Ti2 = TrI2(end);
disp(['Для Kи_sum = kи_o_п_т = ', num2str(ku_opt2)]);
disp(['Перерегулирование sigma = ', num2str(SigmaI2),'%']);
disp(['Время переходного процесса Tr = ', num2str(Ti2),'c']);
[yi3 ti3] = step(WIloop3,100);
SigmaI3 = (max(yi3)-dcgain(WIloop3))/dcgain(WIloop3)*100;
TrI3 = ti3((yi3>=1.05*dcgain(WIloop3))|(yi3<=0.95*dcgain(WIloop3)));
Ti3 = TrI3(end);
disp(['Для Kи_sum = 2*kи_o_п_т = ', num2str(2*ku_opt2)]);
disp(['Перерегулирование sigma = ', num2str(SigmaI3),'%']);
disp(['Время переходного процесса Tr = ', num2str(Ti3),'c']);
subplot(1,2,2)
stepplot(WIloop1);
hold on
stepplot(WIloop2);
stepplot(WIloop3);
grid;
title('Переходной процесс системы с И–регулятором');
legend(['Kи_\Sigma = 0.2*kи_o_п_т = ', num2str(0.2*ku_opt2)],...
['Kи_\Sigma = kи_o_п_т = ', num2str(ku_opt2)],...
['Kи_\Sigma = 2*kи_o_п_т = ', num2str(2*ku_opt2)]);
hold off
