rookie / 技术帖 / 控制系统的六个典型环节

分享

   

控制系统的六个典型环节

2020-02-14  rookie
1、典型环节的微分方程、传递函数
    控制系统的典型环节包括:比例、积分、微分、延迟、惯性、振荡六个环节。
控制系统的六个典型环节

控制系统的六个典型环节

控制系统的六个典型环节

控制系统的六个典型环节

控制系统的六个典型环节

2、Matlab代码
main.m
% 控制系统典型环节
% 包括比例、积分、微分、延迟、惯性、震荡六个环节

%% 1、比例环节
dt = 0.1; %时间步长
t = 0:dt:2*pi;
x = sin(t); %单位正弦输入
x(1:10) = 0; x(11:end) = 1; %单位阶跃输入

k = 2; % 增益系数
y = proportional_system(k, x);
figure(1);
plot(t, x, 'ro-', t, y, 'bo-');
grid on;
xlim([0 6]);
legend('Input X', 'Output Y');
title('Proportional System');

%% 2、积分环节
dt = 0.1; %时间步长
t = 0:dt:2*pi;
x = sin(t); %单位正弦输入
x(1:10) = 0; x(11:end) = 1; %单位阶跃输入

y = integral_system(x, dt);
figure(2);
plot(t, x, 'ro-', t, y, 'bo-');
grid on;
xlim([0 6]);
legend('Input X', 'Output Y');
title('Integral System');

%% 3、微分环节
dt = 0.1; %时间步长
t = 0:dt:2*pi;
x = sin(t); %单位正弦输入
x(1:10) = 0; x(11:end) = 1; %单位阶跃输入

y = derivative_system(x, dt);
figure(3);
plot(t, x, 'ro-', t, y, 'bo-');
grid on;
xlim([0 6]);
legend('Input X', 'Output Y');
title('Derivative System');

%% 4、延迟环节
dt = 0.1; %时间步长
t = 0:dt:2*pi;
x = sin(t); %单位正弦输入
x(1:10) = 0; x(11:end) = 1; %单位阶跃输入

delay_t = 1; %延迟时间
y = delay_system(x, delay_t, dt);
figure(4);
plot(t, x, 'ro-', t, y, 'bo-');
grid on;
xlim([0 6]);
legend('Input X', 'Output Y');
title('Delay System');

%% 5、惯性环节
dt = 0.1; %时间步长
t = 0:dt:2*pi;
x = sin(t); %单位正弦输入
x(1:10) = 0; x(11:end) = 1; %单位阶跃输入

tao = 0.5; %时间常数
y = inertial_system(x, tao, dt);
figure(5);
plot(t, x, 'ro-', t, y, 'bo-');
grid on;
xlim([0 6]);
legend('Input X', 'Output Y');
title('Inertial System');

%% 6、震荡环节
dt = 0.1; %时间步长
t = 0:dt:2*pi;
x = sin(t); %单位正弦输入
x(1:10) = 0; x(11:end) = 1; %单位阶跃输入

tao = 0.5; %时间常数
zeta = 0.2; %阻尼比
y = oscillating_system(x, tao, zeta, dt);
figure(6);
plot(t, x, 'ro-', t, y, 'bo-');
grid on;
xlim([0 6]);
legend('Input X', 'Output Y');
title('Oscillating System');

---
proportional_system.m
function y = proportional_system(x, k)
% 比例环节
% 输入: x 系统输入
% 输入: k 增益系数
% 输出: y 系统输出

y = k * x;

---
integral_system.m
function y = integral_system(x, dt)
% 积分环节
% 输入: x 系统输入
% 输入: dt 时间步长
% 输出: y 系统输出

L = length(x);
y = zeros(1, L);

y(1) = x(1) * dt;
for i = 2:L
    y(i) = y(i-1) + x(i) * dt;
end

---
derivative_system.m
function y = derivative_system(x, dt)
% 微分环节
% 输入: x 系统输入
% 输入: dt 时间步长
% 输出: y 系统输出

L = length(x);
y = zeros(1, L);

y(1) = 0;
for i = 2:L
    y(i) = (x(i) - x(i-1)) / dt;
end

---
delay_system.m
function y = delay_system(x, delay_t, dt)
% 延迟环节
% 输入: x 系统输入
% 输入: delay_t 延迟时间
% 输入: dt 时间步长
% 输出: y 系统输出

L = length(x);
y = zeros(1, L);
delay_t = delay_t / dt;

for i = 1:L
    if i <= delay_t
        y(i) = 0;
    else
        y(i) = x(i - delay_t);
    end
end

---
inertial_system.m
function y = inertial_system(x, tao, dt)
% 惯性环节
% 输入: x 系统输入
% 输入: tao 时间常数
% 输入: dt 时间步长
% 输出: y 系统输出

L = length(x);
y = zeros(1, L);
tao = tao / dt;

for i = 2:L
    y(i) = (tao * y(i-1) + x(i)) / (1 + tao);
end

---
oscillating_system.m
function y = oscillating_system(x, tao, zeta, dt)
% 震荡环节
% 输入: x 系统输入
% 输入: tao 时间常数
% 输入: zeta 阻尼比系数
% 输入: dt 时间步长
% 输出: y 系统输出

L = length(x);
y = zeros(1, L);
tao = tao / dt;

for i = 3:L
    y(i) = (x(i) + (2*tao^2 + 2*zeta*tao)*y(i-1) - tao^2*y(i-2))...
         / (tao^2 + 2*zeta*tao + 1);
end

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多