求助,怎么把PID的控制量变成输出量 点击:1866 | 回复:12



小章

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 35回
  • 年度积分:0
  • 历史总积分:129
  • 注册:2004年8月02日
发表于:2005-11-15 11:43:00
楼主
本人做一个温度控制器,在编程时遇到一个问题:
采用增量型的PID算式,△U(n)=Ka*e(n)+Kb*e(n-1)+Kc*e(n-2),怎么把这个结果变成输出量。输出是:D/A转换,0~255
各位大虾帮帮忙



狼烟

  • 精华:0帖
  • 求助:0帖
  • 帖子:23帖 | 149回
  • 年度积分:0
  • 历史总积分:295
  • 注册:2004年12月05日
发表于:2005-11-15 13:06:00
1楼
PID限幅0-255,<温度设定+PID处理结果>*最高温度/255=OUT

小章

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 35回
  • 年度积分:0
  • 历史总积分:129
  • 注册:2004年8月02日
发表于:2005-11-16 10:04:00
2楼
好象不对,温度设定200度,PID处理结果150,最高温度500度,按上面公式算得结果686,明显超过255

王晟磊

  • 精华:12帖
  • 求助:0帖
  • 帖子:70帖 | 687回
  • 年度积分:0
  • 历史总积分:1173
  • 注册:2004年2月11日
发表于:2005-11-16 20:16:00
3楼
温控就不要用增量型的PID,用标准的PID吧。

狼烟

  • 精华:0帖
  • 求助:0帖
  • 帖子:23帖 | 149回
  • 年度积分:0
  • 历史总积分:295
  • 注册:2004年12月05日
发表于:2005-11-17 07:58:00
4楼
out也限幅255

小章

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 35回
  • 年度积分:0
  • 历史总积分:129
  • 注册:2004年8月02日
发表于:2005-11-17 10:14:00
5楼
有人说把那个结果除于一个系数,不知道行不行?

狼烟

  • 精华:0帖
  • 求助:0帖
  • 帖子:23帖 | 149回
  • 年度积分:0
  • 历史总积分:295
  • 注册:2004年12月05日
发表于:2005-11-17 10:44:00
6楼
pid结果不能直接用,除于一个系数可以,比如结果是三位数,除于一个系数可以后,可成两位数,将末位省去

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 1回
  • 年度积分:0
  • 历史总积分:54
  • 注册:2005年11月17日
发表于:2005-11-17 13:25:00
7楼
PID限幅0-255,<温度设定+PID处理结果>*最高温度/255=OUT
温度设定:要改为上次输出量, 
由于你只有0~255,你最好除以10或5以后做计算,以扩大范围,
if CV > 255 then CV=255 就可以了

狼烟

  • 精华:0帖
  • 求助:0帖
  • 帖子:23帖 | 149回
  • 年度积分:0
  • 历史总积分:295
  • 注册:2004年12月05日
发表于:2005-11-17 13:46:00
8楼
你补充很完整,,△U(n)=K*PID,第一扫描周期<温度设定+PID处理结果>*最高温度/255=OUT1,已后<OUTn=OUTn-1+K*PID,K要根据温度的惯性适当调整

bule

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 38回
  • 年度积分:0
  • 历史总积分:113
  • 注册:2005年11月16日
发表于:2005-11-17 23:40:00
9楼
各位大虾:小弟是新手以后请多多关造

小章

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 35回
  • 年度积分:0
  • 历史总积分:129
  • 注册:2004年8月02日
发表于:2005-11-18 10:20:00
10楼
假如我进行鲁棒调节(设定一个温度范围,在这个范围内进行PID调节,在这个范围外进行全开、全关,加快调节速度),请问这个时候,上面那个公式里的最高温度是否要改成设定的温度范围?

小章

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 35回
  • 年度积分:0
  • 历史总积分:129
  • 注册:2004年8月02日
发表于:2005-11-18 10:28:00
11楼
 pid结果不能直接用,除于一个系数可以,比如结果是三位数,除于一个系数可以后,可成两位数,将末位省去

能不能讲讲这个系数怎么确定呢?我最困惑的就是这个了。

void pid_run(void) 
     { 
     static int en_1,en_2; 
     long l,l1,l2; 
     int t; 
      t=adcnum-piddata;        //跟参考量的偏差 
      l=t; 
      l=l*pidview[0]; 
            l1=(long)(en_1)*pidview[1]; 
            l2=(long)(en_2)*pidview[2];   
            l=l+l1+l2;                   //PID算式 
      en_2=en_1; 
      en_1=t; 
      t=(int)(l); 
      pidtime_do+=t; 
    } adcnum是现场温度值
piddata PID参考量
pidview[3] PID三个参数
pidtime 是D/A输出0~255


这是上段代码的注释 
帮我看看这段代码?问题在哪里?

小章

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 35回
  • 年度积分:0
  • 历史总积分:129
  • 注册:2004年8月02日
发表于:2005-11-18 10:30:00
12楼
能不能根据我的代码告诉我正确的应该怎么算?

热门招聘
相关主题

官方公众号

智造工程师