首页 > 其他分享 >PID:从理论到实践

PID:从理论到实践

时间:2024-12-21 23:28:05浏览次数:5  
标签:tau frac MPC 矩阵 理论 PID 实践 ei

在PID_learning1中,对控制系统的进行了概要,并对经典算法PID进行介绍与公式理解。作为号称可以解决95%的工程问题的PID,浅尝辄止不是显然我们的目标。本文将结合经典控制理论的相关内容,从校正装置的角度对PID进行理解讨论,并使用MATLAB/Simulink工具进行建模实践。最后,在相同的系统中,通过与MPC结果的比对引出接下来要学习的MPC控制算法。

一、从校正装置的角度回看PID

在PID_learning1中,简单推导了PID的公式,为:
C = K p ∗ e i + K i ∗ ∑ n = 0 ∞ e i   + K d ∗ ( Δ e i − Δ e i − 1 ) C = K_p*e_i+K_i*\sum_{n=0}^{\infty} e_i \, +K_d*(\Delta e_i-\Delta e_{i-1}) C=Kp​∗ei​+Ki​∗n=0∑∞​ei​+Kd​∗(Δei​−Δei−1​)
其中:
P = K p ∗ e i , I = K i ∗ ∑ n = 0 ∞ e i , D = K d ∗ ( Δ e i − Δ e i − 1 ) P = K_p*e_i,I = K_i*\sum_{n=0}^{\infty} e_i,D = K_d*(\Delta e_i-\Delta e_{i-1}) P=Kp​∗ei​,I=Ki​∗n=0∑∞​ei​,D=Kd​∗(Δei​−Δei−1​)
则在复频率平面中,PI控制器可写作: G c = K p ( 1 + 1 T 1 s ) G_c = K_p(1+\frac{1}{T1s}) Gc​=Kp​(1+T1s1​),在工程上常常加上一个滤波,变为:
G c = K p ( τ I s + 1 T I s + 1 ) , T I > τ I G_c = K_p(\frac{\tau_Is+1}{T_Is+1}),T_I>\tau_I Gc​=Kp​(TI​s+1τI​s+1​),TI​>τI​
添加的开环极点更靠近虚轴,为典型滞后校正装置。通过减小幅频量使截止频率 ω c \omega_c ωc​提前,而利用高频段时相位滞后幅度较小的特性,保证对截止频率 ω c \omega_c ωc​附近的相频曲线影响不大。简单来说,通过牺牲部分动态性能增大系统的静态性能。
同理,PD控制器可写为:
G c = K p ( T D s + 1 τ D s + 1 ) , T D > τ D G_c = K_p(\frac{T_Ds+1}{\tau_Ds+1}),T_D>\tau_D Gc​=Kp​(τD​s+1TD​s+1​),TD​>τD​
添加的开环零点更靠近虚轴,为典型的超前校正装置,将补偿的幅频和相频曲线叠加到原系统相应的曲线,均直接向上搬移。使得动态性能更好,系统稳定性增加。
而PID控制即为二者串联,取:
G c = K ( τ I s + 1 T I s + 1 ) ( T D s + 1 τ D s + 1 ) , T I > τ I , T D > τ D G_c = K(\frac{\tau_Is+1}{T_Is+1})(\frac{T_Ds+1}{\tau_Ds+1}),T_I>\tau_I,T_D>\tau_D Gc​=K(TI​s+1τI​s+1​)(τD​s+1TD​s+1​),TI​>τI​,TD​>τD​
为滞后超前校正网络。

二、Simulink建模实践

以常见的电机位置控制为例,位置控制系统的开环函数实质是在电压-速度模块后串联一个积分器来获得位置信号,单位负反馈系统控制框图如下图:
在这里插入图片描述

不难得到,其闭环传递函数如下:
θ m ( s ) θ d ( s ) = K τ s 2 + 1 τ s + K τ \frac{\theta_m(s)}{\theta_d(s)} = \frac{\frac{K}{\tau}}{s^2+\frac{1}{\tau}s+\frac{K}{\tau}} θd​(s)θm​(s)​=s2+τ1​s+τK​τK​​
这里随便设置参数数值,令 1 τ = 0.8 \frac{1}{\tau}=0.8 τ1​=0.8, K τ = 1 \frac{K}{\tau}=1 τK​=1。
使用Simulink进行建模,当只设置比例环节时,如下图:
在这里插入图片描述

