温控加热升温过程防过冲(超调)程序C代码
常规PID控温在升温过程中不可避免会产生一定量的超调,抛砖引玉贴一个防止温控升温过程超调的C代码,该段代码是应项目需要快速加热一8KG铁块(如图被加热件)加热至100~200℃单纯的传统的PID会产生40℃左右的超调
浙江余姚一国产温控表从21℃加热至150℃过冲6摄氏度用时4分30秒。
之前网友说宇电温控表技术接近了日本岛电,于是花了450多元购买了一台,加热过程不是一般的慢,起始温度61℃加热至150℃用时9分46秒,超调1℃,如果起始温度接近设定温度开始加热,到达设定温度会更慢,从145℃加热到150℃也需要8分钟,加热器本来功率很大,都让温控表吃掉了,为了防止超调以很小的功率升温很容易做到不超调,这算什么技术,宇电的升温太慢了。
要想达到即快速加热又没有超调或者超调量小,真的不是那么容易,加热铁块这种变态的东西(不像水空气)很容易超调,要想加热快肯定会产生一定的超调量,想没有超调只能缓慢加热,这就是一组矛盾如何这这两个要求之间选个折中点,贴个C代码程序。试验从53℃升温至150℃,加热时间5分30秒,超调不过1℃,为了省事本控制器测温使用的是MAX6675,测量分辨率只有0.25℃,所以控制精度能做到
整个温控函数分7个阶段,快速升温过程共6个阶段,第一个阶段是判断,第二个阶段强制加热,第三个阶段快速升温,第四个阶段间歇加热,第五个阶段是缓慢加热,第六个是缓冲阶段,第七个是PID,具体每个阶段的实现各位看官看代码,代码比较容易理解,没有使用高深的公式,只是仿照人类的思维进行调节。各位有什么更好的想法可以讨论一下。至于第七个阶段PID控温,当然要有好的PID三个参数,研究了市场上几款国产的温控仪大部分都是采用继电器负反馈进行参数自整定,自整定部分代码有需要的可有偿提供。
void pid_calc(float set_temp ,float now_temp )
{
ucharxdata back_i=4;
Error = set_temp - now_temp;// 偏差
dError = Error - LastError; // 当前微分
LastError= Error;
if(first_flag==1)
SumError += Error;
switch (pross_number)
{
case 1: //过程1,误差大于10度 强制提温,小于10度进入过程4间歇加热
if(Error>10)
{
first_count=30;//如果温差大于10度,进入过程2,连续加热10S钟
pid_result=100;
pross_number=2;
}
else
{
first_count=0;//如果温度小于10度,进入过程3,
pid_result=0;
pross_number=4;
}
break;
case 2://连续加热
if(first_count>0)
first_count--;//
else
{
pid_result=0;
pross_number=3; //进入间歇加热过程
}
break;
case 3: //快速加热阶段
if(Error >max_value_error)
pid_result=100;
else
{
pross_number=4; //进入间歇调温
pid_result=0;
}
break;
case 4://间歇加热温度上升不加热,温度不变或加热进行加热
if(max_tempter<=now_temp)//更新最大温度。
{
max_tempter=now_temp;
}
if(Error<=0)//超过设定温度进入停顿状态
{
pid_result = 0;
pross_number=6;//缓慢加热阶段
time_number=0;
}
else
{
if(Error>=10)//
{
if(pre_temper<now_temp)// 温度升高不需要加热
pid_result = 0;
else
pid_result =50;
}
else
{
pross_number=5;//缓慢加热阶段
time_number=0;
last_tempter=now_temp;
}
}
break;
case 5://缓慢加热阶段
if(max_tempter<=now_temp)//更新最大温度。
{
max_tempter=now_temp;
}
if(Error<=0)//超过设定温度进入停顿状态
{
pid_result = 0;
pross_number=6;//缓慢加热阶段
time_number=0;
}
else
{
if(time_number<5)
{
time_number++;
if((pid_result==100)&&((Error<5.0)&&(time_number>1)))
pid_result=0;
}
else//时间到后输出
{
if(last_tempter<now_temp)//时间到后判断如果温度有增加则不升温
pid_result=0;
else
pid_result=100;
last_tempter=now_temp;//更新温度
time_number=0;
}
if((last_tempter-now_temp)>1.0)//如果温度降低1度结束本次计时,计时重新开始
{
last_tempter=now_temp;//更新温度
pid_result=100;
time_number=0;
}
}
break;
case 6://间歇加热完毕后需要等待温度停止升高
if(max_tempter<now_temp)//最大温度更新
{
max_tempter=now_temp;
time_number=0;
}
else//确定温度不再爬升。
time_number++;
if(time_number>=4)//
{
pross_number=7;
first_flag=1;
pid_result=0;
time_number=0;
max_tempter=0;
}
break;
case 7://
if((Error<=5.0)&&(Error>=-5.0))
first_flag=1;
else
first_flag=0;
if((Error<=1.0)&&(Error>=-1.0))//误差在2.0至-1.5摄氏度时PID控温
{
p_temp=Proportion * Error;
i_temp=Integral * SumError;
d_temp=(dError*Derivative);
pid_result = (int)(p_temp+i_temp+d_temp);
}
if((Error<=2.0)&&(Error>1.0))//当误差大于1时,
{
pid_result =20;
}
if((Error<=5.0)&&(Error>2.0))//当误差大于1时,
{
pid_result =30;
}
if((Error<=10.0)&&(Error>5.0))//当误差大于1时,
{
pid_result =40;
}
if(Error>10.0)//当误差小于-1时,停止输出。
{
pid_result =100;
pross_number=1;
}
if(Error<-1.0)//当误差小于-1时,停止输出。
{
pid_result =0;
}
break;
default: break;
}//switch
if( pid_result < 0 )
{
pid_result = 0;
}
else if( pid_result > 100 )
{
pid_result = 100;
}
pre_temper=now_temp;
}
那个液晶屏显示效果不错啊!
顶楼主 那个液晶屏显示效果不错啊!
顶楼主 mubei 发表于 2015-1-10 11:09
那个液晶屏显示效果不错啊!
顶楼主
呵呵,看来这屏比代码更有吸引力{:handshake:} ,这个屏实际显示效果确实很好,手机一直没有拍出真实效果来。 液晶屏确定不错,触摸的??? 高大上,感觉不错! 这个对固定负载固定应用环境有用,换个负载又要重新调很久。
不知LZ有没有试过用风扇吹的时候会不会超调。
如果PID不超调就是假的PID,是人为干预的PID。
好的PID是震荡小,稳定快。 gliet_su 发表于 2015-1-10 11:45
这个对固定负载固定应用环境有用,换个负载又要重新调很久。
不知LZ有没有试过用风扇吹的时候会不会超调。
...
请看代码这部分代码就是防止超调的,并不是PID,文中也说过单纯使用PID不超调是不可能的,我最早做过试验,单纯PID设定150°C,超调至190°C,针对这个问题,设计了针对升温过程的控制算法,如果你对加热了解的话应该知道在加热初期使用PID是不对的,按照你的意思用风扇做试验只是升温有些慢了并不会超调,该部分代码就是防止超调的,针对各种外界环境。期间间断性的吹风散热和停止吹风,都不会产生超调。你遇到的都是老生常谈的问题,希望你能提出更好的算法
我进来是想看有没有参数自整的代码。。。。。{:smile:} chunxulove 发表于 2015-1-10 11:25
呵呵,看来这屏比代码更有吸引力 ,这个屏实际显示效果确实很好,手机一直没有拍出真实效果 ...
看样子这屏是买的模块。
好东西给大家介绍下呗{:biggrin:} chunxulove 发表于 2015-1-10 12:06
请看代码这部分代码就是防止超调的,并不是PID,文中也说过单纯使用PID不超调是不可能的,我最早做过试验 ...
LZ测的是哪个点的温度,是铁块的温度吗,还是加热器的温度。
看第一张图热电偶已经连好了,一般的温度点都直接接在铁块上。 gliet_su 发表于 2015-1-10 12:46
LZ测的是哪个点的温度,是铁块的温度吗,还是加热器的温度。
看第一张图热电偶已经连好了,一般的温度点 ...
上午看到你贴的时候正好下班,因为吃完午饭还要去开会没有仔细给你讲,测温点是铁块。 zprs 发表于 2015-1-10 11:31
液晶屏确定不错,触摸的???
是触摸屏,但是没有使用触摸功能,而是外接的选择编码器来修改参数 mubei 发表于 2015-1-10 12:39
看样子这屏是买的模块。
好东西给大家介绍下呗
是锐显的主打屏,我不是做广告的,{:smile:} 目前我们有三台设备使用该屏,但是还没有投产,这屏确实不错,价钱也便宜,曾经我们家的屏用拓普微的,抗干扰能力低,价钱还那么贵。 chunxulove 发表于 2015-1-10 13:00
是锐显的主打屏,我不是做广告的, 目前我们有三台设备使用该屏,但是还没有投产,这屏确实不错 ...
嗯呢,知道你不是打广告的,大家都能看出来。
你这个是几寸的?? 代码中的注释有的是不正确的,时间仓促,没有来得及修改,这段代码只是抛砖引玉之用,大家有什么好的想法可以讨论一下。 代码和液晶都不错,哈哈 mubei 发表于 2015-1-10 13:11
嗯呢,知道你不是打广告的,大家都能看出来。
你这个是几寸的??
七寸的,大半年没有碰过它了,色彩真的挺不错的,从联系锐显到现在只买了几块品做样机,我们的设备还没有投产,估计锐显是不是等不急了{:lol:} 看看,温控的东东都有兴趣 与狼共舞 发表于 2015-1-10 13:25
代码和液晶都不错,哈哈
谢谢,对温控有兴趣的朋友可以谈谈自己的经验,不要吝惜{:lol:} mcu5i51 发表于 2015-1-10 13:47
看看,温控的东东都有兴趣
对温控有兴趣的朋友可以谈谈自己的经验,不要吝惜{:lol:} chunxulove 发表于 2015-1-10 14:08
对温控有兴趣的朋友可以谈谈自己的经验,不要吝惜
想买个烤箱改造下,做成“传说中的微电脑控制智能烤箱”{:biggrin:} 不知道算不算温控 温控加热升温过程防过冲(超调)程序C代码 {:lol:} 如果加热是一种固定模式的话,干脆可以上经验公式表,查表解决。。。算出温度的上升速率->查表->对应输出控制PWM频率 实现减少pid计算的麻烦{:shocked:} 楼主你不改代码将设定温度为90度是否会超调,我正为超调头痛 make 不错值得学习 不错学习了 88269506 发表于 2015-1-10 15:09
楼主你不改代码将设定温度为90度是否会超调,我正为超调头痛
应该没问题,我最后应用范围是100到200,可以把过程4去掉。而且国内温控表很多是做假的。当稳定某个温度后,将热电偶切换至另一个表头,现实的温度是有差异的 wkman 发表于 2015-1-10 15:09
如果加热是一种固定模式的话,干脆可以上经验公式表,查表解决。。。算出温度的上升速率->查表->对 ...
如果这样就好了,加热跟被加热体的热容比,被加热件质量,环境温度,设定温度,等因素都有关系,这些因素大多数是不确定的 chunxulove 发表于 2015-1-10 22:46
应该没问题,我最后应用范围是100到200,可以把过程4去掉。而且国内温控表很多是做假的。当稳定某个温度 ...
你也发现了,一些仪表在设定温度附近时直接显示设定值,好像很好的样子,叫知道的人心里没底 好干净的桌子啊 很不错的帖子又长知识了 使用传统的PID一样可以做到无超调 代码不错,屏也很好,我是说屏哪里买的,多少钱买的呀? chunxulove 发表于 2015-1-10 22:49
如果这样就好了,加热跟被加热体的热容比,被加热件质量,环境温度,设定温度,等因素都有关系,这些因素 ...
我更对你第七步那几个PID参数的设定(如何设定的过程和依据)感兴趣,能否展开?常规的整定方法太麻烦了! 谢谢分享 学习了~~~~~~ marshallemon 发表于 2015-1-11 09:56
使用传统的PID一样可以做到无超调
我认为这与加热的材料有关系,其次是加热时间,没有超调也许加热时间慢。 cdfs_shangxiao 发表于 2015-1-11 09:01
好干净的桌子啊
我们家5S,乱的时候你没有看到过{:lol:} 想申请一个试验室 kinsno 发表于 2015-1-11 12:30
我更对你第七步那几个PID参数的设定(如何设定的过程和依据)感兴趣,能否展开?常规的整定方法太麻烦了 ...
PID自整定采用继电器负反馈,有偿提供{:lol:} ApexUSB 发表于 2015-1-11 11:00
代码不错,屏也很好,我是说屏哪里买的,多少钱买的呀?
你百度一下锐显,平时锐显科技的,价钱不超过300 chunxulove 发表于 2015-1-12 12:50
你百度一下锐显,平时锐显科技的,价钱不超过300
这个单色屏还不超过300,我晕,真是够贵的;
你能站内短信不?若不能留下联系方式! kinsno 发表于 2015-1-12 12:54
这个单色屏还不超过300,我晕,真是够贵的;
你能站内短信不?若不能留下联系方式! ...
是彩色的,色彩很好,是7寸的,我觉得很便宜,我们家以前用的灰度屏都400多了,我们老板喜好蓝低白字,所以做成现在这个样子。QQ499841211晚上有时间。 呵呵,要想又快,又不超调,这就是技术. 看程序,楼主是个老手了。要快肯定要以最大功率加热,理论上先算好,功率和时间, 加热块, 如果加热块是个变的,理论上就不好估算了。只能PID. 其实以一定功率加热时,看加热曲线,可以估算加热块质量,限定超调。 本帖最后由 kinsno 于 2015-1-12 13:03 编辑
chunxulove 发表于 2015-1-12 13:00
是彩色的,色彩很好,是7寸的,我觉得很便宜,我们家以前用的灰度屏都400多了,我们老板喜好蓝低白字,所 ...
贵司绝对是,土豪公司?
本为想短信你问屏的价格的,毕竟站内问象是在打广告,影响不好; 干脆直接问你了,咨询你是否用过他们家别的屏呢,最近要上一个4.3的屏,不晓得用没用过?价格如何?
再PS一下: 7寸彩屏是否用过?价格?上他们家网站瞄了一肯,好象蛮简易的,产品不多啊,也没有淘宝; chunxulove 发表于 2015-1-12 12:49
PID自整定采用继电器负反馈,有偿提供
嘿,自整定还没有尝试,有机会试一下;
防超调功能,其实不难的啊;但实际上有多大意义呢?我觉得,不晓得楼主的应用场合是什么情况下,竟然1度都不允许,有那样柯刻吗? chunxulove 发表于 2015-1-12 12:46
我认为这与加热的材料有关系,其次是加热时间,没有超调也许加热时间慢。 ...
对于这个问题我的体会是和硬件的采集精度,PID的起控时间,输出的衰减速度,前者是硬件,后者就看PID你怎么用了,之前做的控温升温速度100/度,控温点500度~900度,均无首次超调,控温精度+-1度,偏离设定值的时间很短暂,几s而已 我是来看屏的,先留个爪印。 ApexUSB 发表于 2015-1-11 11:00
代码不错,屏也很好,我是说屏哪里买的,多少钱买的呀?
问了下,这种串口屏7寸大概270~290,带触摸的话再+50,,,定价有点尴尬。。。如果200以下就考虑了。300这价格,就不如去买399的步科 标准工业HMI 完整带外壳的。 kinsno 发表于 2015-1-12 13:01
贵司绝对是,土豪公司?
本为想短信你问屏的价格的,毕竟站内问象是在打广告,影响不好; 干脆直接问你了 ...
图片就是7寸屏的给你个电话锐显的18666022640,关于屏的问题你可以问他。 个人感觉超调是否好抑制看被加热的物体 marshallemon 发表于 2015-1-12 18:43
对于这个问题我的体会是和硬件的采集精度,PID的起控时间,输出的衰减速度,前者是硬件,后者就看PID你怎 ...
你说的很有道理,影响因素太多了。 学习了{:smile:} 你这个只是针对单一的负载,才能这样做。还有一个问题,如果环境温度不同,就是散热条件不同,程序有可能就不行了 wangqun 发表于 2015-1-13 10:27
你这个只是针对单一的负载,才能这样做。还有一个问题,如果环境温度不同,就是散热条件不同,程序有可能就 ...
必须受环境温度影响,不过通过试验发现如果不是用风机对吹加热体来强制冷却是不会产生影响的。这段代码只是为了快速提温度而不产生超调的,不是用来恒温的,所以环境不会对该部分代码功能产生影响的,仅多是升温变慢。你可以试一试{:lol:} 不会吧,用过不少宇电808的表,感觉还好吧,是不是你的PID的参数设置的不合理? jymt 发表于 2015-2-24 13:51
不会吧,用过不少宇电808的表,感觉还好吧,是不是你的PID的参数设置的不合理? ...
只是升温速度太慢 模糊控制+pid调节效果很好 还是要顶一下,有些参考意义 记号,以后用得着时再来详看。谢谢分享 顶楼主,确实是这样,我用delphi做的PLD,通过运动控制卡输出一个温控,超调40°,后来改成分段控制,超调也有15°,学习一下楼主的代码,谢谢 准备做温控方面的产品。先学习一下。 深圳有做温控的高手,你不知道而已 学习一下,做个记号 {:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:} 温控加热,做个记号。 {:smile:}谢谢楼主的分享 辛苦了 楼主是否有模糊自整定的PID程序加我QQ:739822539 好东西我看到 谢谢分享! 不错,学习 留一个看好屏 楼主这个一看就是温控老手,量产级别代码,我最近一个加热发程序正好遇到些问题,想有偿请教下您
页:
[1]