PID算法学习笔记
1年前就有听说 摇摇摆摆终于 可以来 详细的 应用学习下
系统需求: 调压器 恒压恒流功能的使用
最基本的比例调节 U=P*Uk+U0
u 为控制信号输出UK为 当前值 和 期望值的U0的偏差 P 为比例系数
这个很容易理解的
这种控制 只在 存在偏差 UK不等于0的时候 才起作用
也就是说 这种控制一定会存在偏差,,偏差越小调节作用越弱
当然 如果增加K 可以使这个必然存在的偏差值 变小。。不过 增加K 会让整个系统不稳定,,
(比如系统存在一个正偏差,,K很大,。。系统很容易就输出到一个 傅偏差的值,,这样系统很难稳定 或者说K越大 系统波动 的幅度也越大 增加K减小误差 只适用与不存在超调的系统 也就是 输出只会从一个方向逼近 理想值 不过这种系统 似乎不是很多 虽然也存在)
这样这个不稳定的调节方式 是需要改进的。
为了减小这个必然存在的误差 除了增大K 还有什么别的办法呢?
神奇的天才们给出了PID 控制的I部分
你不是始终存在误差嘛? 我让你误差累加 以增加我获得误差 值
比如你的系统 误差随着时间变化 我采样到 0.1 0.08 0.02 -0.02 在T3 也就是采样到0.2的时候 这个误差相对于0.1 时候来说已经很小了。。使用Y=KX+u 的调节 很明显已经效果不咋样了
不过我们 如果 在0.02 时刻 把误差视为 0.1+0.08+0.02=0.2 那么是否 能获得更好的调节效果呢?
于是 有了 积分环节 T/Ti ∑UK 对误差求和
,明眼人一看就知道 你这虽然 让系统必然存在的误差变小了,,甚至无限逼近与0 不过依然解决不了系统震荡,,甚至会让系统震荡的更严重
不要紧,,为了解决这个问题 我们还有个微分环节
(Td/T)[U(K)-U(k-1)]
系统为什么震荡?
不就是UK-U(K-1) 有点大么(如果UK>0 U(K-1)>0 正常情况下UK- U(K-1)0 系统越调 UK 应该越逼近0)
那么我把这个负值 加到你的系统中 让你系统 越 逼近0的时候 输出 越小或者说 抑制输出变化速度 免得你震荡嘛
这个也就是微分的作用咯
最后 记得给这三个部分 分别乘以一个系数 以调整每一部分的作用效果
系数分别定为 P I D
当然还要加上一个系统初值U0
PID调节公式就成了:
S(K)=PU(k)+IT/Ti ∑UK+D (Td/T)[U(K)-U(k-1)])+ U0
不觉得 积分环节 T/Ti ∑UK 从0时刻积分到现在 很累么? 而且系统中 TX时刻出现的偶然情况(不属于系统正常变化部分) 会一直影响着现在的输出。。咋办呢?
用现在的S减去上一时刻的S 我只要 S的变化量加上一时刻的输出 来确定现在的输出 (S =s(T-1)+ds)
于是我们就有了增量 PID算法
二:增量PID算法
DS=S(K)-S(K-1)
整个式子的化简 相信 。。。应该都会吧#01
DS=Pdu(k)+I t/ti(uk)+ D TD/T duk+du(k-1)
于是我们只剩下 三个系统状态是需要的 UK UK-1 UK-2
应为DU(K-1) 是UK-1- UK-2
QQ空间打公式太麻烦 所以比较懒的省了很多括号 还望大家见谅 相信 应该都能看明白
可能大家觉得这么着已经凑合着了吧
不过想想。。又积分 又微分。。是否会让系统响应 不是足够快?
呵呵 伟大的神人们说
我找一个门限值US
当S(K)>US 的时候 我不要微分 让系统 很快的调 尽快的把SK 调下来
当SK US 的时候 我加入积分部分让系统 慢慢调精确的调、
扯淡的理论 就写到这里了 接下来 就玩真格的
PID 在本恒压系统中的应用
也就是C18 程序的具体实现
当然 我思路还很乱。。我去百度百度再来
还要说一句 绝情才能成长 多情的 多愁善感的人都是废物
- 形象解释PID算法+PID算法源代码(12-01)
- 51单片机实现PID算法(温度控制)(11-26)
- 关于单片机PID的算法实现(11-26)
- 51单片机PID算法程序(二)位置式PID控制算法(11-24)
- PID算法调节C51程序(3)(11-23)
- PID算法调节C51程序(2)(11-23)