状态方程,也称为状态转移方程。在数字电路的时序逻辑分析和设计中,会用到状态方程。而实际模拟电路中几乎不用,用到的是“电路分析”部分。但是自动控制原理,通常是通过模拟电路实现的,而使用状态方程的方法,通常被称为现代控制理论。这里不研究那么高深的自动控制理论,仅仅简单的通过两个例子,来说明一下,如何使用状态方程,加强一下对状态方程的理解。
先来看数字电路,以阎石老师版的《数字电子技术基础》为例。时序电路如下:
求解电路的输出,需要三个方程,驱动方程(输入),状态方程和输出方程。
我们可以先假定J1的初始状态为0,那么就可以依次求解出后续的状态。我们使用电子表格软件计算。其结果如图1所示。
图1 使用电子表格计算状态方程
为了验证我们这种方式的正确性,使用Quartus进行仿真验证一下。在Quartus中新建电路模块如图2所示。
图2 在Quartus中绘制仿真电路
然后编写testbench,其代码如图3所示。
图3 仿真电路的Testbench代码
仿真结果如图4所示。
图4 使用Quartus配合ModelSim的仿真结果
数字电路的状态方程比较好理解,因为数字电路的输出一般只有两种状态。设置了数字电路的各个“状态”的初值,就可以随着时钟“步进”递推计算下一个状态,而输出的结果就由输出方程控制。模拟电路会相对复杂一些。这里以最简单的L、C、R串联电路为例,讲解状态方程在时域的意义。这里以胡寿松老师版的《自动控制原理》为例,如图5所示。这里为了简化,我们不需要后续的矩阵部分,因为矩阵是给计算机看的。
图5 RLC电路的状态方程
状态方程中,状态变量实际是一个导数,我们将这个导数转换成微分。也就是dx/dt的形式转换成dx的形式,那么就需要方程两边乘以dt,这个就是仿真的“步进”时间。有点类似数字电路的时钟。然后输入方程(驱动方程)就是x=x+dx,这个往往是被忽略的。然后看输出方程,同样是与“状态”有关的值。
这样只要设置初始值和“步进”时间,就可以递推出不同时刻的输出结果(数字电路是离散的,以时钟周期为步进;而模拟电路是连续的,以微小的时间段为步进,在这个时间段内,微分满足线性)。如图6所示。这里电阻设置为100欧,电感设置为1mH,电容设置为1uF,输入电压的初始值Vin为0,然后阶跃为1,这样就可以测试一个阶跃响应。步进时间设置为Δt=1us。图中同样省略了输入方程(驱动方程),即x1=x1+Δx1,x2=x2+Δx2。注意,实际的输入Vin设置为直流1V,在0时刻开始阶跃为1V。当然,Vin也可以变化,因为状态变量本来就是支持多输入和多输出的一种计算方法。这里固定Vin是因为计算方便。
图6 依据状态方程递推出的输出结果
接下来使用LTspice来仿真这一电路,仿真结果如图7所示。对比图6和图7的曲线形状,可以看出电子表格的计算结果与仿真软件的结果近似相同。
图7 使用电路仿真软件验证RLC串联电路的阶跃响应
这时可以看出,时间的步进精度,会影响计算结果的精确度,也会影响计算的次数,进而影响到计算时间的长短。状态方程的意义在于,知道当前的状态,就可以递推之后的状态。可以认为是微分方程的一种解法,取中间变量,将微分方程转换为线性方程,进而可以计算机求解。使用状态方程进行自动化控制的方法通常称为现代控制理论,但是实际上这种方法一点也不“现代”,在很早就已经用于微分方程的求解了。但是随着计算机技术的发展进步,这种方法发挥的作用越来越大。状态变量因为更多的依赖于计算机技术,才被称为“现代”控制理论。
本文对应的仿真电路以及计算用的电子表格都放置到了百度网盘:
链接:https://pan.baidu.com/s/1HTxyS3Xe3J6POsGeK2iV2Q
提取码:ZTFC
注:本文只是尝试简单直接的方式来理解状态方程。如有错误,请及时指出,谢谢!
标签:仿真,方程,数字电路,电路,步进,讲解,状态方程 From: https://www.cnblogs.com/integrated-circuit-testing/p/17426359.html