请教PID控制温度的三个经验性参数? 还有开关量PID的问题

dos5gw 2010-01-25 11:56:17
1)在公式△u=Kp * [e(n) - e(n-1)]
+ Ki * e(n)
+ Kd * [e(n) - 2e(n-1) + e(n-2)]
中,Kp,Ki,Kd三个参数我目前用的是4, 0.33, 4, 感觉温度曲线的上下波动比较大, 在±0.2摄氏度左右, 但要求达到±0.05, 三个参数一般设置成多大比较合适?


2)
在上面的公式中, 我找了一些资料如下:
先确定比例系数Kp,和采样周期T,Ti,然后计算积分系数Ki=Kp*T/Ti, 微分系数Kd=Kp*T/Td ,其中Ti和Td是积分周期和微分周期
请问: 采样周期T,积分周期Ti,微分周期Td分别有什么实际意义?
比如我定的采样周期T=5秒, 是不是就指每隔5秒执行一次采样+计算偏差 ?


3)
原来调节温度是靠改变电热丝的电压实现的,电压可以从0V~5V内的任意值, 现在想改成开关量的, 电压只能是0V or 5V
不过对这种开关量的PID不是很了解, 我记得资料有提到"工作时长占采样周期的百分比"
我目前的想法是, 如果计算的电压值大于0.6*5V的话, 就按5V工作; 如果计算的电压值小于于0.6*5V的话, 就按0V工作,请问是否可行?


一会贴我的PID实现代码,,,,,,,
...全文
1796 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序员小哈 2011-07-25
  • 打赏
  • 举报
回复
Mark,很有收藏的价值
tcdzyq 2010-01-26
  • 打赏
  • 举报
回复
MARK
lin0119 2010-01-26
  • 打赏
  • 举报
回复
5楼说的“纯滞后系统的大林算法”楼主应该好好参考一下。
具体做法就是你测量从开始加热到温度探头有反应的滞后时间。把这个滞后考虑进去。
lyj2009 2010-01-26
  • 打赏
  • 举报
回复
个人觉得PID得实际跟踪,我的调试经验是把P I D,和e(n)用matlab画一个图出来,然后再一点点分析,自己去看PID多大好,因为PID还与量化的大小有关。。。这只是个人想法。。。。
dos5gw 2010-01-26
  • 打赏
  • 举报
回复
C++代码:
//file.h文件----------------------------
struct PID{
float target; // m_WorkingTemp
float KP; // Proportional Const
float KI; // Integral Const
float KD; // Derivative Const
float err1; // e(n-1)
float err2; // e(n-2)
PID(){
target=35.0;
KP=4.0;
KI=0.33;
KD=4.0;
err1=0.0;
err2=0.0;
}
void SetTarget(float tar);
};

float PIDCalc(PID *ppid,float curr_val);

//file.cpp文件---------------------------
void PID::SetTarget(float tar){
target=tar; //set member of PID
}

float PIDCalc( PID *ppid, float curr_val )
{
float err0,rOut;
err0 = ppid->target - curr_val; // e(n)= c - r(n)
rOut = (ppid->KP) * (err0 - ppid->err1)
+(ppid->KI) * err0
+(ppid->KD) * (err0 - 2*ppid->err1 + ppid->err2);
//rOout=KP*[e(n)-e(n-1)] + KI*e(n) + KD*[e(n)-2e(n-1)+e(n-2)]

ppid->err2 = ppid->err1; // e(n-2) = e(n-1)
ppid->err1 = err0; // e(n-1) = e(n)
return rOut;
}

void XShamber::Update()
{
float dVol=0;
float actionLast;
AnalogUpdate();
ReadShamberTemp(); //读当前温度,并将温度赋与m_WorkingTemp
m_pPID->SetTarget(m_WorkingTemp);
switch(m_status)
{
case Closed:
break;
case Opened:

actionLast=0.055*(getTimerTicks()-actionStart);

if(actionLast>4.0)
{
dVol=PIDCalc(m_pPID,m_CurrTemp);
DaVoltage+=dVol;
if(DaVoltage<0) DaVoltage=0;
if(DaVoltage>5.0) DaVoltage=5.0;
DaOut(ShamHeatCtrlDaCh,DaVoltage);
actionStart=getTimerTicks();
}
break;
}
}
galle 2010-01-26
  • 打赏
  • 举报
