Расчёт закона управления продольным движением самолёта

Автор: Пользователь скрыл имя, 11 Марта 2012 в 09:26, курсовая работа

Описание работы

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

Содержание

ТЕХНИЧЕСКОЕ ЗАДАНИЕ 3
РЕФЕРАТ 4
ВВЕДЕНИЕ 5
1. ПОСТАНОВКА ЗАДАЧИ 6
2. МАТЕМАТИЧЕСКОЕ ОПИСАНИЕ ПРОДОЛЬНОГО ДВИЖЕНИЯ САМОЛЁТА 7
2.1 Исследование модели объекта без привода 9
2.2 Исследование модели объекта с приводом 13
2.3 Исследование моделей датчиков угловой скорости и перегрузки 16
2.4 Математическая модель датчика положения штурвала 18
3. ЛОГАРИФМИЧЕСКИЕ ЧАСТОТНЫЕ И ПЕРЕХОДНЫЕ ХАРАКТЕРИСТИКИ СИСТЕМЫ 19
4. РАСЧЁТ ОБРАТНОЙ СВЯЗИ 23
5. СИНТЕЗ НАБЛЮДАТЕЛЯ 29
10. ИССЛЕДОВАНИЕ ПОЛНОЙ СИСТЕМЫ С УЧЁТОМ НЕЛИНЕЙНОСТЕЙ РУЛЕВОГО ПРИВОДА И ДИНАМИКИ ДАТЧИКОВ 34
11. ИССЛЕДОВАНИЕ СИСТЕМЫ ПРИ РАЗБРОСЕ ПАРАМЕТРОВ 37

Работа содержит 1 файл

СОДЕРЖАНИЕ.docx

— 708.09 Кб (Скачать)

 

%_______________________________________________

% Коэффициент нормировки передаточных функций.

%_______________________________________________

 

[num_rs,den_rs] = tfdata(razomk_systema(1),'v');

K_rs = den_rs(length(den_rs))/num_rs(length(num_rs))

 

%_______________________________________________

% Нормирование ПФ.

%_______________________________________________

 

razomk_systema_norm = razomk_systema*K_rs;

 

%РУЛЕВОЙ ПРИВОД + ДИНАМИКА САМОЛЁТА + ДАТЧИКИ - РАЗОМКНУТАЯ  СИСТЕМА

 

%__________________________________________________

% Зададим датчики  системы в пространстве состояний.

%__________________________________________________

 

A_gir = [-160 -200; 200 0];

B_gir = [200; 0];

C_gir = [0 1];

D_gir = [0];

giroskop = ss(A_gir,B_gir,C_gir,D_gir);

 

A_aks = [-133 -167; 167 0];

B_aks = [1667; 0];

C_aks = [0 1];

D_aks = [0];

akselerometr = ss(A_aks,B_aks,C_aks,D_aks);

 

%_______________________________________________

% Передаточная функции гироскопа.

%_______________________________________________

 

disp('ПФ гироскопа');

W_g = tf(giroskop)

 

%_______________________________________________

%нули и полюса  пф

%_______________________________________________

 

disp('Нули и полюсы передаточной функции гироскопа');

[zeros_u_g,poles_u_g,koef_u_g] = zpkdata(zpk(W_g),'v')

 

%_______________________________________________

% Передаточная функции акселерометра.

%_______________________________________________

 

 

disp('ПФ акселерометра');

W_a = tf(akselerometr)

 

%_______________________________________________

%нули и полюса  пф

%_______________________________________________

 

disp('Нули и полюсы передаточной функции гироскопа');

[zeros_u_a,poles_u_a,koef_u_a] = zpkdata(zpk(W_a),'v')

 

%_______________________________________________

% Соединим последовательно  ОУ и привод и датчики

%_______________________________________________

 

razomk_systema_dat4ik_aks = razomk_systema(1)*akselerometr;

razomk_systema_dat4ik_gir = razomk_systema(2)*giroskop;

 

disp('Матрицы ОУ с приводом (рулевой привод и динамика самолёта - разомкнутая система)');

[A_rsd1,B_rsd1,C_rsd1,D_rsd1] = ssdata(razomk_systema_dat4ik_aks)

[A_rsd2,B_rsd2,C_rsd2,D_rsd2] = ssdata(razomk_systema_dat4ik_gir)

 

%_______________________________________________

% Передаточная функция  объекта.

%_______________________________________________

 

disp('ПФ обьекта с приводом (разомкнутой системы)');

W_rsdat = [tf(razomk_systema_dat4ik_aks);tf(razomk_systema_dat4ik_gir)]

 

%_______________________________________________

% Коэффициент нормировки передаточных функций.

%_______________________________________________

 

[num_rsd,den_rsd] = tfdata(razomk_systema_dat4ik_aks,'v');

K_rsd = den_rsd(length(den_rsd))/num_rsd(length(num_rsd));

 

%_______________________________________________

% Нормирование ПФ.

%_______________________________________________

 

razomk_systema_dat4ik_aks_norm = razomk_systema_dat4ik_aks*K_rsd;

