控制那些事儿(二):控制系统及其表示形式

  现在再来重新看这个问题的时候,也许和刚开始学习控制相关内容的时候是不一样的,会有更多熟悉的名词和常见的现象出现在脑海,比如“振荡现象”,“超调”,“频域分析法”,“带宽”等等,貌似从接触相关内容开始,就默认会有各种各样的传递函数,也会遇到各种各样的微分方程组,但是就是没有很好地去接触或者了解什么是控制系统。

1.什么是控制系统

  随着对控制领域的研究逐渐深刻,我总喜欢说的一句话——“万物皆系统,万物皆可控”。乍一看这句话似乎说得太绝对了,一般太绝对的命题都是否命题。但是我还是喜欢这样说,一方面,我认为世间万物都是系统,小到原子分子细胞,大到星球太空,具体到电动汽车,抽象到社会国家,这些都是一个个系统;另一方面,我认为对于自然界存在的事物,都是我们可以控制,甚至是终将会去探索和控制的事物,所以这其实也是代表了控制科学界的一个永无止境的追求吧。不妨仔细想一想,对于正常驾驶的电动汽车而言,其车速为70km/h,遇到学校区域的时候,此时限速为40km/h,需要及时调整车速,使其减速到40km/h以下缓慢通过该路段;遇到道路转弯的时候,需要通过改变方向,让原本直线行驶的汽车调整方向慢慢驶过弯道;到达目的地的时候,需要将汽车停在某个特定的区域。在整个驾驶过程中,会遇到不同的情况,我们都要根据当时的需求不断地改变汽车的运行状态,以实现特定的目标。所以对于一个系统而言,往往我们可以基于系统的某一些运行机制,给予一定的操作输入,也叫做激励,使其得到一定的状态变化,也叫做响应。那么给出一个比较客观的定义则是,控制系统是一种通过特定的控制装置或算 法,对被控对象的运行状态进行监测、调节和干预,以使其按照预定目标或要求进行工作的系统

2.控制系统的分类

  控制系统的分类方式有很多种,此处我只想按照两个特别常见和重要的方面进行分类。按照控制方式可以分为开环系统、半闭环系统、闭环系统;按照系统特性分类可以分为线性系统和非线性系统、连续系统和离散系统、定常系统和时变系统、确定系统和不确定系统。也许还有很多资料上都会提到更多的分类方式,但是我觉得那些并不重要,也不需要强行背诵这些,因为只有你真正接触到了不同的系统,你自己也会习惯性地把它们分成不同的类别,到时候自己自然而然就能脱口而出那些分类的标准和分类后的类别了。

