matlab-PID
matlab-PID
- PID基本概念
- 抗积分饱和算法
- 不完全微分PID
- 微分先行PID
- matlab中的实现
- matlab实现1
- matlab实现2(调用内部函数)
- PID调参经验
- 手动整定
- PID自动整定法
- 模式识别法
- 自校正PID
- 模糊自适应整定PID
- 神经网络PID
- 其他参数优化算法
- PID倒立摆实验
- simulink仿真
PID基本概念
比例,积分,微分控制
参照:链接
当系统输出靠近期望值(设为100)时,系统积分项一直在累积正向误差,导致积分项非常大,系统输出一开始很容易就达到150。
这种现象称为PI过冲。(只有比例积分调节)
解决方法有:抗积分饱和算法
抗积分饱和算法
思想:在计算积分的值U(K)时,判断上一时刻U(K-1)是否超过限定范围:
- 若U(k-1)>Umax,则只累加负偏差;
- 若U(k-1)<Umin,则只累加正偏差。
避免了PID调节难以退出饱和区
不完全微分PID
由于微分项很容易引入高频的干扰,所以通常会给微分项引入低通滤波器,低通滤波器的添加位置有2种,
1是微分调节器的输出端
2是PID相加之后的输出端
如下图:
一阶rc的数字低通滤波器,或者其他高阶的低通滤波器
引入了低通滤波器后,高频的干扰会被过滤掉,减少了微分项导致高频振荡的风险。
微分先行PID
由于输入的期望值一直在跳变的话,这会导致微分调节项引入高频干扰,所以通常在输出端进行微分,而不在输入端进行微分。如下图:
可以避免指令的改变,导致超调过大。
一个经典的PID结构体定义:
typedef struct{float kp;float ki;float kd;float summary;//积分项累计值float expect;//期望值float last_error;//上一次累计误差
}PID_Structure_t;
PID 计算函数:
float pid_result(PID_Structure_t *pid_handler ,float collect){float current_result;float error = pid_handler->expect - collect;//将误差累加到积分项中pid_handler->summary += error;current_result = pid_handler->kp * error +pid_handler->ki * pid_handler->summary +pid_handler->kd * (pid_handler->last_error);//更新上刻的误差pid_handler->last_error = error;return current_result;}
matlab中的实现
matlab实现1
参照大佬博客:点点点
上面链接中还可多图比较
可拷贝到命令窗口中直接运行:
clear all
ts=0.005; %采样时间=0.005s
sys=tf(0.998,[0.021,1]); %建立被控对象传递函数,即式4.1
dsys=c2d(sys,ts,'z'); %离散化
[num,den]=tfdata(dsys,'v'); %
e_1=0; %前一时刻的偏差
Ee=0; %累积偏差
u_1=0.0; %前一时刻的控制量
y_1=0; %前一时刻的输出
%PID参数
kp=0.22;
ki=0.13;
kd=0;
u=zeros(1,1000);%预先分配内存
time=zeros(1,1000);%时刻点(设定1000个)
for k=1:1:1000time(k)=k*ts; %时间参数r(k)=1500; %期望值y(k)=-1*den(2)*y_1+num(2)*u_1+num(1)*u(k);%系统响应输出序列e(k)=r(k)-y(k); %误差信号u(k)=kp*e(k)+ki*Ee+kd*(e(k)-e_1); %系统PID控制器输出序列Ee=Ee+e(k); %误差的累加和u_1=u(k); %前一个的控制器输出值y_1=y(k); %前一个的系统响应输出值e_1=e(k); %前一个误差信号的值
end
%(仅绘制过渡过程的曲线,x坐标限制为[0,1])
p1=plot(time,r,'-.');xlim([0,1]);hold on;%指令信号的曲线(即期望输入)
p2=plot(time,y,'--');xlim([0,1]);%不含积分分离的PID曲线
%plot( x, y); print(gcf, '-djpeg', 'abc.jpg') %绘制图像并保存为jpg格式
hold on
grid on
disp('done')
期望输出是1500,还是感觉很厉害的
输出结果:
matlab实现2(调用内部函数)
参照:链接
code:
clear all
clc num = [1]
denom = [1 3 1] Gp = tf( num, denom )
H = [1]M = feedback( Gp, H )
step(M)
hold on
grid on%%
Kp = 1
Ki = 0
Kd = 0Gc = pid( Kp, Ki, Kd)Mc = feedback( Gc*Gp, H)
step( Mc )
hold on
grid on
PID调参经验
手动整定
也称手动整定。
参照视频:链接
一般先将Pd设为0,进行PI调节。
仅PI调节一般会出现较大的振荡。
口诀:
翻译翻译:
- 先是比例后微分,再积分。
即Kp=3,Ki=0,Kd=0;
Kp=调参结果,Ki=调参,Kd=0;
Kp=调参结果,Ki=调参结果,Kd=调参;
现象 | 处理方法 |
---|---|
振荡频繁 | Kp加大 |
波峰与紧邻谷相距较远 | Kp调小 |
曲线偏离回复慢 | Ki调大 |
曲线波动周期长 | Ki调小 |
导管 | $1 |
业内常用衰减曲线法。
衰减比为4:1的经验公式如下:
就拿经验系数去乘上现在的参数。
衰减比为10:1的公式:
PID自动整定法
常见:
模式识别法(专家系统)。参照专家的一些方法,查询数据手册实现
自校正PID
模糊自适应整定PID
神经网络PID
其他参数优化算法
模式识别法
在暂态过程中,取一些特征的向量。
根据这个方法,去修正PID的值.
自校正PID
实际上是一种极点配置法,就是通过调整PID控制器的结构和参数,让闭环系统的特征多项式接近于预定的式子。
模糊自适应整定PID
针对非线性时不变(LTI)系统就有用,需要一个基础的PID值,通过一些模糊规则实现,
神经网络PID
主要调节参数:学习率,平滑因子等
其他参数优化算法
PID倒立摆实验
参照视频
simulink仿真
系统学习视频
matlab命令流窗口中启动simulink,打不开就结合手动点击一起
simulink
要看下,有没有下面这个库,方便转化为c语言代码,这里是matlab2012a版本
然后把图画一画:
PID的参数对比组数:
PID=[0.22,0.13,0;0.4,0.13,0;0.4,0.25,0;0.8,0.23,0.4;0.8,0.2,1;0.7,0.2,0.9];%初始化PID参数
这里用的参数就是第一组的0.22和0.13,
期望输出就是1500
运行后,双击scope得到波形,nice啊:
matlab-PID相关推荐
- matlab pid buck,基于MATLAB的BUCK电路设计与PID闭环仿真
文章编号:1009-2552( 2015) 10-0155-04 DOI:10. 13274/j. cnki. hdzj. 2015. 10. 042 基于 MATLAB 的 BUCK 电路设计与 P ...
- matlab pid 课设 参考文献,系统控制论文,关于Matlab在计算机控制技术课程“PID控制器参数整定”中的应用相关参考文献资料-免费论文范文...
导读:本论文可用于系统控制论文范文参考下载,系统控制相关论文写作参考研究. 周少武陈敏沈红远 曾照福 (湖南科技大学信息与电气工程学院 湖南湘潭411201) 摘 要:传统PID参数整定的教学方法以定 ...
- matlab pid buck,BUCK电路闭环PID控制系统的MATLAB仿真.doc
BUCK电路闭环PID控制系统的MATLAB仿真.doc 题目BUCK 电路闭环 PID 控制系统的 MATLAB 仿真目录一.课题简介 2二.BUCK 变换器主电路参数设计 .22.1 设计及内容及 ...
- 物联网控制原理与技术--基于Matlab/PID控制仿真的应用(超详细/设计/实验/作业/练习)
目录 课程名:物联网控制原理与技术 内容/作用:设计/实验/作业/练习 学习:PID控制仿真 一.前言 二.环境与设备 三.原理 四.内容 五.结果与分析 课程名:物联网控制原理与技术 内容/作用:设 ...
- 【A_star三维路径规划】基于matlab PID控制器和 A_star算法无人机三维路径规划【含Matlab源码 2244期】
⛄一.A_star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息.启发信息经过文字提炼和公式化后转变为启发函数.启发函数可以表示自起始顶点至目标 ...
- matlab关闭文本,matlab parpool 关闭
matlabpool (starting in Matlab 2013b this is replaced by parpool) ? ? ? open close size ? parfor (fo ...
- 锅炉液位控制系统的c语言程序,基于MATLAB的锅炉液位控制系统的设计和仿真.doc...
专业整理 WORD格式 摘 要 近年来,在工业控制中,随着工业技术的不断改进和发展,锅炉液位的过程控制系统得到了广泛的应用,为了确保锅炉的控制系统的正常运行,控制系统中要求锅炉的液位往往需要维持在某一 ...
- 显示器色标卡_以Excel色标显示温度
显示器色标卡 How hot was it in your neighbourhood last week? It was so hot, here in Mississauga, that I st ...
- matlab的pid控制系统设计,PID控制系统设计以及MATLAB仿真.doc
PID控制系统设计以及MATLAB仿真 PID控制系统设计以及MATLAB仿真 摘 要本文经过对温度这种常用被控参数使用PID系统构思设计,使用MATLAB完成参数的整定和仿真实验.在系统中加入干扰信 ...
- matlab数字量转电气量,基于MATLAB的数字PID直流电机调速系统.doc
电力拖动课程设计 作 者 段发鑫 系 (院) 信息工程学院 专 业 电气工程及其自动化 年 级 2010级 学 号 K031041513 指导教师 耿东山 日 期 2013.5.5 基于MATLAB的 ...
最新文章
- 刚出炉!程序员人才补贴:单项目最高补贴1000万元
- 关于SQLServer和MySQL动态条数限制
- 每日一皮:男人有三宝「胡子、发型和肌肉」...
- cookies共享 sso_cookie共享(单点登录)
- 本案例通过ArrayList集合来显示Collection接口中的共性函数
- 数学-矩阵计算(4)两种布局
- 关于企业应用SAP成本管理模式与方法的一些思考
- 语音识别技术应用领域介绍
- mybatis:mybatis源码下载
- MySQL树结构查询所有叶子节点
- ps html切图教程,#PS教程:你所不知道的Photoshop CC快速切图的方法
- linux下texlive的卸载,linux下安装TexLive
- c语言编程被7整除的4位数,四位数3a8c能被7整除,且是55的倍数,求a..._一建考试_帮考网...
- nyoj 1275-导弹发射 //lis
- SCons教程(7) 文件操作
- 手写数字识别系统学习(1)
- 07.第八章、质量管理
- 定义计划协议凭证类型
- 英辞流——坚若金刚与穿行无碍:物质的三态
- macOS Catalina 10.15.x.iso macOS Mojave 10.14.6 下载地址