123wys 发表于 2015-11-5 17:31:02

PID调节有关介绍

当今的闭环自动控制技术都是基于反馈的概念以减少不确定性。反馈理论的要素包括三个部分:测量、比较和执行。测量关心的是被控变量的实际值,与期望值相比较,用这个偏差来纠正系统的响应,执行调节控制。在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器(比例-积分-微分控制器)是一个在工业控制应用中常见的反馈回路部件,由比例单元P、积分单元I和微分单元D组成。PID调节方法PID是工业生产中最常用的一种控制方式,PID调节仪表也是工业控制中最常用的仪表之一,PID 适用于需要进行高精度测量控制的系统,可根据被控对象自动演算出最佳PID控制参数。PID参数自整定控制仪可选择外给定(或阀位)控制功能。可取代伺服放大器直接驱动执行机构(如阀门等)。PID外给定(或阀位)控制仪可自动跟随外部给定值(或阀位反馈值)进行控制输出(模拟量控制输出或继电器正转、反转控制输出)。可实现自动/手动无扰动切换。手动切换至自动时,采用逼近法计算,以实现手动/自动的平稳切换。PID外给定(或阀位)控制仪可同时显示测量信号及阀位反馈信号。PID光柱显示控制仪集数字仪表与模拟仪表于一体,可对测量值及控制目标值进行数字量显示(双LED数码显示),并同时对测量值及控制目标值进行相对模拟量显示( 双光柱显示),显示方式为双LED数码显示+双光柱模拟量显示,使测量值的显示更为清晰直观。PID参数自整定控制仪可随意改变仪表的输入信号类型。采用最新无跳线技术,只需设定仪表内部参数,即可将仪表从一种输入信号改为另一种输入信号。PID参数自整定控制仪可选择带有一路模拟量控制输出(或开关量控制输出、继电器和可控硅正转、反转控制)及一路模拟量变送输出,可适用于各种测量控制场合。PID参数自整定控制仪支持多机通讯,具有多种标准串行双向通讯功能,可选择多种通讯方式,如RS-232、RS-485、RS-422等,通讯波特率300~9600bps 仪表内部参数自由设定。可与各种带串行输入输出的设备(如电脑、可编程控制器、PLC 等)进行通讯,构成管理系统。1.PID常用口诀:参数整定找最佳,从小到大顺序查先是比例后积分,最后再把微分加曲线振荡很频繁,比例度盘要放大曲线漂浮绕大弯,比例度盘往小扳曲线偏离回复慢,积分时间往下降曲线波动周期长,积分时间再加长曲线振荡频率快,先把微分降下来动差大来波动慢。微分时间应加长理想曲线两个波,前高后低4比1一看二调多分析,调节质量不会低2.PID控制器参数的工程整定,各种调节系统中P.I.D参数经验数据以下可参照:温度T: P=20~60%,T=180~600s,D=3-180s压力P: P=30~70%,T=24~180s,液位L: P=20~80%,T=60~300s,流量F: P=40~100%,T=6~60s。

沈伦 发表于 2015-11-5 17:31:02

请教一个问题:

