PID算法及其优化
PID算法及其优化
1. 经典PID公式

位置式PID公式

增量式PID公式
PID适用范围: 线性时不变低阶(二阶及以下)控制系统,当然可以通过一些优化来一定程度上解决非线性和将高阶系统简化至二阶以下
1.1 离散位置式PID公式
u(k) = P * error_now + I * error_sum + D *(error_now- error_last)
- error_now 当前误差
- error_sum 误差累积
- error_now- error_last 上次误差与当前误差的差值
- 常用于位置环,例如平衡车的角度环
三个参数的简单理解
- P 比例项,只有当前误差有关,相位为0,对输出只有增益作用
- I 积分项,误差累积,误差随着时间的积累,具有滞后性,可以减少稳态误差
- D 微分项,误差变化率,反映了系统未来,具有超前性,及其容易受到高频噪声影响
三个环节的作用
- P 比例环节:起主要控制作用,使反馈量向目标值靠拢,但可能导致振荡
- I 积分环节:消除稳态误差,但可能会增加超调量
- D 微分环节:产生阻尼效果,抑制振荡和超调,但会降低响应速度
1.2 离散增量式PID公式
∆u(k) = u(k) - u(k-1) = P * [e(k) - e(k-1)] + I * e(k) + D * [e(k) - 2e(k-1) + e(k-2)]
u(k) = u(k - 1) + ∆u(k)
- P 比例项,当前误差差值
- I 积分项,当前误差
- D 微分项,当前误差差值 - 上一次误差差值
- ∆u(k)为本次的增量
- u(k)为总的输出量, 其实也是位置式的PID
- 常用于速度环,例如步进电机速度环控制
1.3 增量式和位置式的区别
- 位置式PID: 直接输出 绝对控制量
- 位置式 PID 适合:需要绝对位置输出、高频响应或复杂动态系统。(角度环)
- 增量式PID: 输出 控制量的增量
- 增量式 PID 适合:执行机构支持增量控制、需避免积分饱和(积分限幅)、资源受限的系统。(例如步进电机)
2. PID的优化或变式
2.1 串级PID
串级PID的参数整定一般遵循从内到外,先整定内环PID的参数,再整定外环PID的参数

2.2 并级PID

