MATLAB 控制系统设计与仿真 - 29

用极点配置设计伺服系统

方法1-前馈修正

对于一个可控的系统,我们知道可以用极点配置来得到系统的动态响应指标,但是系统有时会存在较大的静态误差。

例如:

系统的状态矩阵如下,试求取其阶跃响应。

MATLAB 代码如下:

Matlab 复制代码
clear all;clc;
A=[0 1;-9 -1];
B=[0 ;1];
C=[1 0];
D=0;
sys0=ss(A,B,C,D);
step(sys0)
grid on

程序运行结果如下:

有上图可知,原系统的动态响应性能很差,并且有较大的静态误差。

首先我们可以用极点配置,改善系统的动态特性。

MATLAB程序代码入下:

Matlab 复制代码
clear all;clc;
A=[0 1;-9 -1];
B=[0 ;1];
C=[1 0];
D=0;
sys0=ss(A,B,C,D);
[y0 t0]= step(sys0,12);
Co = ctrb(A,B);
m=rank(Co);    %% m=2 controllable
p=[-100 -200];
k=place(A,B,p);
sys1=ss(A-B*k,B,C,D);
[y1 t1]= step(sys1,12);
yyaxis left
plot(t0,y0);
yyaxis right
plot(t1,y1);
grid on
legend('原系统','极点配置后的新系统') 

程序运行结果如下:

有上图可知,通过极点配置后,系统的动态特性得到了较好的改善,但是系统然后存在较大的静态误差。

有系统的状态方程可知,系统达到稳态时:

如果我们可以在前馈对输入进行滤波,那么我们可以消除静态误差,其方框图如下所示:

结合上式,我们可求出:

例如,消除上述系统的静态误差。

MATLAB代码如下:

Matlab 复制代码
clear all;clc;
A=[0 1;-9 -1];
B=[0 ;1];
C=[1 0];
D=0;
sys0=ss(A,B,C,D);
p=[-100 -200];
k=place(A,B,p);
sys1=ss(A-B*k,B,C,D);
[y,t]=step(sys1,1);
y1=y*(-inv(C*inv(A-B*k)*B));
yyaxis left
plot(t,y)
grid on
yyaxis right
plot(t,y1)
legend('极点配置后的新系统','极点配置+消除静态误差的新系统') 

程序运行结果如下:

由上图可知,通过极点配置和伺服控制,我们可以获得很好的动态性能和静态性能。

但是,实际过程中,我们很难得到精确的系统状态矩阵,所以接下来会介绍另外一个方法来做伺服控制。

**************************************************************************************************************

最后,欢迎大家有问题给我留言。

非常感谢小伙伴们的-点赞-收藏-加关注。

相关推荐
满分观察网友z4 分钟前
告别烦人的“三连发”:我的智能评论系统过滤之旅(1957. 删除字符使字符串变好)
算法
满分观察网友z7 分钟前
滑动窗口下的极限挑战:我在实时数据流中挖掘最大价值分(1695. 删除子数组的最大得分)
算法
从0至18 分钟前
C++编程入门:从基础到复合类型
开发语言·c++
knight_202419 分钟前
嵌入式学习日志————对射式红外传感器计次
stm32·单片机·嵌入式硬件·学习
山烛25 分钟前
KNN 算法中的各种距离:从原理到应用
人工智能·python·算法·机器学习·knn·k近邻算法·距离公式
深圳安凯星单片机开发方案公司26 分钟前
用单片机怎么控制转速
单片机·51单片机
guozhetao38 分钟前
【ST表、倍增】P7167 [eJOI 2020] Fountain (Day1)
java·c++·python·算法·leetcode·深度优先·图论
Ronin-Lotus40 分钟前
嵌入式硬件篇---驱动板
单片机·嵌入式硬件·esp32·驱动板
吃着火锅x唱着歌40 分钟前
LeetCode 611.有效三角形的个数
算法·leetcode·职场和发展
##echo1 小时前
嵌入式Linux裸机开发笔记9(IMX6ULL)GPIO 中断实验(1)
linux·c语言·笔记·单片机·嵌入式硬件