回复
参数整定找最佳,从小到大顺序查
  先是比例后积分,最后再把微分加
  曲线振荡很频繁,比例度盘要放大
  曲线漂浮绕大湾,比例度盘往小扳
  曲线偏离回复慢,积分时间往下降
  曲线波动周期长,积分时间再加长
  曲线振荡频率快,先把微分降下来
  动差大来波动慢。微分时间应加长
  理想曲线两个波,前高后低4比1
  一看二调多分析,调节质量不会低
galle 2010-01-26
  • 打赏
  • 举报
回复
1.负反馈
自动控制理论也被称为负反馈控制理论。首先检查系统接线,确定系统的反馈为负反馈。例如电机调速系统,输入信号为正,要求电机正转时,反馈信号也为正(PID算法时,误差=输入-反馈),同时电机转速越高,反馈信号越大。其余系统同此方法。
2.PID调试一般原则
a.在输出不振荡时,增大比例增益P。
b.在输出不振荡时,减小积分时间常数Ti。
c.在输出不振荡时,增大微分时间常数Td。
3.一般步骤
a.确定比例增益P
确定比例增益P时,首先去掉PID的积分项和微分项,一般是令Ti=0、Td=0(具体见PID的参数设定说明),使PID为纯比例调节。输入设定为系统允许的最大值的60%~70%,由0逐渐加大比例增益P,直至系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益P,设定PID的比例增益P为当前值的60%~70%。比例增益P调试完成。
b.确定积分时间常数Ti
比例增益P确定后,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。积分时间常数Ti调试完成。
c.确定微分时间常数Td
积分时间常数Td一般不用设定,为0即可。若要设定,与确定 P和Ti的方法相同,取不振荡时的30%。
d.系统空载、带载联调,再对PID参数进行微调,直至满足要求。

比例(P)控制
比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。
积分(I)控制
在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。
galle 2010-01-26
  • 打赏
  • 举报
回复
1.负反馈
自动控制理论也被称为负反馈控制理论。首先检查系统接线,确定系统的反馈为负反馈。例如电机调速系统,输入信号为正,要求电机正转时,反馈信号也为正(PID算法时,误差=输入-反馈),同时电机转速越高,反馈信号越大。其余系统同此方法。
2.PID调试一般原则
a.在输出不振荡时,增大比例增益P。
b.在输出不振荡时,减小积分时间常数Ti。
c.在输出不振荡时,增大微分时间常数Td。
3.一般步骤
a.确定比例增益P
确定比例增益P时,首先去掉PID的积分项和微分项,一般是令Ti=0、Td=0(具体见PID的参数设定说明),使PID为纯比例调节。输入设定为系统允许的最大值的60%~70%,由0逐渐加大比例增益P,直至系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益P,设定PID的比例增益P为当前值的60%~70%。比例增益P调试完成。
b.确定积分时间常数Ti
比例增益P确定后,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。积分时间常数Ti调试完成。
c.确定微分时间常数Td
积分时间常数Td一般不用设定,为0即可。若要设定,与确定 P和Ti的方法相同,取不振荡时的30%。
d.系统空载、带载联调,再对PID参数进行微调,直至满足要求。

比例(P)控制
比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。
积分(I)控制
在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。
dos5gw 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 domworldjohn 的回复:]
PID的参数一般都是通过调出来的而不是算出来的
[/Quote]
调参数的话,总得从某个"大概的值"开始调吧? 我现在是不清楚这个"大概的值"是多少....
schlafenhamster 2010-01-25
  • 打赏
  • 举报
回复
温度控制,因系统时常数很大,还有死区,需要一种特殊的PID算法“纯滞后系统的大林算法”。
domworldjohn 2010-01-25
  • 打赏
  • 举报
回复
PID的参数一般都是通过调出来的而不是算出来的
dos5gw 2010-01-25
  • 打赏
  • 举报
回复
╮(╯◇╰)╭, 真的没人了么........
a0011423 2010-01-25
  • 打赏
  • 举报
回复
不懂,帮顶
dos5gw 2010-01-25
  • 打赏
  • 举报
回复
没人? ddd

27,368

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