2.3PID变式
为了增强PID的控制效果衍生很多的PID,常见的有如下:
1. 对于积分项的优化
积分分离 或 积分限幅:当系统启动或结束时这种目标值短时间大幅变化时(例如小车启动),系统会有很大的偏差(error),会导致积分项过度积累,造成较大的超调和长时间波动。
所以针对这种目标值短时间大幅变化的场景,我们可以使用积分分离或者积分限幅对PID进行优化
积分分离,当error过大时,积分项(I)设置为0,其他情况才使用积分项进行运算积分限幅,对积分项(I)的值做一个上限(防止过冲)或下限(消除积分死区)
消除积分死区:当设置的目标输出(如:pwm输出)离散区间过小时,PID计算时error可能会出现小于0(死区)的情况,导致积分项失效
两种解决方法:- 增大离散区间,提高运算精度
- 积分限幅(下限)
变速PID: 动态改变积分项,偏差越大,积分越慢,反之则越快。
2. 对于微分项的改进
不完全微分: 一般作为error反馈的传感器会出现高频噪声,而我们的离散微分项 (error(k) - error(k-1)) 就很容易受到高频噪声的干扰,所以我们需要使用滤波算法(一阶低通滤波器)来对微分项进行滤波,消除高频干扰
不完全微分: 消除高频干扰,不完全微分项公式 [D * ((1-a) * error(k) - a * error(k-1))],通过修改a来修改截止频率,由公式易得,a越大,截止频率越小,低通滤波效果越好微分先行PID: 只对被控量微分,不对误差(error)微分,适合于给定值频繁变化的场合,避免给定值变化时可能引起的振荡
3. 带死区PID
- 带死区PID: 当负载过大时,整个控制系统可能会变为非线性系统,原先小的输出没有响应(出现死区),误差到达需要调节的阈值才开始pid计算
- kx(线性系统) 和 kx+1(非线性系统)类似这种情况造成的死区
- 举个例子,当小车的总重量过大(负载过大),导致占空比小的pwm对电机没有输出响应,此时我们我们可以在pid输出的结果加上死区电压(pwm)或者,当error小于阈值时输出固定能够驱动电机的pwm,当error大于阈值时,正常使用PID计算输出
2.4滤波
引入反馈时,由于传感器的输出往往带有高频噪声或者温漂导致输出失真,需要对输出值进行滤波
常用的滤波算法有
一阶低通滤波(常用于微分项),即不完全微分
卡尔曼滤波(常用于IMU)
均值滤波
等等
3. 参考链接 or up
手撕PID(带死区、积分分离、不完全微分)_pid死区程序-CSDN博客
史上最详细的PID教程——理解PID原理及优化算法_串级pid为什么可以减小稳定时间-CSDN博客
匿名飞控TI版_PID部分,串级PID,微分先行,前馈控制_pid前馈控制量的确定-CSDN博客
干货 | 到底什么是串级PID?-电子头条-EEWORLD电子工程世界
【串级PID】浅谈串级PID作用及意义——快速理解串级PID结构优势(附图)-CSDN博客
- 控制算法up:Dr_can 等角螺线 华南小虎队
PID算法及其优化的更多相关文章
- 自整定模糊PID算法的理论
模糊控制系统的构成与与常规的反馈控制系统的主要区别在于控制器主要是由模糊化,模糊推理机和精确化三个功能模块和知识库(包括数据库和规则库)构成的.具体实现过程如下所示: (1)预处理: 输入数据往往是通 ...
- 广告成本控制-PID算法
今天我们来聊聊广告成本控制中常用的PID算法. 0.PID算法简介 首先我们可以看下维基百科中给PID算法的定义:由比例单元(Proportional).积分单元(Integral)和微分单元(Der ...
- 线性控制原理——PID算法应用
使用控制系统(PID)控制被控对象 PID控制的三要素:控制器,被控对象,反馈器.控制器就是一个数学模型,就PID来说,等同于PID算法.是对反馈量的一个处理与输出.通俗的说就是对于每个被控的量,我的 ...
- PID算法学习记录
最近做项目需要用到PID算法,这个本来是我的专业(控制理论与控制工程),可是我好像是把这个东西全部还给老师了. 没办法,只好抽时间来学习了. 先占个座,后续将持续更新!
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
- 位置式PID与增量式PID算法
位置式PID与增量式PID算法 PID控制是一个二阶线性控制器 定义:通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能. 优点 ...
- Bellman-Ford 算法及其优化
Bellman-Ford 算法及其优化 转自:http://hi.baidu.com/jzlikewei/blog/item/94db7950f96f995a1038c2cd.html Bellman ...
- 算法的优化(C语言描述)
算法的优化 算法的优化分为全局优化和局部优化两个层次.全局优化也称为结构优化,主要是从基本控制结构优化.算法.数据结构的选择上考虑:局部优化即为代码优化,包括使用尽量小的数据类型.优化表达式.优化赋值 ...
- PID算法笔记2
总所周知,PID算法是个很经典的东西.而做自平衡小车,飞行器PID是一个必须翻过的坎.因此本节我们来好好讲解一下PID,根据我在学习中的体会,力求通俗易懂.并举出PID的形象例子来帮助理解PID.一. ...
- PID算法
所谓PID就是比例-积分-微分的英文缩写,但并不是必须同时具备这三种算法,也可以是 PD, PI,甚至只有 P算法控制,下面分别介绍每个参数的含义:首先需要明确一个事实就是,要实现PID算法,必须在硬 ...
随机推荐
- 服务器时间漂移,如何开启Linux NTP自动同步
前言 在日常服务器运维中,我们往往默认服务器的时间是精准的.但最近一次偶然的 date 查询,让我发现--服务器时间竟然悄悄地漂移了-- 本文记录了整个排查与解决的过程,希望能帮到遇到类似问题的朋友, ...
- 聊聊@Autowired与@Resource的区别
1. 前言 从事过很多家公司,见过很多项目,发现@Autowired和@Resource的使用都是一样的乱, 一个项目中有使用@Autowired的,有使用@Resource的, 甚至有的类中一会儿使 ...
- .NET AI Preview 2 发布:支持 Aspire 与 Qdrant 向量库集成,加速云原生 AI 开发
引言 随着人工智能(AI)技术的迅猛发展,开发者对简单.高效的AI开发工具需求日益增加.微软 .NET 团队最近发布了 .NET AI 模板的 Preview 2 版本,这一更新为开发者带来了诸多令人 ...
- 遇到的问题之“web container destroy and kill the job.-Web容器销毁和终止作业”
一.问题 JobThread toStop, stopReason:web container destroy and kill the job. 2023-11-22 18:10:10 [com.x ...
- 将数据导出 Excel 并异步发送到指定邮箱:一次性能优化实战
使用 Spring Boot 实现 Excel 导出 + 邮件异步发送功能,解决接口阻塞问题 一.背景介绍最近我在开发一个跑团管理系统的数据导出功能,需求是将用户查询的成员信息.跑量统计等数据导出为 ...
- vue3 基础-插件 plugin
前几篇我们介绍了 mixin 混入的的方式能实现对代码的复用, 而本篇将要介绍的 plugin 将会更加适合这种通用性功能的代码的复用和扩展. 最常用的场景, 比如轮播图就非常实用 plugin 来实 ...
- Join 实现 2 表数据联动
最近在做一个简单的报表, 用的工具是帆软报表, 一开始觉得有点low, 现在看看还行, 除了界面真的太丑外, 其它还要, 这种大量要使用 sql 的方式, 我觉得是非常灵活高效的, I like . ...
- 深入浅出:AST 技术的应用与实践
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 网络编程:UDP网路编程
参考:盛延敏:网络编程实战 一.UDP和TCP的不同 UDP 是一种"数据报"协议,而 TCP 是一种面向连接的"数据流"协议. TCP 是一个面向连接的协议, ...
- 使用qt+网上的api做股票查看器
股票球,采用的是qt和新浪的api来设计,目前只有查看功能,2021年1月17日开始开发,后续可能会持续更新(可能跟心情有关) k线图在 Windows下获取数据有问题,还没来得及做,目前在Linux ...