智能控制之PI调节
来源:互联网 发布:司芬克斯 知乎 编辑:程序博客网 时间:2024/04/29 19:48
先贴出代码,再讲解原理:
/* 定义PI值 */
#define KP 2048L
#define KI 136L
int16 Delta = 0; /* 差值 */
int32 AdjustVal = 0; /* 调节量 */
static int16 DeltaPrev = 0; /* 前一次差值 */
当然,实际调节中,会有一个输入量InputVal和一个目标值TargetVal.
Delta = TargetVal - InputVal;
AdjustVal = (int32)KP * (Delta - DeltaPrev)>>12;
AdjustVal += ((int32)KI * Delta >> 12);
DeltaPrev = Delta;
InputVal += AdjustVal;
P参数越大比例作用越强,动态响应越快,消除误差的能力越强。但实际系统是有惯性的,控制输出变化后,实际PV值变化还需等待一段时间才会缓慢变化。由于实际系统是有惯性的,比例作用不宜太强,比例作用太强会引起系统震荡不稳定。
比例作用的输出与误差的大小成正比,误差越大,输出越大,误差越小,输出越小,误差为零,输出为零。由于没有误差时输出为零,因此比例调节不可能完全消除误差,不可能使被控的PV值达到给定值。必须存在一个稳定的误差,以维持一个稳定的输出,才能使系统的PV值保持稳定。这就是通常所说的比例作用是有差调节,是有静差的,加强比例作用只能减少静差,不能消除静差(静差:即静态误差,也称稳态误差)。为了消除静差必须引入积分作用,积分作用可以消除静差,以使被控的PV值最后与给定值一致。引进积分作用的目的也就是为了消除静差,使PV值达到给定值,并保持一致。
积分作用消除静差的原理是,只要有误差存在,就对误差进行积分,使输出继续增大或减小,一致到误差为零,积分停止,输出不再变化,系统的PV值保持稳定,PV值等于SP值,达到无差调节的效果。
但由于实际系统是有惯性的,输出变化后,PV值不会马上变化,须等待一段时间才缓慢变化,因此积分的快慢必须与实际系统的惯性相匹配,惯性大、积分作用就应该弱,积分时间就应该大些,反之亦然。如果积分作用太强,积分输出变化过快,就会引起积分过头的现象,产生积分超调和震荡。通常参数也是由大往小调,即积分作用由小往大调,观察系统响应以能达到快速消除误差,达到给定值,又不引起震荡为准。
在实际调试中,只能先大致设定一个经验值,然后根据调节效果修改。
对于温度系数:P(%)20--60 I 3--10
对于流量系统:P(%)40--100 I 0.1--1
对于压力系统:P(%)30--70 I 0.4--3
对于液位系统:P(%)20--80 I 1--5
参数整定找最佳,从小到大顺序查
先是比例后积分,最后再把微分加
曲线震荡很频繁,比例度盘要放大
曲线漂浮绕大弯,比例度盘往小扳
曲线偏离回复慢,积分时间往小降
曲线波动周期长,积分时间再加长
曲线震荡频率快,先把微分降下来
动差大来波动慢,微分时间应加长
理想曲线两个波,前高后低4比1
一看二调多分析,调节质量不会低
- 智能控制之PI调节
- FOC之PI控制的理解
- 智能家电之蓝牙控制
- 瞬驰(Dash)D1开发手册--Raspberry Pi之速度控制
- 增量pi和pid调节代码
- 发动机的PI控制
- Android音量控制调节
- Android音量控制调节
- Android音量控制调节
- Android音量控制调节
- Android音量控制调节
- Android音量控制调节
- Android音量控制调节
- 智能照明之日光灯控制代码
- 智能灯之Android控制端
- 机器人位置控制-P/PI+
- iOS伪亮度调节/控制
- iOS 伪亮度调节/控制
- python+django+django环境
- 格式化输出函数(1): Format
- ubuntu自带VI编辑器不好用的解决办法
- STL_map——map::count
- 学习笔记 Java_网络编程_UDP 2014.7.20
- 智能控制之PI调节
- vim中的杀手级插件: vundle
- javascript面向对象
- 程序员理想程序与现实程序
- 什么叫做精通,我来给大家解释一下
- Iterator - 迭代器模式
- STL_map——map::empty
- 智能开关开发进展
- Ubuntu下搭建tftp服务器最简单方法