Проблемы конструирования устойчивой системы автоматического управления

Анализ проблемы оптимальной стабилизирующей фильтрации для класса объектов управления с полюсами на мнимой оси. Алгоритм конструирования функционала, решающего задачу воспроизведения задающего воздействия и придающего системе свойство устойчивости.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 06.07.2016
Размер файла 2,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

W = RESULT.U

end

Листинг 2

stablility_degree.m

function [ degree, est1, est2 ] = stability_degree(eps)

if size(eps, 1) > 1

length = size(eps, 1);

degree = zeros(length, 1);

est1 = zeros(length, 1);

est2 = zeros(length, 1);

for i=1:1:size(eps)

fprintf('eps = %f\n', eps(i));

[degree(i, 1), est1(i, 1), est2(i,1)] = stability_degree(eps(i));

fprintf('degree = %f, est1 = %f, est2 = %f\n', degree(i, 1), est1(i, 1), est2(i,1));

end

return

end

% S = Q/P

s = sym('s');

W0Q = s^2;

W0P = (s^3+2*s^2+s+2);

S1Q = s^14 - 10*s^12 + 17*s^10 + 67*s^8 + s^6*(eps - 66) - s^4*(eps + 289) - 264*s^2 - 80;

S1P = s^4 * (1 - s^2)*(s^3 + 2*s^2 + s + 2)*(s^3 - 2*s^2 + s - 2);

S2Q = 4*s^6 - 8*s^4 + s^2*(eps - 28) - eps - 16;

S2P = (1 - s^2)*(s^3 + 2*s^2 + s + 2)*(s^3 - 2*s^2 + s - 2);

%distributing roots

S1Q_roots = solve(S1Q)

S1P_roots = solve(S1P)

[S1Q_left_roots, S1Q_right_roots] = distribute_roots(S1Q_roots)

[S1P_left_roots, S1P_right_roots] = distribute_roots(S1P_roots)

S1Q_mult = get_multiplier(S1Q)

S1P_mult = get_multiplier(S1P)

S1Q_right = sym_from_roots(S1Q_right_roots, S1Q_mult)

S1P_right = sym_from_roots(S1P_right_roots, S1P_mult)

fprintf('###S3 = S2 / S1-###\n');

S3Q = S2Q * S1P_right

S3P = S2P * S1Q_right

fprintf('simplified fraction:\n');

[S3Q, S3P] = simplify_sym_fraction(S3Q, S3P)

numerator = sym2poly(S3Q)

num_mult = numerator(1)

denominator = sym2poly(S3P)

den_mult = denominator(1)

numerator = num_mult^(-1) * numerator;

denominator = den_mult^(-1) * denominator;

[residues, poles, direct] = residue(numerator, denominator)

count = 1;

for i=1:1:size(poles)

real_part = real(poles(i));

if abs(real_part) < 10e-12

real_part = 0;

end

if real_part <= 0

new_poles(count) = poles(i);

new_residues(count) = residues(i);

count = count + 1;

end

end

new_poles

new_residues

[new_numerator, new_denominator] = residue(new_residues, new_poles, 0);

new_numerator = num_mult * new_numerator

new_denominator = den_mult * new_denominator

fprintf('###S4 = [S2 / S1-]+###\n');

S4Q = sym_from_poly(new_numerator)

S4P = sym_from_poly(new_denominator)

fprintf('###HV = S4/S1+###\n');

S1Q_left = sym_from_roots(S1Q_left_roots, 1)

S1P_left = sym_from_roots(S1P_left_roots, 1)

HV_Q = S4Q * S1P_left

HV_P = S4P * S1Q_left

fprintf('simplified fraction:\n');

[HV_Q, HV_P] = simplify_sym_fraction(HV_Q, HV_P)

fprintf('###HV_Q roots###\n');

solve(HV_Q)

fprintf('###HV_P - HV_Q roots###\n');

solve(HV_P - HV_Q)

W1Q = (W0P * HV_Q);

