6020|13

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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

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实现代码,,,,,,,

最新回复

MARK  详情 回复 发表于 2010-1-26 12:48
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没人? ddd
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
不懂,帮顶
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
╮(╯◇╰)╭, 真的没人了么........
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
PID的参数一般都是通过调出来的而不是算出来的
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
温度控制,因系统时常数很大,还有死区,需要一种特殊的PID算法“纯滞后系统的大林算法”。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 4 楼 domworldjohn 的回复:
PID的参数一般都是通过调出来的而不是算出来的

调参数的话,总得从某个"大概的值"开始调吧? 我现在是不清楚这个"大概的值"是多少....
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

8
 
5楼说的“纯滞后系统的大林算法”楼主应该好好参考一下。
具体做法就是你测量从开始加热到温度探头有反应的滞后时间。把这个滞后考虑进去。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
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)控制器,可以使系统在进入稳态后无稳态误差。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

10
 
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)控制器,可以使系统在进入稳态后无稳态误差。
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(初级)

11
 
参数整定找最佳,从小到大顺序查
  先是比例后积分,最后再把微分加
  曲线振荡很频繁,比例度盘要放大
  曲线漂浮绕大湾,比例度盘往小扳
  曲线偏离回复慢,积分时间往下降
  曲线波动周期长,积分时间再加长
  曲线振荡频率快,先把微分降下来
  动差大来波动慢。微分时间应加长
  理想曲线两个波,前高后低4比1
  一看二调多分析,调节质量不会低
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

12
 
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;
        }
}
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

13
 
个人觉得PID得实际跟踪,我的调试经验是把P I D,和e(n)用matlab画一个图出来,然后再一点点分析,自己去看PID多大好,因为PID还与量化的大小有关。。。这只是个人想法。。。。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

14
 
MARK
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表