运行观察示波器误差波形,发现无穷远处误差波形不趋于0,大致趋于1:
在这里插入图片描述

证明仅靠比例环节无法完成控制,始终存在稳态误差。
接下来加上积分环节实现PI控制,即加上滞后校正装置,如下图:

在这里插入图片描述

消除了稳态误差。将两个控制放到一张图中观察:
在这里插入图片描述

虽然PI控制消除了稳态误差,但显然动态性能并不够好:超调量过大,稳定时间也太长。这是由于增加的开环极点更靠近虚轴导致系统不可避免地出现动态性能降低,稳定度下降。因此再加入微分项进行尝试,如下图:

在这里插入图片描述

可以看到效果显著,系统几乎没有发生振荡。动态性能被极大优化。
但观察控制输入,PID控制在初始时有一个巨大的输入,接近3000。显然不利于系统的稳定性。

在这里插入图片描述

且微分项容易被扰动,对高频噪音极其敏感。为模拟扰动,添加一个白噪声环节,接至系统中。

在这里插入图片描述

可以看到,控制输入极其不稳定。此时就需要我们从频域进行分析设置合理的参数。

三、MPC的控制

实际上,现实生活中的系统实例大多都不是一个传递函数可以描述的,可能需要考虑动力学、静力学等模型,PID是一个类似于黑箱的方法,不管具体的模型,只观察输入输出来对其进行参数的调整。从这个角度确实有点像神经网络那一套。
如果想要实现更加精确地控制,势必要对整个系统有更加实际清晰的建模,也就引出了更多的控制方法,如LQR、MPC等。
本文在这里不介绍太多,用MPC的方法对该系统进行控制。
以下为核心代码,注:本例系统建模的部分使用了系统辨识的方法,使用真实电机数据进行状态空间模型的建立。故与本文系统略有差异,主要想体现其控制趋势:

%%

%MPC关键参数

P = 10;%预测步长

M = 5;%控制步长

q = 1;%Q矩阵权重

r = 10;%R矩阵权重

h = 0.5;%H矩阵权重

alpha = 0.2;%期望轨迹的平滑度(范围为0~1),越小,响应越快

target = 1;%目标值

%矩阵初始化

A=zeros(P,M);%动态矩阵

Q=eye(P,P)*q;%Q矩阵

R=eye(M,M)*r;%R矩阵

H=ones(P,1)*h;%H矩阵

S=zeros(P,M);%移位矩阵

DU=zeros(M,1);

for i=1:P-1

S(i,i+1)=1;

end

S(P,P)=1;

W=zeros(P,1);%期望轨迹

Y0=zeros(P,1);%预测输出轨迹

Y_cor=zeros(P,1);%预测输出轨迹修正值

%% 1.模型

%1.1获取阶跃响应模型

[stepresponse,t]=step(sys1,ts:ts:(P)*ts);

%1.2创建动态矩阵A,矩阵大小为P*M

A(:,1)=stepresponse(1:P);

for i=1:P

for j=2:M

if i>=j

A(i,j)=A(i-1,j-1);

end

end

end

%% 2.预测

xs1=ad*xs0;

y(1)=cs*xs0;

u(1) = 0;

for k=2:3*steps

xs1=ad*xs0+bd*u(k-1);

y(k)=cs*xs0+ds*u(k-1);

xs0=xs1;

if k < steps

target = 1;

elseif (k-steps)<steps

target = -1;

else

target = 1;

end

ref(k) = target;

%参考轨迹

for i=1:P

W(i,1) = alpha^i * y(k) + (1 - alpha^i) * target;

end

%误差补偿,修正轨迹

Y_cor = Y0 + H * (y(k) - Y0(1,1));

%移位

Y0 = S * Y_cor;

%计算增量化控制

Y0 = Y0 + A * DU;

plot(Y0);

%求解最优值