3.控制系统的表示形式

  相信在学过控制理论或者接触过具体的控制对象之后,大家对不同类型的系统都有一定的认识,比如整个《自动控制原理》上面接触到的好多题目都是连续的、线性的系统,也有开环的和闭环的系统,不然为啥总是会给定一个开环传递函数,然后默认它是一个单位负反馈系统,然后需要求解其闭环传递函数。也许很多人都能很快能够写出对应的传递函数,但是并不理解为啥总要假设它是一个单位负反馈呢?为啥不说正反馈呢?这从数学的角度求解一个题目,有啥意义呢?为什么总是要用传递函数呢?为啥有时候还有各种控制框图、信号流图之类的玩意儿,看着就头大。这是因为在自然界常见的物理系统中,绝大多数都是连续的线性系统,然后都可以用我们初高中所学到的一些物理知识解释其背后的原理,所以就很自然地想到“牛顿第二定律”“万有引力”之类的公式,加上经过大学物理以及各种数学知识的逐步了解,就对一些问题的理解更是了如指掌,不仅能用初高中的知识来判定,还能用微积分来描述整个过程呢。所以,说到这里就不得不提到一个大家很熟悉的名词“数学建模”和“数学物理方法”。大家肯定又会发现,原来平时所说的系统其实都是数学里面的应用题,没错,也就是物理界经常分析来分析去的例子,也是在生活中可以看得见摸得着的东西,这样就不陌生了吧。因此,控制理论也就是把生活中常见的一些系统进行抽象,通过数学物理方法对其建模,使其转化为更容易描述和让人理解和分析的符号或者数学表达式,这样在分析问题的时候不需要总看着实际的物理系统,而是可以在书本上找到对应的关系,通过不同角度的知识来解析这么个系统,最后按照分析的结果又将其还原到实际的物理系统上,这样就可以实现系统的解构(从整到零)和设计(从零到整)了。
  建立系统的数学模型方法有分析法和实验法两种。分析法就是前面所提到的通过运用一些物理定律进行分析,实验法就是人为地给系统世家某种测试激励,记录其输出的响应,然后用某些适当的数学模型去逼近,这种方法也称为系统辨识。而基于这样的方式得到的控制系统数学模型大概也有以下几种形式:①微分方程的形式②拉普拉斯传递函数的形式③结构图和信号流图的形式④状态空间形式。显然,同一个系统都可以用这几种形式来表示,它们之间肯定是有联系的,也可以相互转化。但是要强调一点的是基于传递函数的形式只能用来表示线性时不变系统,而其余的表示形式既可以表示线性系统也可以表示非线性系统。所以不管见到哪一种形式,都不要觉得习惯或者不习惯。对于微分方程形式而言,这是最容易得到的,通过严谨的物理定律,不断地通过高等数学来表示,一步一步地推导,最终一定可以得到很漂亮的微分方程;对于传递函数形式而言,只要明白它背后的数学理论,就很容易可以将微分方程转化为传递函数;至于结构图(信号流图一般还是有点难理解的,用得也不多,除了考试非要考,就不提及了),可以很清晰地将系统模块化,方便理解和展示(辅助汇报);对于状态空间形式而言,这是针对多输入多输出系统(MIMO)或者说是运用现代控制理论分析的重要形式。下面以某一个机械位移系统举例说明三种重要的表示形式,如图1所示,该系统是一个弹簧-阻尼系统,我们通过物理方法对其进行表示。

图1 弹簧-质量-阻尼系统

  1. 微分方程形式
    对系统中的物体进行受力分析,设向上的拉力为F,拉动的位移为x,弹簧的弹性系数为k,物体的质量为m,阻尼系数为c,于是由牛顿第二定律列出运动方程为:
    F=kx+c\dot{x}+m\ddot{x}\tag{1}
    可以将其表示为更一般形式的微分方程为:
    \frac{d^2x}{dt^2}=a\frac{dx}{dt}+bx+rF\tag{2}
    式中,a=-\frac{c}{m},b=-\frac{k}{m},r=\frac{1}{m}

  2. 传递函数形式
    在进行传递函数表示的时候,需要满足零初始条件[1],所以假设系统初始位移为0,初始速度为0,初始加速度也为0,也即x=0,\dot{x}=0,\ddot{x}=0,在此前提条件下对其进行拉普拉斯变换,可以得到:
    s^2X(s)-sx(0)-\dot{x}(0)=a(sX(s)-x(0))+bX(s)+rF(s)\tag{3}
    于是可以得到传递函数为:
    \frac{X(s)}{F(s)}=\frac{r}{s^2-as-b}

  3. 状态空间形式
    将上述运动方程转化为状态空间模型的形式{\dot{x}}=Ax+Bu,y=Cx+Du ,其中是x状态向量,u是输入向量,y是输出向量,ABCD是矩阵。对于弹簧 - 质量 - 阻尼系统,通常选取位移x和速度\dot{x}作为状态变量,即x=(x,\dot{x})^T,则:
    \dot{x}=\begin{pmatrix} 0&1\\b&a \end{pmatrix}x+\begin{pmatrix} 0\\ r \end{pmatrix}u\\ y=\begin{pmatrix} 1&0 \end{pmatrix}x \tag{4}
      以上是整个控制系统中最常用的三种系统表示方式,在整个系统分析以及设计的过程中都会用到相关的形式,也是控制理论的基础。

4.matlab仿真

  利用maltab来实现控制系统三种表示形式的表达,分别用程序来表示同一个弹簧-质量-阻尼系统。

  1. 构建符号形式的系统微分方程
