好玩的直流电机调速实验、PID、极点配置、LQR、观测器;不讲大道理

一、直流电机建模

有了状态方程,通过以下matlab脚本,可以转化为传递函数

[b,a]=ss2tf(A,B,C,D)

二、系统性能

开环系统稳定性

如果矩阵A的特征值都小于0,则系统开环稳定,意味着初始值不为0的情况下,随着时间推移,系统能够自己回到平衡位置。

eig(A)

得到A的特征值为-4.8975和-0.1225,系统开环稳定。

如上图所示,初始值为5,不为0,运行仿真以后:

状态量x1和x2都能自己回到平衡点0上。

能控和能观性

对于一个系统,如果控制矩阵[A ,A^2B,A^3B,...A^nB ]的秩为n(状态向量的个数),则系统能控;如果观测矩阵[C ,C^2A,C^3A,...C^nA ]的秩为n,则系统能观。

对于本系统

rank(ctrb(A,B));
rank(obsv(A,C));

运行结果都为2,表示系统能控且能观,我们就可以设计一些控制器来控制它,达到我们的小目标(超调小于5%,上升时间小于0.5s,稳态误差为0)。

三、PID调速

系统框图:

闭环系统的特征方程:

令系统的特征方程为0,就有一大堆连续的即:

三阶系统可以等价于一阶系统乘上一个二阶系统;根据我们的调速小目标,我们能确定二阶系统的阻尼比和固有频率,进而确定二阶系统的两个主导极点,让第三个极点远离主导极点即可;进而便可以通过对照,算出PID参数。

参考自控课本二阶系统超调量公式和曲线: 阻尼比ξ0.707

参考自控课本,已经有了阻尼比了,可以确定固有频率

 可以取固有频率Wn为20.

现在有了阻尼比和固有频率,可以解二阶微分方程求两极点了,这个过程也可以交给matlab

kexi=0.707;
wn=20;
syms s;
eqn= s^2+2*kexi*wn*s+wn^2==0;
sol=solve(eqn,s);
disp(sol)

解得极点s1,s2分别为-14.14±14.14i, 第三个极点,可以让它滚得越远越好,取-14.14*30=-424.2;

有了s1,s2,s3,同样的办法,用matlab,可以让它帮我们求解出Kp,Ki,Kd,

Kp = 3098944/125, Ki = 339360, Kd = 22373/25;

搭个模型仿真下:

响应倒是很快,误差和超调也满足我们的要求,但是看着不光滑有点突兀。

实际工程项目上,往往是一个参数一个参数凭感觉调的.......

四、基于状态反馈的调速

结构框图:

令控制律u=r-Kx,其中𝑘=[𝑘1,𝑘2,𝑘3….],对应x=[x_{1},x_{2},x_{3},....]^T

只要(A-Bk)特征值都小于0,该状态反馈的闭环系统就能收敛,但是往往仅仅只有u=-kx 还不足以使得输出跟随我们的期望输入。因此引入积分环节,一方面可以抑制干扰,另一方面消除静差。

接着又是套娃式的推导:

 得到增广矩阵:

 这样,就把误差和参考值也包含进了系统。现在,我们的目标是:找到合适的kx和ke,使得Acl的特征值,也即系统的极点,小于0.

有两个办法,用极点配置法找K和用LQR方法找K。

基于极点配置法的调速

我们将极点配置在S1,2=-14.14±14.14i, S3放置在-70。

Ae=[A zeros(2,1);-C 0];
Be=[B;0];
Po=[-14.14+14.14i,-14.14-14.14i,-70.2];
K_pole=acker(Ae,Be,Po)

可以得到K_pole的值:(1.0e+04 *0.0019    0.4765   -5.6143);

建个模型仿真下:

基于LQR的调速

LQR是干什么的?LQR是用来找到合适的输入u(t),使得系统稳定,同时使得性能函数J的值最小,其实也是在找K。

Q=[0.01 0 0;
0 0.01 0;
0 0 100000;]
R=0.000001;
K_lqr=lqr(Ae,Be,Q,R)

 解得K_lqr为K_lqr =1.0e+05 *(0.0010    0.2575   -3.1623);

再做个模型仿真下:

 五、观测器

基于状态反馈,在实际控制器中,如果有几个量无法通过传感器测得,那该怎么办?那就得想办法估一下了,下面介绍一种常用的观测器。

框图:

这个式子便是观测器公式,用来搭模型的。

 现在问题变成是来找L了,找到一个合适的L矩阵,使得估算的y_hat与实际实体的y无限接近,实体的输出y是传感器可以测量得到的。观测器是根据系统的输入和传感器采集到的输出,来估算不可采集到的状态量。

找L同样可以有极点配置法和LQR法两种方法,都大差不差,这里就只用了极点配置法,配置估算的两个极点分别为-20和-10。

Po_obsv=[-20,-10];
L_obsv=acker(A',C',Po_obsv)

解出: L_obsv =745.0000   24.9800.

继续搭模型:

 估算的x1与实际plant的x1一致。

六、状态反馈+观测器联合仿真

现在我们的x1和x2就用观测器的输出了,效果仍然很不错。

 

最后:这个实验的关键代码和模型都已经贴出共享,如果需要完整脚本和模型,小的也已整好,可以搜某宝店铺,极简车辆控制   获取,大哥们的支持是不断创作的动力。

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极简车辆控制

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值