做的是一个由51单片机控制的直流电动机调速系统,我使用的是增量式PID算法,输入为偏差速度,请问输出的是速度么??如果是,请问要怎么才能转化为PWM波。我没有AD/DA模块可以去测量电压那些东西,我是使用光电编码盘测速的。请问我要怎么才能够控制到电动机的速度??如果可以的话,请详细解释一下。下面给出我使用的PID算法。
#include <reg52.h>
#include <intrins.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long int uint32;
//??函数声明
void PIDOutput ();
void PIDOperation ();
//================================================================
typedef struct PIDValue
{
uint32 Ek_Uint32; //差值保存,给定和反馈的差值
uint8 EkFlag_Uint8; //符号,1则对应的为负数,0为对应的为正数
uint8 KP_Uint8;
uint8 KI_Uint8;
uint8 KD_Uint8;
uint16 Uk_Uint16;//上一时刻的控制电压
uint16 RK_Uint16;//设定值
uint16 CK_Uint16;//实际值
}PIDValueStr;
PIDValueStr PID;
uint8 out ;// 加热输出
uint8 count;// 输出时间单位计数器
/*================================================================
PID = Uk + KP*+KI*E(k)+KD*;(增量型PID算式)
函数入口: RK(设定值),CK(实际值),KP,KI,KD
函数出口: U(K)
//PID运算函数
================================================================*/
void PIDOperation (void)
{
uint32 Temp;//中间临时变量
uint32 PostSum;//正数和
uint32 NegSum;//负数和
Temp = 0;
Temp = 0;
Temp = 0;
PostSum = 0;
NegSum = 0;
if( PID.RK_Uint16 > PID.CK_Uint16 )//设定值大于实际值否?
{
if( PID.RK_Uint16 - PID.CK_Uint16 >10 )//偏差大于10否?
{
PID.Uk_Uint16 = 100;}//偏差大于10为上限幅值输出(全速加热)
else
{
Temp = PID.RK_Uint16 - PID.CK_Uint16;//偏差<=10,计算E(k)
PID.EkFlag_Uint8=0;//E(k)为正数,因为设定值大于实际值
//数值移位
PID.Ek_Uint32 = PID.Ek_Uint32;
PID.Ek_Uint32 = PID.Ek_Uint32;
PID.Ek_Uint32 = Temp;
//================================================================
if( PID.Ek_Uint32 >PID.Ek_Uint32 )//E(k)>E(k-1)否?
{
Temp=PID.Ek_Uint32 - PID.Ek_Uint32;//E(k)>E(k-1)
PID.EkFlag_Uint8=0; }//E(k)-E(k-1)为正数
else
{
Temp=PID.Ek_Uint32 - PID.Ek_Uint32;//E(k)<E(k-1)
PID.EkFlag_Uint8=1; }//E(k)-E(k-1)为负数
//================================================================
Temp=PID.Ek_Uint32*2 ;// 2E(k-1)
if( (PID.Ek_Uint32+ PID.Ek_Uint32)>Temp )//E(k-2)+E(k)>2E(k-1)否?
{
Temp=(PID.Ek_Uint32+ PID.Ek_Uint32)-Temp;//E(k-2)+E(k)>2E(k-1)
PID.EkFlag_Uint8=0; }//E(k-2)+E(k)-2E(k-1)为正数
else
{
Temp=Temp-(PID.Ek_Uint32+ PID.Ek_Uint32); //E(k-2)+E(k)<2E(k-1)
PID.EkFlag_Uint8=1; }//E(k-2)+E(k)-2E(k-1)为负数

//================================================================
Temp = (uint32)PID.KP_Uint8 * Temp;// KP*
Temp = (uint32)PID.KI_Uint8 * PID.Ek_Uint32;// KI*E(k)
Temp = (uint32)PID.KD_Uint8 * Temp;// KD*
//以下部分代码是讲所有的正数项叠加,负数项叠加?
//KP*
if(PID.EkFlag_Uint8==0)
PostSum += Temp;//正数和
else
NegSum += Temp;//负数和
// KI*E(k)
if(PID.EkFlag_Uint8==0)
PostSum += Temp;//正数和

//KD*
if(PID.EkFlag_Uint8==0)
PostSum += Temp;//正数和
else
NegSum += Temp;//负数和
//U(K)
PostSum += (uint32)PID.Uk_Uint16;

if(PostSum > NegSum )// 是否控制量为正数
{ Temp = PostSum - NegSum;
if( Temp < 100 )//小于上限幅值则为计算值输出
PID.Uk_Uint16 = (uint16)Temp;
else
PID.Uk_Uint16 = 100;//否则为上限幅值输出
}
else//控制量输出为负数,则输出0(下限幅值输出)
PID.Uk_Uint16 = 0;
}
}
else
{ PID.Uk_Uint16 = 0; }
}

faron 发表于 2015-11-5 17:31:02

谢谢分享,受益匪浅{:1106_362:}

maboy 发表于 2015-11-5 17:31:02

写的挺严谨的……挺好{:1106_362:}

fanzju 发表于 2015-11-5 17:31:02

2.PID控制器参数的工程整定,各种调节系统中P.I.D参数经验数据以下可参照:
温度T: P=20~60%,T=180~600s,D=3-180s
压力P: P=30~70%,T=24~180s,
液位L: P=20~80%,T=60~300s,
流量F: P=40~100%,T=6~60s。

口诀还是挺难得,这个经验型的还好,下次试试看

nosibe 发表于 2015-11-5 17:31:02

好贴!!{:1106_382:}

123wys 发表于 2015-11-5 17:31:02

fanzju 发表于 2015-11-7 10:57
2.PID控制器参数的工程整定,各种调节系统中P.I.D参数经验数据以下可参照:
温度T: P=20~60%,T=180~600s,D ...

嗯,确实是这样。

123wys 于 2015-11-07 14:05:48 补充以下内容:
谢谢啊

123wys 发表于 2015-11-5 17:31:02

faron 发表于 2015-11-7 10:52
谢谢分享,受益匪浅

嗯这样还是不错的{:1106_362:}

123wys 发表于 2015-11-5 17:31:02

沈伦 发表于 2015-11-7 10:43
请教一个问题:

做的是一个由51单片机控制的直流电动机调速系统,我使用的是增量式PID算法,输入为偏差 ...

这个问题我得好好考虑

123wys 发表于 2015-11-5 17:31:02

{:1106_362:}

123wys 发表于 2015-11-5 17:31:02

顶一下。。。

chenhaijunsjy 发表于 2015-11-5 17:31:02


先看看是什么呢
页: [1]
查看完整版本: PID调节有关介绍