DU = (A'*Q*A+R)^-1*A'*Q*(W-Y0);

u(k) = u(k-1) + DU(1,1);

%使用quadprog()的办法

%Z1 = A'*Q*A+R;

%Z2 = A'*Q*(-W);

%[x,fval,exitflag,output,lambda] = quadprog(Z1,Z2);

%u(k)=u(k-1)+x(1,1);

end
代码源:华南小虎队,感谢!

控制曲线如下:
在这里插入图片描述

可以看到,MPC控制中,响应速度弱于PID控制,但曲线平滑上升至目标值,无超调量,输出更加平稳,适用于更多场合。
MPC的学习,可以看我的其他文章,在此不多赘述。
MPC_ln_detail1——无约束线性MPC
MPC_ln_detail2——有约束线性MPC

标签:tau,frac,MPC,矩阵,理论,PID,实践,ei
From: https://blog.csdn.net/FredericAS123/article/details/144637314

相关文章

  • 基于springboot 实践教学管理系统(源码+LW+部署讲解+数据库)
    !!!!!!!!!很多人不知道选题怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:jf1d !!!!!!!!!项目介绍随着教育信息化的不断推......
  • k8s阶段09 Velero备份恢复功能, 云原生的定义, k8s实践项目(Mall-MicroService)
    4基于Velero的备份和恢复Velero介绍Velero是用于备份和恢复Kubernetes集群资源和PV的开源项目,由VMWare-Tanzu维护◼基于VeleroCRD创建备份(Backup)和恢复作业(Restore)◼可以备份或恢复集群中的所有对象,也可以按类型、名称空间或标签过滤对象◼可基于文件系统备份......
  • 5G NR-Beamforming 的一些基本理论
    诞生背景在无线通信中,传统的信号传输通常是全向广播的(全向天线),即信号均匀地在各个方向上发射,导致信号的能量被分散,效率较低。全向天线辐射图而波束赋形技术通过使用多个天线阵列(如MIMO系统),根据信号的需求将信号定向发射,形成具有高度指向性的“波束”。这样可以提高信号强度......
  • 【数据库开发】小红书MySQL数据一致性校验能力探索与实践
    本文主要介绍数据一致性校验如何结合小红书的业务进行实践并落地,以及数据一致性校验在小红书内部拿到的实际收益。一、背景1.1什么是数据一致性校验在数据迁移、数据同步以及多数据中心部署等场景中,数据的一致性要求极为严格。然而冗长的同步计算链路产生的误写或丢失、主从复......
  • 【粉丝福利社】智能优化算法与MATLAB编程实践
    标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度博客之星TOP2,2023年度......
  • Java编程基础与高级应用:从入门到实践
    Java是一门广泛应用于企业级开发的编程语言,以其跨平台性、丰富的生态系统和稳定性著称。本文将从Java的基础知识入手,介绍其核心概念,并通过一个简单的项目演示Java在实际开发中的应用。一、Java语言的特点跨平台性Java程序通过编译生成的字节码可以在任何安装了Java虚......
  • 项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(二)
    文章目录一、登录功能实现1、前端实现1.1创建登录组件1.2安装和配置ElementPlus1.3安装axios和调用后端接口2、后端实现2.1创建数据表和准备数据2.2配置MYSQL配置信息2.3登录功能实现2.3.1创建实体类2.3.2创建登录服务接口及实现2.3.3创......
  • 道阻且长——2024秋软工实践个人总结
    这个作业属于哪个课程https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里https://edu.cnblogs.com/campus/fzu/SE2024/homework/13315这个作业的目标回顾自己的软工实践课程学号102201120道阻且长——2024秋软工实践个人总结一、学期回顾1.1......
  • 29.Python基础篇-网络基础理论
    重要知识点BS与CS架构BS(Browser/Server)架构:基于浏览器和服务器的架构,客户端通过浏览器访问服务器上的应用程序或服务。特点:客户端只需要一个浏览器,无需安装复杂的软件,服务器端处理大部分业务逻辑。应用:Web应用(如Web浏览器访问网站)。CS(Client/Server)架构:客户端和服务......
  • AI大模型Prompt提示词最佳实践:用具体的例子提问
    AI大模型,Prompt提示词,最佳实践,自然语言处理,文本生成,机器学习,深度学习,案例分析1.背景介绍近年来,大规模语言模型(LLM)的快速发展,如GPT-3、LaMDA、BERT等,为自然语言处理(NLP)领域带来了革命性的变革。这些模型展现出惊人的文本生成、翻译、问答和代码生成能力,为我们提......