W1P = (W0Q * (HV_P - HV_Q));

fprintf('simplified fraction:\n');

[W1Q, W1P] = simplify_sym_fraction(W1Q, W1P)

W1Q_roots = solve(W1Q);

W1P_roots = solve(W1P);

CP_roots = solve(W1Q*W0Q + W1P*W0P)

d = 100;

for i=1:1:size(CP_roots)

if real(CP_roots(i)) >= 0

fprintf('UNSTABLE ROOT:');

disp(CP_roots(i));

fprintf('\n');

degree = 0;

return

end

if abs(real(d)) > abs(real(CP_roots(i)))

d = CP_roots(i);

end

end

root = d;

degree = abs(real(d));

HV = HV_Q / HV_P;

HV_MIN = subs(HV, s, -s);

W0 = W0Q / W0P;

W0_MIN = subs(W0, s, -s);

S_mm = 4/(1-s^2);

S_nn = 1;

EST1 = 1/(2*1i*pi) * int(HV*HV_MIN*(S_mm + S_nn) - (HV-HV_MIN)*S_mm + S_mm, s, -1i*inf, 1i*inf);

EST2 = 1/(2*1i*pi) * int(W0^(-1)*W0_MIN^(-1)*HV*HV_MIN*S_mm, s, -1i*inf, 1i*inf);

est1 = double(EST1);

est2 = double(EST2);

simplify_sym_fraction.m

function [ new_num, new_den ] = simplify_sym_fraction(num, den)

s = sym('s');

num_mult = get_multiplier(num)

num_roots = solve(num);

den_mult = get_multiplier(den)

den_roots = solve(den);

[new_num_roots, new_den_roots] = delete_intersected_roots(num_roots, den_roots);

new_num = sym_from_roots(new_num_roots, num_mult/den_mult);

new_den = sym_from_roots(new_den_roots, 1);

end

delete_intersected_roots.m

%not optimized, but pretty recoursed!

function [ roots1, roots2 ] = delete_intersected_roots(roots1, roots2)

i = 0; j = 0;

for i=1:1:size(roots1)

for j=1:1:size(roots2)

% this is dangerous place. normally, we can't delete near roots

% if they are from right plane.

if (roots1(i) == roots2(j)) || (abs(roots1(i)-roots2(j)) < 10e-12)

roots1(i) = [];

roots2(j) = [];

[ roots1, roots2 ] = delete_intersected_roots(roots1, roots2);

return

end

end

end

end

distribute_roots.m

function [left_roots, right_roots] = distribute_roots(roots_arr)

l_count = 0;

r_count = 0;

poles_count = 0;

for j=1:1:size(roots_arr)

if real(roots_arr(j)) < 0

l_count = l_count + 1;

left_roots(l_count) = roots_arr(j);

elseif real(roots_arr(j)) > 0

r_count = r_count + 1;

right_roots(r_count) = roots_arr(j);

else

poles_count = poles_count + 1;

poles_arr(poles_count) = roots_arr(j);

end

end

if l_count == 0

left_roots = [];

end

if r_count == 0

right_roots = [];

end

if poles_count > 0

[left_poles, right_poles] = distribute_poles(poles_arr);

left_roots = (cat(2, left_poles, left_roots));

right_roots = (cat(2, right_poles, right_roots));

end

left_roots = left_roots';

right_roots = right_roots';

end

function [counted_poles] = add_pole(counted_poles, pole)

found = 0;

for i=1:1:size(counted_poles)

if counted_poles(i,1) == pole

counted_poles(i,2) = counted_poles(i,2) + 1;

found = 1;

break

end

end

if found ~= 1

poles_count = size(counted_poles, 1) + 1;

counted_poles(poles_count,1) = pole;

counted_poles(poles_count,2) = 1;

end

end

%we distribute poles equally between both planes

function [left_poles, right_poles] = distribute_poles(poles)

counted_poles = [];

left_poles = [];

