MATLAB与自动控制原理

MATLAB在自动控制原理中的应用

传递函数

1、利用matlab构建传递函数
例:G(s)=(s+1)/(s^2+5s+6)

%% 方法一
G_s = tf([1 1],[1 5 6])

%% 方法二
s = tf('s')
G_s1 = (s+1)/(s^2+5*s+6)

在这里插入图片描述
在这里插入图片描述
2、搭建闭环传递函数
例:在这里插入图片描述
第一步:利用MATLAB构建各个部分的传递函数:
engine:

sys_engine = tf([1],[0.02 0.2]);
sys_acturator = tf([0.1],[0.5 2]);
system = sys_engine*sys_acturator;
%%方法二
system = series(sys_engine,sys_acturator);
s = tf('s');
sys_ctrl = 1/s; %积分控制器
%系统的开环传递函数
system_ol = sys_ctrl*system;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二步:搭建闭环传递函数

%系统的闭环传递函数
%方法一:
system_clo = system_ol/(1+system_ol);
%化简:
minreal(system_clo);
%方法二
system_cl_k1 = feedback(system_ol,1); %反馈函数可以换成H(S)

在这里插入图片描述
3、输出响应
阶跃响应:函数step(闭环系统)

step(system_cl_k1);

在这里插入图片描述
伯德图:bode(闭环系统):
打开栅格:grid on

bode(system_cl_k1);
grid on

在这里插入图片描述
乃氏图:nyquist(闭环系统):
在这里插入图片描述
根轨迹图:rlocus(开环系统)

rlocus(system_ol);
%打开栅格
sgrid
%或者
grid on
%打开根轨迹编辑器
rltool(system_ol);

在这里插入图片描述
在这里插入图片描述
4、对比不同控制器的输出响应

sys_ctrl = 5/s;
system_ol_5 = sys_ctrl*system;
system_cl_k5 = feedback(system_ol,1);

当有两种不同的输出响应时
打开MATLAB中APP中的Linear System Analyzer
在这里插入图片描述
导入数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

状态空间方程

在这里插入图片描述
1、MATLAB中的状态空间方程及能控性能观性判断
传递函数中系统是可控可观的,状态空间方程的可控可观需要进行判断

%% 判断系统的能控性质
clc
clear
%线性定常连续系统:dx=Ax+Bu
%状态完全能控的充分必要条件:rank(Uc)=n
% Uc = [B AB .....A(n-1)B]
%例
%输入系统矩阵
A = [1 2 1;0 1 0;1 0 3];
B = [1 0;0 1;0 0];
%求解矩阵Uc
Uc = [B A*B A^2*B];
%求解矩阵Uc的秩
rank(Uc)

%% 判断系统的状态能控性和输出能控性
% rank(Uc)=n
% 判断系统的状态能控性
A = [-4 1;2 -3];
B = [1;2];
Uc = [B A*B];
% 函数ctrb,计算可控性矩阵
uc = ctrb(A,B);
rank(Uc)

% 判断系统的输出能控性
% rank(Uco)=q q为输出个数
C = [1 0];
Uco = [C*B C*A*B];
rank(Uco)

%% 判断系统的能观性
%rank(U0)=n
% 输入系统矩阵
A = [0 1 0 0;3 0 0 2;0 0 0 1;0 -2 0 0];
B = [0;1;0;0];
C = [1 0 0 0];
D = 0;
% 求矩阵U0
U0 = [C;C*A;C*A^2;C*A^3];
% 求矩阵U0的秩
rank(U0)

以能控性为例:
在这里插入图片描述

2、MATLAB构建状态空间方程及输出

A = [0 1;-2 -3];
B = [0;1];
C = [1 0];
D = 0;
sys = ss(A,B,C,D);
%阶跃响应
step(sys);
%伯德图
bode(sys);
%乃氏图
nyquist(sys);

在这里插入图片描述

状态空间方程与传递函数之间的转换

以上面的数据为例
1、状态空间模型转换为传递函数

system = tf(sys)

在这里插入图片描述
2、传递函数转换为状态空间

ss(system)

在这里插入图片描述

MATLAB构建离散系统

配置一个离散系统,采样时间为0.1

sys_ls = tf([0 1],[2 3],'Ts',0.1)

在这里插入图片描述

MATLAB离散系统与连续系统的转换

相关概念见离散化资料
零阶保持器转换

c2d(system,0.01,'zoh')

在这里插入图片描述
一阶保持器转换

 c2d(system,0.01,'foh')

在这里插入图片描述
双线性变换

 c2d(system,0.01,'tustin')

在这里插入图片描述
离散系统转换成连续系统(由于连续转离散有些参数丢失,因此离散转连续时不能完全与连续一样,只能近似)

d2c(ans)

在这里插入图片描述
状态空间方程如何离散化?????

利用MATLAB对控制系统进行仿真

1、以某个系统为例

system = tf([1],[1 3 2])
% lsim输入有三部分:系统,输入向量,输入时间
lsim(system,[1;1;2;2;3;3],[0:0.1:0.5])

在这里插入图片描述
2、直接编写系统函数并用求解器进行系统求解
脚本函数

function dx = mysystem(t,x) %输入第一个向量必须是时间,第二个为状态向量,假设x为二维向量
dx = [0;0];
dx(1) = x(2);
dx(2) = -x(1);

end

命令行窗口调用求解

ode45(@mysystem,[0 10],[1;2]) %括号内变量为函数句柄(调用函数,仿真时间,初始状态),出图
[t,y] = ode45(@mysystem,[0 10],[1;2]) %不绘制图形,直接输出数据(时间和状态变量)

在这里插入图片描述
在这里插入图片描述

  • 10
    点赞
  • 144
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值