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)是否超过限定范围:

  1. 若U(k-1)>Umax,则只累加负偏差;
  2. 若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调节一般会出现较大的振荡。
口诀:

翻译翻译:

  1. 先是比例后微分,再积分。
    即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相关推荐

  1. matlab pid buck,基于MATLAB的BUCK电路设计与PID闭环仿真

    文章编号:1009-2552( 2015) 10-0155-04 DOI:10. 13274/j. cnki. hdzj. 2015. 10. 042 基于 MATLAB 的 BUCK 电路设计与 P ...

  2. matlab pid 课设 参考文献,系统控制论文,关于Matlab在计算机控制技术课程“PID控制器参数整定”中的应用相关参考文献资料-免费论文范文...

    导读:本论文可用于系统控制论文范文参考下载,系统控制相关论文写作参考研究. 周少武陈敏沈红远 曾照福 (湖南科技大学信息与电气工程学院 湖南湘潭411201) 摘 要:传统PID参数整定的教学方法以定 ...

  3. matlab pid buck,BUCK电路闭环PID控制系统的MATLAB仿真.doc

    BUCK电路闭环PID控制系统的MATLAB仿真.doc 题目BUCK 电路闭环 PID 控制系统的 MATLAB 仿真目录一.课题简介 2二.BUCK 变换器主电路参数设计 .22.1 设计及内容及 ...

  4. 物联网控制原理与技术--基于Matlab/PID控制仿真的应用(超详细/设计/实验/作业/练习)

    目录 课程名:物联网控制原理与技术 内容/作用:设计/实验/作业/练习 学习:PID控制仿真 一.前言 二.环境与设备 三.原理 四.内容 五.结果与分析 课程名:物联网控制原理与技术 内容/作用:设 ...

  5. 【A_star三维路径规划】基于matlab PID控制器和 A_star算法无人机三维路径规划【含Matlab源码 2244期】

    ⛄一.A_star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息.启发信息经过文字提炼和公式化后转变为启发函数.启发函数可以表示自起始顶点至目标 ...

  6. matlab关闭文本,matlab parpool 关闭

    matlabpool (starting in Matlab 2013b this is replaced by parpool) ? ? ? open close size ? parfor (fo ...

  7. 锅炉液位控制系统的c语言程序,基于MATLAB的锅炉液位控制系统的设计和仿真.doc...

    专业整理 WORD格式 摘 要 近年来,在工业控制中,随着工业技术的不断改进和发展,锅炉液位的过程控制系统得到了广泛的应用,为了确保锅炉的控制系统的正常运行,控制系统中要求锅炉的液位往往需要维持在某一 ...

  8. 显示器色标卡_以Excel色标显示温度

    显示器色标卡 How hot was it in your neighbourhood last week? It was so hot, here in Mississauga, that I st ...

  9. matlab的pid控制系统设计,PID控制系统设计以及MATLAB仿真.doc

    PID控制系统设计以及MATLAB仿真 PID控制系统设计以及MATLAB仿真 摘 要本文经过对温度这种常用被控参数使用PID系统构思设计,使用MATLAB完成参数的整定和仿真实验.在系统中加入干扰信 ...

  10. matlab数字量转电气量,基于MATLAB的数字PID直流电机调速系统.doc

    电力拖动课程设计 作 者 段发鑫 系 (院) 信息工程学院 专 业 电气工程及其自动化 年 级 2010级 学 号 K031041513 指导教师 耿东山 日 期 2013.5.5 基于MATLAB的 ...

最新文章

  1. 刚出炉!程序员人才补贴:单项目最高补贴1000万元
  2. 关于SQLServer和MySQL动态条数限制
  3. 每日一皮:男人有三宝「胡子、发型和肌肉」...
  4. cookies共享 sso_cookie共享(单点登录)
  5. 本案例通过ArrayList集合来显示Collection接口中的共性函数
  6. 数学-矩阵计算(4)两种布局
  7. 关于企业应用SAP成本管理模式与方法的一些思考
  8. 语音识别技术应用领域介绍
  9. mybatis:mybatis源码下载
  10. MySQL树结构查询所有叶子节点
  11. ps html切图教程,#PS教程:你所不知道的Photoshop CC快速切图的方法
  12. linux下texlive的卸载,linux下安装TexLive
  13. c语言编程被7整除的4位数,四位数3a8c能被7整除,且是55的倍数,求a..._一建考试_帮考网...
  14. nyoj 1275-导弹发射 //lis
  15. SCons教程(7) 文件操作
  16. 手写数字识别系统学习(1)
  17. 07.第八章、质量管理
  18. 定义计划协议凭证类型
  19. 英辞流——坚若金刚与穿行无碍:物质的三态
  20. macOS Catalina 10.15.x.iso macOS Mojave 10.14.6 下载地址

热门文章

  1. 使用百度地图api根据网吧名称获取经纬度信息
  2. 电子邮件及PE工作盘
  3. CPC电商广告在复杂环境下需要考虑的要素
  4. 阿里云学生机服务器开启端口
  5. centos7.3 虚拟环境安装
  6. 服务器 网站流量监控,网站服务器流量监控工具
  7. zabbix Nginx_low_discover监控设置
  8. python 入门学习 模拟投掷骰子
  9. 使用memmove/memcpy库函数拷贝内存时容易产生的异常
  10. php优秀员工推荐,一个优秀员工与一个优秀的老板