【PID控制原理及其算法】
前言
本文以自己的学习过程总结而来,将自己的经验写出来以供大家一起学习,如有错误请多指教
一、PID是什么?
PID就是比例、积分、微分,PID算法可以说是在自动控制原理中比较经典的一套算法,在现实生活中应用比较广泛。
二、PID原理
常规的模拟 PID 控制系统原理框图如下图所示:
从上图可以发现,这是一个闭环控制系统,由PID控制器、传感器、被控对象构成。
被控对象的输出就是系统的输出,而系统的输出会被传感器传感,传感器会输出反馈信号给输入;给定输入和反馈输入经过比较之后会产生一个误差(偏差),这个误差就是PID控制器的输入;pid控制器经过运算处理之后会输出控制量(或控制量的增量)给到执行机构(上图中没有画出执行机构),从而改变被控对象的输出。
那么使用PID的目的是什么呢?
我的理解是快速调节系统,最终让系统的输出和给定输入保持一致。
PID的控制环节和参数
既然要使用PID控制器,那么肯定要涉及到三个重要环节及其参数:
环节 | 参数 |
---|---|
比例 | Kp |
积分 | Ti |
微分 | Td |
注:Kp是比例系数,Ti是积分常数,Td是微分常数
下面介绍每个环节的作用
比例环节
比例环节的作用是对偏差瞬间作出反应。偏差一旦产生控制器立即产生控制作用, 使控制量向减少偏差的方向变化。 控制作用的强弱取决于比例系数Kp, 比例系数Kp越大,控制作用越强, 则过渡过程越快, 控制过程的静态偏差也就越小; 但是Kp越大,也越容易产生振荡, 破坏系统的稳定性。 故而, 比例系数Kp选择必须恰当, 才能过渡时间少, 静差小而又稳定的效果。
积分环节
从积分部分的数学表达式可以知道, 只要存在偏差, 则它的控制作用就不断的增加; 只有在偏差e(t)=0时, 它的积分才能是一个常数,控制作用才是一个不会增加的常数。 可见,积分部分可以消除系统的偏差。
积分环节的调节作用虽然会消除静态误差,但也会降低系统的响应速度,增加系统的超调量。积分常数Ti越大,积分的积累作用越弱,这时系统在过渡时不会产生振荡; 但是增大积分常数Ti会减慢静态误差的消除过程,消除偏差所需的时间也较长, 但可以减少超调量,提高系统的稳定性。
当 Ti 较小时, 则积分的作用较强,这时系统过渡时间中有可能产生振荡,不过消除偏差所需的时间较短。所以必须根据实际控制的具体要求来确定Ti 。
微分环节
实际的控制系统除了希望消除静态误差外,还要求加快调节过程。在偏差出现的瞬间,或在偏差变化的瞬间, 不但要对偏差量做出立即响应(比例环节的作用), 而且要根据偏差的变化趋势预先给出适当的纠正。为了实现这一作用,可在 PI 控制器的基础上加入微分环节,形成 PID 控制器。
微分环节的作用使阻止偏差的变化。它是根据偏差的变化趋势(变化速度)进行控制。偏差变化的越快,微分控制器的输出就越大,并能在偏差值变大之前进行修正。微分作用的引入, 将有助于减小超调量, 克服振荡, 使系统趋于稳定, 特别对髙阶系统非常有利, 它加快了系统的跟踪速度。但微分的作用对输入信号的噪声很敏感,对那些噪声较大的系统一般不用微分, 或在微分起作用之前先对输入信号进行滤波。
总结特点
环节 | 特点 |
---|---|
比例 | 偏差一产生,控制器立即做出响应,产生控制作用,使控制量向减少偏差的方向变化 |
积分 | 消除系统的静态误差;但同时会降低系统的响应速度,增加超调量;积分时间越长,积分的积累作用越弱,消除静态误差的时间会变长;但系统过渡时不会产生振荡,可以减少超调量,提高系统的稳定性 |
微分 | 加快调节过程,阻止偏差的变化;有助于减少超调量,克服振荡,使系统趋于稳定 |
三、PID的分类
PID分为数字PID和模拟PID。
模拟PID
模拟PID控制系统的原理框图如下图所示:
r(t)是给定输入,e(t)是偏差,u(t)是控制器的输出,y(t)是被控对象的输出。
模拟PID控制器的控制规律如下:
把上面这个数学表达式剖开,
比例部分:
Kp * e(t)
积分部分:
微分部分:
数字PID
- 位置型PID算法
pid算法的数学表达式如下表达式1:
(表达式1)
将其离散化,以T作为采样周期,上述表达式可变为表达式2:
(表达式2)
把表达式2中的参数整定后得到下面的表达式3:
(表达式3)
上面的表达式中:
k ―― 采样序号, k =0, 1, 2,……;
uk ―― 第 k 次采样时刻的计算机输出值;
e(k) ―― 第 k 次采样时刻输入的偏差值;
e(k-1) ―― 第 k -1 次采样时刻输入的偏差值;
Ki ――积分系数, Ki=Kp *T / Ti ;
Kd ――微分系数, Kd=Kp *Td / T ;
- 增量型PID算法
既然u(k)的表达式确定了,那么把u(k) 减去u(k-1)就可以得到控制量的增量,所以得到的数学表达式如下:
其中,
不同PID算法的特点
算法 | 特点 1 |
---|---|
位置型 | 位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值 |
增量型 | 增量式PID的输出只与当前拍和前两拍的误差有关,因此位置式PID控制的累积误差相对更大 |
算法 | 特点 2 |
---|---|
位置型 | 位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀 |
增量型 | 增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机 |
算法 | 特点 3 |
---|---|
位置型 | 位置式的输出直接对应对象的输出,因此对系统影响较大 |
增量型 | 由于增量式PID输出的是控制量增量,如果计算机出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作 |
四、PID代码实现
位置型PID算法
源码如下:
//位置型PID算法源码
typedef struct
{float Kp; //比例系数Proportionalfloat Ki; //积分系数Integralfloat Kd; //微分系数Derivativefloat Ek; //当前误差float Ek1; //前一次误差 e(k-1)float Ek2; //再前一次误差 e(k-2)float LocSum; //累计积分位置
}PID_LocTypeDef;/************************************************
函数名称 : PID_Loc
功 能 : PID位置(Location)计算
参 数 : SetValue ------ 给定值(期望值)ActualValue --- 实际值(反馈值)PID ----------- PID数据结构
返 回 值 : PIDLoc -------- PID位置
*************************************************/
float PID_Loc(float SetValue, float ActualValue, PID_LocTypeDef *PID)
{float PIDLoc; //位置PID->Ek = SetValue - ActualValue;PID->LocSum += PID->Ek; //累计误差PIDLoc = PID->Kp * PID->Ek + (PID->Ki * PID->LocSum) + PID->Kd * (PID->Ek - PID->Ek1);PID->Ek1 = PID->Ek; return PIDLoc;
}
上面代码中的Kp是指比例系数;
Ki = Kp * T / Ti;
Kd = Kp * Td / T。
增量型PID算法
源码如下:
//增量型pid算法
typedef struct
{float Kp; //比例系数Proportionalfloat Ki; //积分系数Integralfloat Kd; //微分系数Derivativefloat Ek; //当前误差float Ek1; //前一次误差 e(k-1)float Ek2; //再前一次误差 e(k-2)
}PID_IncTypeDef;/************************************************
函数名称 : PID_Inc
功 能 : PID增量(Increment)计算
参 数 : SetValue ------ 设置值(期望值)ActualValue --- 实际值(反馈值)PID ----------- PID数据结构
返 回 值 : PIDInc -------- 本次PID增量(+/-)
*************************************************/
float PID_Inc(float SetValue, float ActualValue, PID_IncTypeDef *PID)
{float PIDInc; //增量PID->Ek = SetValue - ActualValue;PIDInc = (PID->Kp * PID->Ek) - (PID->Ki * PID->Ek1) + (PID->Kd * PID->Ek2); //参数已做整定PID->Ek2 = PID->Ek1;PID->Ek1 = PID->Ek;
return PIDInc;
}
在上面代码中:(参数是经过整定的)
实际上:
Kp = KP + KI + KD;
Ki = KP + 2 * KD;
KD = KD;
而KP就是比例系数
KI = KP * T / Ti; //Ti是指积分时间
KD = KP * Td / Ti //Td是指微分时间
总结
以上就是今天要讲的内容,本文简单介绍了PID的概念、PID的控制原理,以及介绍了PID不同算法的特点及其示例源码
【PID控制原理及其算法】相关推荐
- pid调节软件_非常实用的PID算法和PID控制原理
点击箭头处"工业之家",选择"关注公众号"! PID控制原理和特点 工程实际中,应用最为广泛调节器控制规律为比例.积分.微分控制,简称PID控制,又称PID调节 ...
- 【平衡车】PID控制原理到底如何理解?建议收藏!
文章目录 前言 PID算法 PID算法的形成 P算法,即比例控制算法: I算法,即积分控制算法 D算法,即微分控制算法 PID总体的数学模型: 基于单片机的PID控制算法: 单片机中的PID算法的表达 ...
- 对串级PID控温算法的解析
目录 前言 单级PID 串级PID 系统分析 算法分析 总结 前言 笔者在做项目的过程中,需要对一个目标物体做精确控温,精度要求±1℃,需要在两分钟内使用电阻发热贴将温度由20控制到41 ...
- 红外循迹传感器PID循迹算法
红外循迹传感器PID循迹算法 前一段时间参加了一个小车循迹竞速的比赛,获得了一个还行的成绩,所以在这里想把里面的核心部分PID寻线算法给大家分享一下. 关于做好的实物视频我上传到了B站,大家可以点击查 ...
- 用纯C语言分别实现增量式与位置式的PID自整定算法
对于增量式PID自整定算法,C语言代码如下: #include <stdio.h>#define SAMPLE_TIME 0.1 // 采样时间 #define KP_DEFAULT 0. ...
- PID控制原理基本介绍(图解)
PID控制原理基本介绍(图解) 这里先以一个阶跃响应做图解说明: 如下图所示,目标值设定为单位1,随着我们逐渐增大比例系数Kp,可以看到系统相应速度逐渐加快,但是始终存在稳态误差, 如下图所示,引入积 ...
- 基于stm32与陀螺仪(mpu6050)的PID角度环算法,角度用OLED显示,使得智能车能在长时间跑直线和转直角弯,减小误差
首先,我做智能车用的是stm32f103c8t6作为主控芯片,得到小车自身对于开始位置的三维变换角度所用的是mpu6050模块,其与主控芯片采用I2C通信.此通信原理接下来会加入介绍资料.其次还有一个 ...
- pid控制加热算法,附代码仓库——开源免费
1.该项目层次化结构清晰,代码框架耦合度低,可复用性.可移植性强. 2.功能代码与底层硬件无直接关联,无需更改上层应用逻辑,只需更改接口文件,即可移植到不同的硬件平台: 3.使用lwrb开源组件.pi ...
- 神经网络pid控制原理框图,神经网络pid控制器设计
神经网络自整定PID真的有效吗?我看图书馆的参考书上和知网论文上的方法,感觉推导过程都不对啊? 楼主的这个问题已经是六年前的问题了(今天2021年5月),不知道楼主现在还关注这个话题不?神经网络自整定 ...
最新文章
- 单点效率测试工具:F8秒表
- matlab中print、fprintf、scanf、disp函数简要语法介绍
- Light-Head R-CNN
- centos7.5可以安装mysql_Linux(Centos7.5)安装Mysql
- python按行读取文件效率高吗_Python按行读取文件的实现方法【小文件和大文件读取】...
- Mysql学习总结(78)——MySQL各版本差异整理
- python 为抓取而生
- webpack中的loader
- bootcamp opencore_黑苹果(Hackintosh)BootCamp 使用教程
- 安卓手机投屏到win10电脑无需安装任何软件(电脑和手机必须连接同一网络或者wifi)【投影到此电脑灰色无法操作怎么办?】by qiweb 端午节
- 微信H5支付浏览器支付
- 解读iOS 11新版App Store:如何玩转新版App Store,提升产品下载量?
- 基于tiny4412的u-boot移植(二)
- 【原创】《矩阵的史诗级玩法》连载十六:二元二次方程一般式和圆锥曲线的关系(下)
- 聚会活跃气氛小程序-喝酒神器
- python 一组数据 正态分布散点图_R语言入门之散点图
- mysql 查询名字包括下划线_Python 之 MySql 每日一练 329——查询名字中含有风字的学生信息...
- 错误:找不到符号 类XXX 位置:程序包 com.xxx.xxx
- mac新机配置相关环境
- 视频播放AVPlayer的使用
热门文章
- springboot2.1.4 与security5用户认证学习笔记
- 操作系统面试题:设备管理
- 毕业设计 单片机宠物自动喂食系统 - 物联网 嵌入式 stm32
- linux内核移植与开发板,Linux 2.6.36内核移植飞凌OK6410开发板完整步骤详解
- 计算机系自动化系,范静涛 -清华大学自动化系
- 常用的TTL与CMOS电平转换方案
- r9 5900hx和i7 10870h哪个好
- 影视解析Xyplayer 3.94源码
- pxe指明下一跳服务器ip信息,pxe
- 从零搭建个人博客(2)-博客UI搭建