发新帖本帖赏金 2.00元(功能说明)我要提问
12下一页
返回列表
打印
[C语言]

PID温度控制请教

[复制链接]
3036|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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

10s.JPG (23.99 KB )

10s.JPG

30S.JPG (28.3 KB )

30S.JPG

打赏榜单

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参数要不要改。

使用特权

评论回复
5
tanghuihua|  楼主 | 2015-12-10 13:43 | 只看该作者
买的控制器没有程序。
用买的控制器,P,I,D三个参数不变,只改变T,10S和30S,控制效果差不多。不会象我的那样出现振荡。

使用特权

评论回复
6
JY-DX-JY| | 2015-12-10 13:47 | 只看该作者
那似乎只能是PID的计算公式不同了。

使用特权

评论回复
7
tanghuihua|  楼主 | 2015-12-10 13:50 | 只看该作者
刚在一楼描述中加入了温度曲线图。帮我看看公式是否有需要改进的地方?

使用特权

评论回复
8
JY-DX-JY| | 2015-12-10 15:24 | 只看该作者
增大比例环节。

使用特权

评论回复
9
21ic小管家| | 2015-12-10 17:13 | 只看该作者
此打赏为十大热门打赏哦~详情请戳:https://bbs.21ic.com/icview-1219832-1-1.html

使用特权

评论回复
10
JY-DX-JY| | 2015-12-10 17:17 | 只看该作者
ek0,ek1,ek2哪个在先,哪个在后?

使用特权

评论回复
11
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改变一次占空比的两个波形。

30-10.jpg (47.33 KB )

30-10.jpg

使用特权

评论回复
12
Harvard| | 2015-12-10 22:35 | 只看该作者
绝对是好帖  好像也玩个类似的东西.

使用特权

评论回复
13
tanghuihua|  楼主 | 2015-12-11 12:26 | 只看该作者
好贴的话,大家都帮出出主意,提提建议啥。

使用特权

评论回复
14
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?控制本来就是采样越快性能越高呗。除非硬件条件不满足你更高的采样频率。

使用特权

评论回复
15
小鱼儿1045| | 2015-12-11 13:35 | 只看该作者
我不明白,还请楼主,指教,继电器的通断输出,用PID,难道不会造成继电器频繁通断吗?

使用特权

评论回复
16
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。

使用特权

评论回复
17
tanghuihua|  楼主 | 2015-12-11 14:07 | 只看该作者
用T=30S就是为了避免继电器频繁开关。

我最后的那个图,计算的时候公式里面的T=5,但输出的时候我把uk转换成了30S的百分比,所以输出周期还是30S,也就是说PID计算在30S内计算了6次,其中5次的uk没有参与控制,只是用第6次的uk参与控制。

使用特权

评论回复
18
tanghuihua|  楼主 | 2015-12-11 14:11 | 只看该作者
注:我们现在不是考虑P.I,D三个参数大小的问题。

因为我用买的表,P,I,D固定,只调T,人家的输出曲线都是差不多的。而我的10S输出正常,30S却会振荡。我是想弄明白人家是怎么做到的。呵呵

使用特权

评论回复
19
charrijon| | 2015-12-11 22:58 | 只看该作者
呵呵,显然是有问题的,你在10S控制一次和30S控制一次的过程中,实际上你的真正意义上的Kp,Kd,和Kr并不是你设定的值。

使用特权

评论回复
20
ywlzh| | 2015-12-14 10:03 | 只看该作者
采样周期的改变,肯定也要伴随PID参数的而改变,PID运算,没采样一次就会对控制量进行改变的,按理说,时间越短越好,估计是你的P参数过大,导致来回振荡的次数过多吧

使用特权

评论回复
发新帖 本帖赏金 2.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

35

帖子

2

粉丝