right_poles = [];

for j=1:1:size(poles, 2)

[counted_poles] = add_pole(counted_poles, poles(1,j));

end

left_poles_count = 1;

right_poles_count = 1;

for j=1:1:size(counted_poles)

for k=1:1:(counted_poles(j,2)/2)

left_poles(left_poles_count) = counted_poles(j,1);

left_poles_count = left_poles_count + 1;

right_poles(right_poles_count) = counted_poles(j,1);

right_poles_count = right_poles_count + 1;

end

end

end

get_multiplier.m

function [multiplier] = get_multiplier(sym_poly)

poly = sym2poly(sym_poly);

multiplier = poly(1);

end

sym_from_poly.m

function [sym_poly] = sym_from_poly(poly)

s = sym('s');

sym_poly = 0;

degree = size(poly, 2);

for k=1:1:degree

real_part = real(poly(k));

imag_part = imag(poly(k));

if abs(imag_part) < 10e-12

imag_part = 0;

end

if abs(real_part) < 10e-12

real_part = 0;

end

coeff = real_part + imag_part * 1i;

sym_poly = sym_poly + coeff*s^(degree-k);

end

end

sym_from_roots.m

function [ sym_poly ] = sym_from_roots(roots, multiplier)

s = sym('s');

sym_poly = 1;

for k=1:1:size(roots)

sym_poly = sym_poly * (s - roots(k));

end

sym_poly = multiplier * sym_poly;

end

Размещено на Allbest.ru


Подобные документы

  • Методы проектирования систем автоматического управления: экспериментальный и аналитический. Моделирование замкнутой системы управления. Системы в динамике: слежение, стабилизация, алгоритм фильтрации. Математические модели систем, воздействий, реакция.

    контрольная работа [522,9 K], добавлен 05.08.2010

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

    лабораторная работа [681,9 K], добавлен 17.04.2010

  • Проведение аналитического конструирования оптимальных регуляторов для систем с распределенными параметрами. Синтез распределенного регулятора для системы управления температурным полем многослойной пластинки. Анализ работы замкнутой системы управления.

    курсовая работа [461,2 K], добавлен 20.12.2014

  • Технология конструирования программного обеспечения, надежно и эффективно работающего в реальных компьютерах. Модель быстрой разработки приложений (Rapid Application Development) как один из примеров применения инкрементной стратегии конструирования.

    реферат [666,5 K], добавлен 24.06.2009

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

    курсовая работа [3,4 M], добавлен 21.11.2012

  • Особенности структурной и функциональной схем систем автоматического управления, характеристика и определение запаса ее устойчивости. Принцип управления по замкнутому циклу и ошибки переходного процесса. Использование регулятора для коррекции системы.

    контрольная работа [827,6 K], добавлен 09.12.2011

  • Формулировка поставленной задачи при конструировании систем управления для идентификации нестационарных объектов. Изучение основ алгоритмического конструирования системы с неполной информацией. Рассмотрение использования метода адаптивной идентификации.

    курсовая работа [110,8 K], добавлен 10.08.2014

  • Исследование системы автоматического управления при помощи программного обеспечения MATLAB и пакета Simulink. Изучение замкнутой системы согласно критериям устойчивости Гурвица, Михайлова и Найквиста. Реализация модели "жесткого" спутника Земли.

    методичка [911,6 K], добавлен 10.10.2010

  • Теория автоматического управления - совокупность целесообразных действий, направленных на достижение поставленных целей. Объект управления - техническое устройство, в котором протекает управляемый процесс. Алгебраические критерии устойчивости Гурвица.

    курсовая работа [338,1 K], добавлен 03.10.2008

  • Синтез системы автоматического управления корневым методом, разработанным Т. Соколовым. Определение передаточных функций по задающему и возмущающему воздействиям. Оценка устойчивости замкнутой нескорректированной системы регулирования по критерию Гурвица.

    курсовая работа [1,3 M], добавлен 26.01.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.