- •Аннотация
- •Оглавление
- •Введение
- •Аппроксимация обратной кривой намагничивания электрической машины на основе метода наименьших квадратов
- •Исследование переходных процессов динамической системы
- •Исследование статических режимов динамической системы
- •Исследование линеаризованной математической модели
- •5. Расчет передаточной функции и частотных характеристик динамической системы
- •Приложение
5. Расчет передаточной функции и частотных характеристик динамической системы
1. Вывод матричной ПФ:
Имеем 𝐿{𝑥(𝑡)} = 𝑥(𝑠), 𝐿{𝑢(𝑡)} = 𝑢(𝑠), 𝐿{𝑦(𝑡)} = 𝑦(𝑠);
𝐿{𝑥̇(𝑡)} = 𝐿{𝐴𝑥(𝑡) + 𝐵𝑢(𝑡)} → 𝑠𝑥(𝑠) = 𝐴𝑥(𝑠) + 𝐵𝑢(𝑠)
(𝐼𝑠 − 𝐴)𝑥(𝑠) = 𝐵𝑢(𝑠) → 𝑥(𝑠) = (𝐼𝑠 − 𝐴) −1𝐵𝑢(𝑠);
𝐿{𝑦(𝑡)} = 𝐿{𝐶𝑥(𝑡) + 𝐷𝑢(𝑡)} → 𝑦(𝑠) = 𝐶𝑥(𝑠) + 𝐷𝑢(𝑠)
𝑦(𝑠)
= 𝐶[
𝐵𝑢(𝑠)]
+ 𝐷𝑢(𝑠)
= [𝐶
𝐵
+ 𝐷]𝑢(𝑠)
= 𝑊(𝑠)𝑢(𝑠)
𝑊(𝑠) = 𝐶 𝐵 + D
2. Расчет матричной передаточной функции (ПФ) 𝑊(𝑠):
𝑊(𝑠)
=
=
𝐶
𝐵
+ D
𝑊(𝑠)
=
Расчет обратной матрицы:
=
=
𝑊(𝑠)
=
Частотные характеристики системы представлены на рисунках 74, 75, 76 и 77:
Рисунок 74 – диаграмма Боде для выхода y1 относительно входа u1
Рисунок 75 – диаграмма Боде для выхода y1 относительно входа u2
Рисунок 76 – диаграмма Боде для выхода y2 относительно входа u1
Рисунок 77 – диаграмма Боде для выхода y2 относительно входа u2
Переходные характеристики системы представлены на рисунках 78, 79, 80 и 81:
26:
Рисунок 78 – график переходного процесса для Ф
Рисунок 79 – график переходного процесса для id
Рисунок
80 – график переходного процесса для
Рисунок 81 – график переходного процесса для y
Вывод:
В ходе выполнения данной части курсовой работы была определена матричная ПФ для линеаризованной модели (ПФ для каждого выхода от каждого входа) и переходные процессы от каждого входа к каждому выходу.
ЗАКЛЮЧЕНИЕ
В данной курсовой работе было проведено исследование математической модели генератора постоянного тока независимого возбуждения.
В первую очередь была получена непрерывная функция, аппроксимирующая обратную кривую намагничивания на основе метода наименьших квадратов.
Были построены переходные процессы динамической системы с учетом изменения входного воздействия.
С использованием полученного в первом пункте нормированного полинома пятой степени, были исследованы статические режимы динамической системы при помощи метода Ньютона.
Сравнение переходных процессов в нелинейной и линеаризованной системах подтвердило корректность линеаризации при малых отклонениях.
Частотные характеристики показали, что коэффициенты передачи линеаризованной системы и рассчитанные через передаточную функцию сходятся с точностью до сотых. Система является устойчивой, а переходные процессы носят колебательный характер.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Мирошников А. Н., Румянцев С. Н. Моделирование систем управления технических средств транспорта: учеб. издание. СПб.: Элмор, 1999.
2. Моделирование электромеханических систем средствами MATLAB. Методические указания к курсовому расчету по дисциплине «Моделирование систем управления» / Сост.: О. Ю. Лукомская, А. Л. Стариченков, А. Г. Шпекторов,. СПб.: Изд-во СПбГЭТУ «ЛЭТИ», 2017. 40 с.
Приложение
(1)
clc
clear
Fin = 0.007;
FArray = 4000 * [0; 0.2; 0.4; 0.6; 0.8; 1.0; 1.2; 1.4; 1.6; 1.8]; % массив значений МДС для кривой намагничивания, А*вит
Fn = 4000; % нормировочная МДС
FArray_ = FArray / Fn; % массив значений нормированного маг. потока для кривой намагничивания
FiArray_ = [0; 0.3; 0.52; 0.67; 0.78; 0.86; 0.92; 0.96; 1.01; 1.02]; % массив значений нормированного магнитного потока для кривой намагничивания
FiArray = FiArray_ * Fin; % массив значений магнитного потока для кривой намагничивания, Вб
n = input('n=');
p = ApproximationCalculate(FiArray_, FArray_, n, 'F_(Ф_)', '', '');
% Построение графика с ненормированными значениями
PlotNonNormalizedGrafs(FiArray, FArray, p, Fin, Fn, 'F_(Ф_)', '', '');
function p = ApproximationCalculate(FiArray, FArray, n, TitleStr, XDimensionName, YDimensionName)
p = PolynomCalculate(FiArray, FArray, n);
FiArraymin = FiArray(1);
FiArraymax = FiArray(end);
FiArrayLineSpace = linspace(FiArraymin, FiArraymax);
FArrayApproximated = polyval(p, FiArrayLineSpace);
% Вычисление суммы квадратов невязок
FArrayApproximatedTable = polyval(p, FiArray);
residuals = FArray - FArrayApproximatedTable;
sumSquaredResiduals = sum(residuals.^2);
fprintf('Сумма квадратов невязок: %f\n', sumSquaredResiduals);
PlotGrafs(FiArray, FArray, FiArrayLineSpace, FArrayApproximated, TitleStr, XDimensionName, YDimensionName);
end
function p = PolynomCalculate(FiArray, FArray, n)
G = [];
for i = 1:2:n
Gi = FiArray.^i;
G = [G Gi];
end
C = inv(G' * G) * (G' * FArray);
pLength = n + 1;
p = zeros(1, pLength);
CLength = length(C);
for CIndex = 1:CLength
CIndexInversed = CLength - CIndex + 1;
pIndex = CIndex * 2 - 1;
p(pIndex) = C(CIndexInversed);
end
end
function PlotGrafs(FiArrayTable, FArrayTable, FiArrayApproximated, FArrayApproximated, TitleStr, XDimensionName, YDimensionName)
hold off
plot(FiArrayTable, FArrayTable, 'DisplayName', 'Табличная нормированная');
hold on
plot(FiArrayApproximated, FArrayApproximated, 'DisplayName', 'Аппроксимированная нормированная');
title(TitleStr, 'Interpreter', 'none')
xlabel(XDimensionName)
ylabel(YDimensionName)
grid on
legend('show')
end
function PlotNonNormalizedGrafs(FiArrayTable, FArrayTable, p, Fin, Fn, TitleStr, XDimensionName, YDimensionName)
figure;
hold off
plot(FiArrayTable, FArrayTable, 'DisplayName', 'Табличная ненормированная');
hold on
FiArrayLineSpace = linspace(FiArrayTable(1), FiArrayTable(end));
FArrayApproximated = polyval(p, FiArrayLineSpace / Fin);
plot(FiArrayLineSpace, FArrayApproximated * Fn, 'DisplayName', 'Аппроксимированная ненормированная');
title(TitleStr, 'Interpreter', 'none')
xlabel(XDimensionName)
ylabel(YDimensionName)
grid on
legend('show')
end
(2)
J = 0.12;
wn = 100;
Cm = 200;
potokn = 0.005;
In = 50;
Mvn = 70;
Lya=0.01;
Ucn = 220;
Uvn = 220;
Ce = 205;
ra = 0.3;
w = 4000;
rb = 145;
rv = 145;
Fn = (Ucn*w)/rv;
(3)
clear
clc
% Параметры
rv = 145;
r_ancor = 0.3;
vv = 4000;
L_ancor = 0.01;
Ce = 205;
Cm = 200;
J = 0.35;
Field_n = 0.007;
omega = 628;
i_n = 50;
Mvn = 70;
Uvn = 220;
Ucn = 220;
iv = Uvn / rv;
global a11 a21 a22 a23 a31 a32 pF
a11 = Uvn * vv / (rv * iv * vv);
a21 = Ce * omega * Field_n;
a22 = i_n * r_ancor;
a23 = Ucn;
a31 = Mvn;
a32 = Cm * Field_n * i_n;
pF = [1.1348 0 -1.2877 0 1.7620 0];
length = length(1.2:-0.2:0.2);
u_1 = [1.2:-0.2:0.2; ones(1, length); ones(1, length)];
x0 = [1, 1, 1]';
for i = 1:length
Fun(i, :) = newton('Fun_F', 'Fun_G', x0, u_1(:, i), 0.00001);
x0 = Fun(i, :)';
end
figure
subplot(2, 2, 1)
plot(u_1(1, :), Fun(:, 1))
grid minor
xlabel('u_в')
ylabel('Ф')
ylim([0.9 * min(Fun(:, 1)) 1.1 * max(Fun(:, 1))])
subplot(2, 2, 2)
plot(u_1(1, :), Fun(:, 2))
grid minor
xlabel('u_в')
ylabel('i')
ylim([0.9 * min(Fun(:, 2)) 1.1 * max(Fun(:, 2))])
subplot(2, 2, 3)
plot(u_1(1, :), Fun(:, 3))
grid minor
xlabel('u_в')
ylabel('\omega')
ylim([0.9 * min(Fun(:, 3)) 1.1 * max(Fun(:, 3))])
subplot(2, 2, 4)
plot(u_1(1, :), Fun(:, 1), u_1(1, :), Fun(:, 2), u_1(1, :), Fun(:, 3))
grid minor
xlabel('u')
ylabel('x')
legend('Ф', 'i', '\omega', 'location', 'best')
ylim([0 20])
% Повторение для других случаев
u_1 = [ones(1, length); 1.2:-0.2:0.2; ones(1, length)];
x0 = [1, 1, 1]';
for i = 1:length
Fun(i, :) = newton('Fun_F', 'Fun_G', x0, u_1(:, i), 0.0001);
x0 = Fun(i, :)';
end
figure
subplot(2, 2, 1)
plot(u_1(2, :), Fun(:, 1))
grid minor
xlabel('M_в')
ylabel('Ф')
ylim([0.9 * min(Fun(:, 1)) 1.1 * max(Fun(:, 1))])
subplot(2, 2, 2)
plot(u_1(2, :), Fun(:, 2))
grid minor
xlabel('M_в')
ylabel('i')
ylim([0.9 * min(Fun(:, 2)) 1.1 * max(Fun(:, 2))])
subplot(2, 2, 3)
plot(u_1(2, :), Fun(:, 3))
grid minor
xlabel('M_в')
ylabel('\omega')
ylim([0.9 * min(Fun(:, 3)) 1.1 * max(Fun(:, 3))])
subplot(2, 2, 4)
plot(u_1(2, :), Fun(:, 1), u_1(2, :), Fun(:, 2), u_1(2, :), Fun(:, 3))
grid minor
xlabel('u')
ylabel('x')
legend('Ф', 'i', '\omega', 'location', 'best')
u_1 = [ones(1, length); ones(1, length); 1.2:-0.2:0.2];
x0 = [1, 1, 1]';
for i = 1:length
Fun(i, :) = newton('Fun_F', 'Fun_G', x0, u_1(:, i), 0.0001);
x0 = Fun(i, :)';
end
figure
subplot(2, 2, 1)
plot(u_1(3, :), Fun(:, 1))
grid minor
xlabel('Uc')
ylabel('Ф')
ylim([0.9 * min(Fun(:, 1)) 1.1 * max(Fun(:, 1))])
subplot(2, 2, 2)
plot(u_1(3, :), Fun(:, 2))
grid minor
xlabel('Uc')
ylabel('i')
ylim([0.9 * min(Fun(:, 2)) 1.1 * max(Fun(:, 2))])
subplot(2, 2, 3)
plot(u_1(3, :), Fun(:, 3))
grid minor
xlabel('Uc')
ylabel('\omega')
ylim([0.9 * min(Fun(:, 3)) 1.1 * max(Fun(:, 3))])
subplot(2, 2, 4)
plot(u_1(3, :), Fun(:, 1), u_1(3, :), Fun(:, 2), u_1(3, :), Fun(:, 3))
grid minor
xlabel('u')
ylabel('x')
legend('Ф', 'i', '\omega', 'location', 'best')
function [x] = newton(F, G, x0, u, e)
y = feval(F, x0, u);
x = x0;
while (norm(y) > e)
gr = feval(G, x, u);
x = x - inv(gr) * y;
y = feval(F, x, u);
end
end
function G = Fun_G(x, u)
global a11 a21 a22 a23 a31 a32 pF
G1 = [-polyval(polyder(pF), x(1)) 0 0];
G2 = [a21 * x(3) -a22 a21 * x(1)];
G3 = [-a32 * x(2) -a32 * x(1) 0];
G = [G1; G2; G3];
end
function f = Fun_F(x, u)
global a11 a21 a22 a23 a31 a32 pF
f1 = a11 * u(1) - polyval(pF, x(1));
f2 = a21 * x(1) * x(3) - a22 * x(2) - a23 * u(3);
f3 = a31 * u(2) - a32 * x(1) * x(2);
f = [f1; f2; f3];
end
(4)
clc; clear all; close all;
%var2 исходные данные global r_v r_ya J c_e c_m omega_nom M_bnom U_cnom U_bnom i_gnom... w Potok_nom p p_der L_ya F_nom
rv = 145; %сопротивление возбуждения
r_ya = 0.3; %сопростивление якоря
L_ya = 0.01;
J = 0.35; %момент инерции
c_e = 205;
c_m = 200;
omega_nom = 100; %номинальная частота вращения
M_bnom = 470;
U_cnom = 220;
U_bnom = 220;
i_gnom = 50; %ток
w = 4000; %число витков
Potok_nom = 0.007; %номинальный поток
F_nom = U_bnom*w/r_v;
p = [0.2047 0 0.8352 0] %коэффициенты полинома
p_der = polyder(p);
U_c = 1;
U_b = 1;
M_b = 1;
x0 = [0.972; 6.9; 2.31]; %НУ
u0 = [U_b; M_b; U_c]; %Вход
t = 6 : 0.001 : 8;
u01 = [0*ones(size(t));0*ones(size(t)); 0*ones(size(t))];
x01 = [0;0;0];
[A, B, C, D] = fun_matrix(x0,u0);
[y,x] = lmsim(A, B, C, D, t, x01, u01);
x1 = x0(1,1) + x(1,:);
x2 = x0(2,1) + x(2,:);
x3 = x0(3,1) + x(3,:);
U_c = 1;
U_b = 1;
M_b = 1;
tf = 8; h = 0.001;
T = 0:h:tf;
x0_nel = [0;0;0];
x_nel = zeros(3, length(T));
u = [U_b; M_b;U_c];
rp_eq = @(x_nel,u) [(1/(w*Potok_nom))*(u(1)*U_bnom - polyval(p,x_nel(1))*F_nom*r_v/w);
(c_e*omega_nom*Potok_nom*x_nel(1)*x_nel(3)-i_gnom*r_ya*x_nel(2)- U_cnom*u(3))/(L_ya*i_gnom); (M_bnom*u(2)-c_m*Potok_nom*i_gnom*x_nel(1)*x_nel(2))/(J*omega_nom)];
x_nel(:,1) = x0_nel;
for i = 2 : length (T)
if T(i) >= 2 && (T(i) < 4)
u(3) = 1;
elseif T(i) >=4 && (T(i) < 6)
u(3) = 1;
elseif T(i) >= 6
u(3) = 1;
end
x_nel(:,i) = x_nel(:,i-1)+ h*rp_eq(x_nel(:,i-1),u);
end
figure(1)
plot(T, x_nel)
grid on
legend('Поток','i_g' ,'Угловая скорость');
xlabel("t, с")
ylabel("Ф, i_g, w")
figure(2);
plot(t,x);
grid on;
legend('Поток','Ток', 'Угловая скорость');
xlabel("t, с")
ylabel("Ф, i_г, w")
figure(3)
subplot(3,1,1)
plot(t,x1);
grid on;
xlabel("t, с");
ylabel("Ф");
hold on;
plot(T,x_nel(1,:),'--');
grid on;
legend('Линеаризованная','Нелинейная')
xlim([6 8])
subplot(3,1,2)
plot(t,x2);
grid on;
xlabel("t, с");
xlim([6 8])
ylabel("i_г");
hold on;
plot(T,x_nel(2,:),'--');
legend('Линеаризованная','Нелинейная')
grid on;
subplot(3,1,3)
plot(t,x3);
grid on;
xlabel("t, с");
xlim([6 8]);
ylabel("w");
hold on;
plot(T,x_nel(3,:),'--');
legend('Линеаризованная','Нелинейная')
grid on;
% roots = roots(poly(A));
% figure(4);
% plot(real(roots), imag(roots), "*");
% grid on;
(5)
% Задание матриц системы из примера
A = [-11.102, 0, 0;
662.7544, -30, 278.9;
-13.8, 1.944, 0];
B = [7.85, 0;
0, -440;
0, 13.43];
C = [0, 1, 0;
1, 0, 1];
D = [0, 0;
0, 0];
% Создание передаточной матрицы
W = tf(ss(A,B,C,D));
% Анализ полюсов и нулей
lmd = pole(W(1,1)); % Полюса системы
rts11 = roots(W.numerator{1,1}); % Нули W11
rts22 = roots(W.numerator{2,2}); % Нули W22
% Построение диаграмм Боде
figure(1);
subplot(2,2,1); bode(W(1,1)); grid on; title('Bode y_1/u_1');
subplot(2,2,2); bode(W(1,2)); grid on; title('Bode y_1/u_2');
subplot(2,2,3); bode(W(2,1)); grid on; title('Bode y_2/u_1');
subplot(2,2,4); bode(W(2,2)); grid on; title('Bode y_2/u_2');
% Построение переходных характеристик
figure(2);
subplot(2,2,1); step(W(1,1)); grid on; title('Step W11');
subplot(2,2,2); step(W(1,2)); grid on; title('Step W12');
subplot(2,2,3); step(W(2,1)); grid on; title('Step W21');
subplot(2,2,4); step(W(2,2)); grid on; title('Step W22');