clc;
clear;
% 定义符号变量
syms x(t) t m c k F real;
assume(m>0 & c>=0 & k>0); % 对参数做合理假设

% 定义微分方程
eqn = m * diff(x, t, 2) + c * diff(x, t) + k * x == F; 

% 设定初始条件(这里示例设初始位移和速度都为0,可按需修改)
cond1 = x(0) == 0;
cond2 = subs(diff(x,t), t, 0) == 0;

% 尝试求解微分方程
xSol = dsolve(eqn, [cond1 cond2]); 

% 如果有解析解,将其转换为可绘图的函数形式(假设F为常力的情况简化示例)
if ~isempty(xSol)
    % 假设F为常力,代入具体值(这里设F = 1,可改)
    xSol = subs(xSol, F, 1); 
    % 转换为匿名函数以便绘图(需要指定参数值)
    xFun = matlabFunction(xSol, 'Vars', {t,m,c,k});
    % 定义参数值
    m_val = 1;
    b_val = 0.5;
    k_val = 2;
    % 生成时间序列
    t = linspace(0,10,100);
    % 计算对应的位移值
    x_vals = xFun(t, m_val, b_val, k_val);
    % 绘制位移随时间变化的曲线
    plot(t, x_vals, "LineWidth",1.5);
    xlabel('时间t(s)');
    ylabel('位移x(m)');
    title('弹簧-质量-阻尼系统位移随时间变化');
end
图2 弹簧-质量-阻尼系统位移随时间变化.png
  1. 传递函数形式
clc;
clear;
% 定义弹簧-质量-阻尼系统的参数
m = 1; % 质量,可根据实际情况修改
c = 0.5; % 阻尼系数,可修改
k = 2; % 弹簧刚度,可修改

% 使用tf函数构建传递函数,分子和分母按照传递函数的标准形式分别输入
num = 1; % 分子多项式系数,对于该系统分子为1
den = [m, c, k]; % 分母多项式系数,对应ms^2 + cs + k的系数

% 创建传递函数对象
G = tf(num, den); 

% 显示传递函数(也可以在命令行中进行输入G)
G
  1. 状态空间方程的形式
clc;
clear;
% 定义弹簧-质量-阻尼系统的参数
m = 1; % 质量,可根据实际系统情况修改
c = 0.2; % 阻尼系数,按需调整
k = 3; % 弹簧刚度,按实际设定

% 构建状态空间方程的系数矩阵
A = [0 1; -k/m -c/m]; % 系统矩阵
B = [0; 1/m]; % 输入矩阵
C = [1 0]; % 输出矩阵,这里假设输出为位移x,可按实际需求改变
D = 0; % 直接传递矩阵,通常设为0

% 使用ss函数创建状态空间模型对象
sys = ss(A, B, C, D);

% 显示状态空间模型的相关信息(可选)
disp('状态空间模型的系数矩阵如下:');
disp('A矩阵:');
disp(A);
disp('B矩阵:');
disp(B);
disp('C矩阵:');
disp(C);
disp('D矩阵:');
disp(D);

% 或者直接简洁地显示整个状态空间模型
sys
  1. 传递函数转化为状态空间形式
clc;
clear;
% 定义弹簧-质量-阻尼系统的参数
m = 1; % 质量,可根据实际情况修改
c = 0.5; % 阻尼系数,可修改
k = 2; % 弹簧刚度,可修改

% 使用tf函数构建传递函数,分子和分母按照传递函数的标准形式分别输入
num = 1; % 分子多项式系数,对于该系统分子为1
den = [m, c, k]; % 分母多项式系数,对应ms^2 + bs + k的系数

% 创建传递函数对象
G = tf(num, den); 

% 传递函数转化为状态空间形式
sys = ss(G);

% 显示状态空间模型的系数矩阵等信息
disp('状态空间模型的系数矩阵如下:');
disp('A矩阵:');
disp(sys.A);
disp('B矩阵:');
disp(sys.B);
disp('C矩阵:');
disp(sys.C);
disp('D矩阵:');
disp(sys.D);

% 或者直接简洁地显示整个状态空间模型
sys


  1. 激励信号和响应信号及其各阶导数在t=0时的值均为0。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容