12下一页
返回列表 发新帖我要提问本帖赏金: 2.00元(功能说明)

[C语言] PID温度控制请教

[复制链接]
3987|22
 楼主| tanghuihua 发表于 2015-12-10 11:24 | 显示全部楼层 |阅读模式
本帖最后由 tanghuihua 于 2015-12-10 13:48 编辑

现开发一个温度控制表,采样增量式PID控制算法,核心公式:
uk = uk + (ek0-ek1)/P + ek0*T/(Ti*P) + (ek0-2ek1+ek2)*Td/(T*P);

输出为继电器控制加热管。

当P=20,Ti=60,Td=15时候,对同一控制对象进行控制:
1,用T=10s PID运算10s一次,控制出来的效果非常好,超调振荡2个周期后稳定。
2,但用T=30s PID运算30s一次,控制出来的效果就糟糕了,至少振荡了10几个周期才稳定,而且稳定度很差。

问题:T=30s的时候,是否还是要10s计算一次PID,计算三次后再改变继电器的输出时间?

请知道的朋友帮我解答一下。谢谢
注:请不要说30s的控制周期太长,我用市场买的PID控制器对相同的控制对象进行T=30s的控制,控制效果和我的T=10s时的控制效果一样。呵呵

附图,T=10S 和 T=30S 的控制效果,P=20,Ti=60,Td=15

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

打赏榜单

21ic小管家 打赏了 2.00 元 2015-12-10

JY-DX-JY 发表于 2015-12-10 11:40 | 显示全部楼层
我感觉T=30,就要PID30S运算一次。
 楼主| tanghuihua 发表于 2015-12-10 11:51 | 显示全部楼层
但30s计算一次,控制振荡厉害,而且最后的稳定度很差。
JY-DX-JY 发表于 2015-12-10 11:56 | 显示全部楼层
你买的控制器你有程序吗?对照一下。还有T=30的时候,PID参数要不要改。
 楼主| tanghuihua 发表于 2015-12-10 13:43 | 显示全部楼层
买的控制器没有程序。
用买的控制器,P,I,D三个参数不变,只改变T,10S和30S,控制效果差不多。不会象我的那样出现振荡。
JY-DX-JY 发表于 2015-12-10 13:47 | 显示全部楼层
那似乎只能是PID的计算公式不同了。
 楼主| tanghuihua 发表于 2015-12-10 13:50 | 显示全部楼层
刚在一楼描述中加入了温度曲线图。帮我看看公式是否有需要改进的地方?
JY-DX-JY 发表于 2015-12-10 15:24 | 显示全部楼层
增大比例环节。
21ic小管家 发表于 2015-12-10 17:13 | 显示全部楼层
此打赏为十大热门打赏哦~详情请戳:https://bbs.21ic.com/icview-1219832-1-1.html
JY-DX-JY 发表于 2015-12-10 17:17 | 显示全部楼层
ek0,ek1,ek2哪个在先,哪个在后?
 楼主| tanghuihua 发表于 2015-12-10 21:27 | 显示全部楼层
ek0是最近一次,ek1是上一次,ek2是再上一次。

刚才改了一下,每5秒计算一次PID(计算中,PID公式中的T用5),当T=10的时候,每两次改变一次控制占空比,T=30的时候,每6次改变一次占空比。 这样控制的波形基本符合了PID的标准输出曲线,但又出现其他问题,就是当温度稳定后,稳定度没有之前的高了。之前10S计算一次的那个稳定后基本在正负0.2度以内,刚才实验的结果,稳定后,会在正负0.8度以内变化。

感觉是微分环节在捣鬼。请大家发表建议,谢谢。
附件是每5秒计算一次,10S和30S改变一次占空比的两个波形。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
Harvard 发表于 2015-12-10 22:35 | 显示全部楼层
绝对是好帖  好像也玩个类似的东西.
 楼主| tanghuihua 发表于 2015-12-11 12:26 | 显示全部楼层
好贴的话,大家都帮出出主意,提提建议啥。
xmuhwei 发表于 2015-12-11 13:35 | 显示全部楼层
1/Ti/2/pi = 0.0026HZ; 1/Td/2/pi = 0.010.6HZ 。当计算周期30s,频率1/30/2= 0.0166hz距离微分频率太近了,你适当的降低Ti,Td试试吧。
另外,既然用10s更优,为什么要用30s?控制本来就是采样越快性能越高呗。除非硬件条件不满足你更高的采样频率。
小鱼儿1045 发表于 2015-12-11 13:35 | 显示全部楼层
我不明白,还请楼主,指教,继电器的通断输出,用PID,难道不会造成继电器频繁通断吗?
xmuhwei 发表于 2015-12-11 13:41 | 显示全部楼层
本帖最后由 xmuhwei 于 2015-12-11 13:48 编辑
tanghuihua 发表于 2015-12-10 21:27
ek0是最近一次,ek1是上一次,ek2是再上一次。

刚才改了一下,每5秒计算一次PID(计算中,PID公式中的T用5 ...

你既然5s计算一次,本来T等于5代入你的公式,而你把T改成30,那其实就是相当于把Ti和Td各降了6倍嘛。ti和td都降了,控制性能自然下降了。稳定性不如前呀。最好就是加快计算频率,看还能不能提升PID参数,说不定性能又更高了哦:lol。
 楼主| tanghuihua 发表于 2015-12-11 14:07 | 显示全部楼层
用T=30S就是为了避免继电器频繁开关。

我最后的那个图,计算的时候公式里面的T=5,但输出的时候我把uk转换成了30S的百分比,所以输出周期还是30S,也就是说PID计算在30S内计算了6次,其中5次的uk没有参与控制,只是用第6次的uk参与控制。
 楼主| tanghuihua 发表于 2015-12-11 14:11 | 显示全部楼层
注:我们现在不是考虑P.I,D三个参数大小的问题。

因为我用买的表,P,I,D固定,只调T,人家的输出曲线都是差不多的。而我的10S输出正常,30S却会振荡。我是想弄明白人家是怎么做到的。呵呵
charrijon 发表于 2015-12-11 22:58 | 显示全部楼层
呵呵,显然是有问题的,你在10S控制一次和30S控制一次的过程中,实际上你的真正意义上的Kp,Kd,和Kr并不是你设定的值。
ywlzh 发表于 2015-12-14 10:03 | 显示全部楼层
采样周期的改变,肯定也要伴随PID参数的而改变,PID运算,没采样一次就会对控制量进行改变的,按理说,时间越短越好,估计是你的P参数过大,导致来回振荡的次数过多吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

35

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部