razomk_systema_dat4ik_gir_norm = razomk_systema_dat4ik_gir*K_rsd;

%____________________

% ВЫВОД ГРАФИКОВ

%____________________

 

 % ПФ без привода и с приводом по нормальной перегрузке.

 %ltiview({'step'},samolet_norm(1),'k-',razomk_systema_norm(1),'k--');

 % ПФ без привода и с приводом по угловой скорости тангажа.

 %ltiview({'step'},samolet_norm(2),'k-',razomk_systema_norm(2),'k--');

 % ЛАЧХ нормированной системы и нормированной ситемы с приводом.

 %ltiview({'bode'},samolet_norm(1),'k-',razomk_systema_norm(1),'k--');

 %ltiview({'bode'},samolet_norm(2),razomk_systema_norm(2),'k--');

 %ЛАЧХ нормированной системы с приводом и датчиками

 %ltiview({'bode'},razomk_systema_norm(1),'k-',razomk_systema_dat4ik_aks_norm,'k--');

 %ltiview({'bode'},razomk_systema_norm(2),'k-',razomk_systema_dat4ik_gir_norm,'k--');

 % Нули и полюсы ПФ по каждой координате от входа к выходу с приводом.

 %ltiview({'iopzmap'},razomk_systema_dat4ik_aks,razomk_systema_dat4ik_gir);

 %ltiview({'iopzmap'},razomk_systema_norm, razomk_systema_dat4ik_aks, razomk_systema_dat4ik_gir_norm);

 

 %УПРАВЛЕНИЕ

 %________________________________

 %РАСЧЕТ ОБРАТНОЙ СВЯЗИ

 %________________________________

 

disp('Матрица управлЯемости в базисе h');

Uh(:,1)=B_rs

Uh(:,2)=A_rs*B_rs

Uh(:,3)=A_rs*A_rs*B_rs

Uh(:,4)=A_rs*A_rs*A_rs*B_rs

disp('Ее определитель');

det(Uh)

disp('Так как определитель не равен нулю, система управляемя');

 

 disp('УПРАВЛЕНИЕ');

 

disp('Желаемые полюсы ЗАМКНУТОЙ системы');

 

polus_help=[-25+29i;-25-29i;-2+1.5i;-2-1.5i]

 

disp('Расчет управления');

L= place(A_rs,B_rs,polus_help)

 

disp('Матрица динамики замкнутой системы');

A_zs= A_rs-B_rs*L

 

%_______________________________________

% Передаточная функция  замкнутой системы

%_______________________________________

 

disp('Передаточная функция замкнутой системы');

W_zs=ss(A_zs,B_rs,C_rs,D_rs);

tf(W_zs)

 

%________________________________

%Расчет коэффициента  усиления по

%командному сигналу

%________________________________

 

[num_zs,den_zs]=tfdata(W_zs(1,1),'v');

disp('Коэфициент усиления по командному сигналу');

Kv = den_zs(length(den_zs))/num_zs(length(num_zs))

G=Kv/50

W_zs=W_zs*G;

gain_ny=dcgain(W_zs(1,1));

%gain_ny

%W_zsNORM=W_zs/gain_ny;

%__________________________

%Нули и полюсы  объекта с ОС

%__________________________

disp('Нули и полюсы объекта с ОС');

[zero_os1,poles_os1,koef_os1]=zpkdata(zpk(W_zs(1)),'v')

[zero_os2,poles_os2,koef_os2]=zpkdata(zpk(W_zs(2)),'v')

%______________________________________________

%Частотные характеристики  и переходнаЯ функциЯ

%объекта управлениЯ с приводом

%______________________________________________

%ltiview('step',razomk_systema_norm(1,1),'k-', W_zsNORM(1,1),'k--')

%ltiview('step',razomk_systema_norm(2,1),'k-', W_zsNORM(2,1),'k--')

 

 

% РАСЧЕТ НАБЛЮДАТЕЛЯ  ВЕКТОРА ПЕРЕМЕННЫХ СОСТОЯНИЯ

%ОБЪЕКТА С ПРИВОДОМ

%_______________________________________

% Зададим собственные  числа наблюдателя.

%_______________________________________

 

polnabludatel = [-30.1; -30.2; -30.3; -30.4];

disp('Матрица наблюдателя');

Kalmana = place(A_rs',C_rs',polnabludatel).'

%____________________________________

% Рассчитаем регулятор  ОУ с приводом

%____________________________________

 

disp('Расчет регулятора')

regulator = reg(razomk_systema,L,Kalmana);

[A_reg,B_reg,C_reg,D_reg] = ssdata(regulator);

%___________________________

% Обьект с наблюдателем с ОС

%___________________________

 

razomk_systema_nabl = feedback(razomk_systema,regulator,+1);

[A_nabl,B_nabl,C_nabl,D_nabl] = ssdata(razomk_systema_nabl)

%________________

% Нормирование ПФ

%________________

 

[num_rs_dp,den_rs_dp] = tfdata(razomk_systema_nabl(1),'v');

K = den_rs_dp(length(den_rs_dp))/num_rs_dp(length(num_rs_dp))

razomk_systema_nabl_norm = razomk_systema_nabl*K;

%_____________________________________________________________

% Отклик на ступенчатое  воздействие

%обьекта + ОС + наблюдетель и объекта с ОС, но без наблюдателя.

%_______________________________________________________________

 

 %ltiview('step',W_zsNORM(1),'k-',razomk_systema_nabl_norm(1),'k--');

 %ltiview('step',W_zsNORM(2),'k-',razomk_systema_nabl_norm(2),'k--');

 

 %___________________________

 %Влияние разброса параметров

 %___________________________

  %Wz_d -20%

 B_s=[-Z_d; -(0.8*Mz_d-Mz_at*Z_d)]

 samolet = ss(A_s,B_s,C_s,D_s);

 razomk_systema = series(privod,samolet);

 zamk_systema = feedback(razomk_systema,regulator,+1);

zamk_systema_norm1 = zamk_systema*K;

 

 %Wz_d +20%

B_s=[-Z_d; -(1.2*Mz_d-Mz_at*Z_d)]

 samolet = ss(A_s,B_s,C_s,D_s);

 razomk_systema = series(privod,samolet);

 zamk_systema = feedback(razomk_systema,regulator,+1);

zamk_systema_norm2 = zamk_systema*K;

 %ltiview ('step',zamk_systema_norm1(1),'k-',razomk_systema_nabl_norm(1),'k--',zamk_systema_norm2(1),'k-.')

 %ltiview ('step',zamk_systema_norm1(2),'k-',razomk_systema_nabl_norm(2),'k--',zamk_systema_norm2(2),'k-.')

%_____________________________

% начальные условия  наблюдателя

%_____________________________

open_system('nabl_poln.mdl');%вызов модели

sim('nabl_poln');%запуск моделирования

%построение графиков

figure(1);

    title(['С наблюдателем с ненулевыми начальными условими и без наблюдателя по нормальной перегрузке'])

    xlabel('t');

    ylabel('y');

    hold on

    grid on

plot(ny1.time,ny1.signals.values,'k-','LineWidth',2);

plot(ny2.time,ny2.signals.values,'k--','LineWidth',2);

figure(2);

    title(['С наблюдателем с ненулевыми начальными условими и без наблюдателя по угловой скорости тангажа'])

    xlabel('t');

    ylabel('y');

    hold on

    grid on

plot(wz1.time,wz1.signals.values,'k-','LineWidth',2);

plot(wz2.time,wz2.signals.values,'k--','LineWidth',2);

figure(3);

    title(['Ошибка оценки вектора x(t) по ny']);

    xlabel('t');

    ylabel('y');

    hold on

    grid on

plot(wz3.time,wz3.signals.values,'k-','LineWidth',2);

figure(4);

    title(['Ошибка оценки вектора x(t) по wz']);

    xlabel('t');

    ylabel('y');

    hold on

    grid on

plot(wz4.time,wz4.signals.values,'k-','LineWidth',2);

 

 %___________________________

 % учет нелинейностей привода

 %___________________________

 

open_system('model_nelin.mdl');%вызов модели

sim('model_nelin');%запуск моделирования

%построение графиков

figure(1);

    title(['С нелинейностями и без по нормальной перегрузке'])

    xlabel('t');

    ylabel('y');

    hold on

    grid on

plot(ny1.time,ny1.signals.values,'k-','LineWidth',2);

plot(ny2.time,ny2.signals.values,'k--','LineWidth',2);

figure(2);

    title(['С нелинейностями и без по угловой скорости тангажа'])

    xlabel('t');

    ylabel('y');

    hold on

    grid on

plot(wz1.time,wz1.signals.values,'k-','LineWidth',2);

plot(wz2.time,wz2.signals.values,'k--','LineWidth',2);

ПРИЛОЖЕНИЕ 2. МОДЕЛЬ СИСТЕМЫ В ПАКЕТЕ SIMULINK

 

Рисунок П.2.1 – Полная нелинейная система  моделирования

Рисунок П.2.2 – Подсистема «Privod»

Рисунок П.2.3 – Система для проверки влияния начальных условий на наблюдатель

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Страшинин Е.Э. Основы теории автоматического управления. Часть 1: Линейные непрерывные системы управления: Учебное пособие. Екатеринбург: УГТУ-УПИ, 2000. 214 с.

2. Ванеева Л.А., Оботнин А.Н., Страшинин Е.Э., Цветков А.В.  Расчет закона управления продольным движением самолета. Методические указания к курсовому проектированию по курсу "Теория автоматического управления". Екатеринбург: УГТУ-УПИ, 2007. 26 с.

3. А.В. Малов, Е.Э. Страшинин. Пакет математического моделирования Matlab v6.0: Краткое справочное руководство к лабораторным работам по дисциплине “Теория автоматического управления”. Екатеринбург: ГОУ ВПО УГТУ-УПИ, 2005. 52 с.

4. Соколов С.С. Рекомендации по оформлению курсовых, выпускных и дипломных проектов (работ). Методические указания. Электронная версия [http://www.ait.ustu.ru/books].

 


Информация о работе Расчёт закона управления продольным движением самолёта