打印

请教PID输出与PWM如何对应

[复制链接]
17960|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 milktang 于 2015-8-17 22:09 编辑

请教各位大侠,现在做一个加热温控电路,采用8位PWM控制加热片的电压(加热片的供电电源是DC24V),现在写PID的控温程序,不知道PID的输出该如何与PWM占空比对应。针对温控系统,是采用位置式PID还是增量式PID呢

相关帖子

沙发
dirtwillfly| | 2015-8-18 08:09 | 只看该作者
其实就是用占空比控制电压

使用特权

评论回复
板凳
milktang|  楼主 | 2015-8-18 10:38 | 只看该作者
dirtwillfly 发表于 2015-8-18 08:09
其实就是用占空比控制电压

恩,是的,但我不知道PID的输出和PWM的占空比是什么样的关系,是PID输出直接除以一个系数就是需要输出的占空比吗

使用特权

评论回复
5
gx_huang| | 2015-8-18 12:46 | 只看该作者
PID输出,应该有一个范围,比如0-25500,然后,除以100就可以了。

使用特权

评论回复
6
milktang|  楼主 | 2015-8-18 13:56 | 只看该作者
gx_huang 发表于 2015-8-18 12:46
PID输出,应该有一个范围,比如0-25500,然后,除以100就可以了。

请问是不是还需要根据加热模型确定距离设定温度多少度时开始进行PID调节,比如差值3度时全速加热,差值在3度以内时采用PID调节

使用特权

评论回复
7
gx_huang| | 2015-8-18 14:28 | 只看该作者
是的,距离比较远,要么全加热,要么全关闭。距离接近了,开始PID控制。不过,你做过了才有经验。

使用特权

评论回复
8
milktang|  楼主 | 2015-9-9 09:34 | 只看该作者
gx_huang 发表于 2015-8-18 12:46
PID输出,应该有一个范围,比如0-25500,然后,除以100就可以了。

我测量的温度数值是到小数点后一位,程序中是把温度数值乘以10变成整数,请问是不是也是除以100?

使用特权

评论回复
9
milktang|  楼主 | 2015-9-9 10:21 | 只看该作者
假如温度差值在2度时进行PID调节,在温度差值刚好达到2度时,此时PWM=255(满功率),PID输出是0,在温度差值为0时,PID的值能算出吗,想通过这两个点的值得到PID输出和PWM的关系
根据PID-out=P*Error+I*SumError+D*dError是不是不能算出在温度差值为0时PID-out的值,P,I,D三个系数需后面整定

使用特权

评论回复
10
1037886749| | 2015-9-9 19:48 | 只看该作者
看完这个就差不多了

PID控制算法的C语言实现.(绝对的好东西).pdf

747.75 KB

使用特权

评论回复
11
mentor55=5| | 2015-9-9 21:34 | 只看该作者
请注意。

谢谢大家!

年轻人。

再次感谢大家!

从来就没有增量PID的说法。

这是国产教科书从国外教科中重COPY的。

所有的现实能用的PID都是位置PID。

从来就没有增量PID一说。

事实上所谓的增量PID的说法。

是程序设计的一种技巧或者也可以认为是唯一的方法。

也就是说你们所谓的增量PID。

是编写位置PID算法的方法。

再次感谢大家!

使用特权

评论回复
12
mentor55=5| | 2015-9-9 21:36 | 只看该作者
如果真如国产教科书所说的。

谢谢大家!

执行机构是增量式样的。

那么你不能使用PID。

你只能使用PD或P。

如果你用PID那么作为积分结构的执行机构就必然震荡。

因为你总的传递函数拥有了2个积分环节。

道理就是如此简单。

所以你肯定能够明白不存在增量PID说法的错误说法。

所有PID都是而且只能使位置式样的。

再次感谢大家!

使用特权

评论回复
13
南海渔歌| | 2015-9-10 12:23 | 只看该作者
milktang 发表于 2015-9-9 10:21
假如温度差值在2度时进行PID调节,在温度差值刚好达到2度时,此时PWM=255(满功率),PID输出是0,在温度差值 ...

关于PID输出值如何整合到PWM值   就是先把PID输出值限定个范围 比如0-2550   然后乘或除个系数即可   比如除以10  则就是PWM的范围0-255。

至于温差为0时,是否能算出PID值?当然能了,你公式不都写出来了吗。

使用特权

评论回复
14
南海渔歌| | 2015-9-10 12:27 | 只看该作者
mentor55=5 发表于 2015-9-9 21:34
请注意。

谢谢大家!

你说话中间为啥总有莫名其妙的谢谢大家感谢大家的字样啊?

所谓增量式 就是为了简便计算  减少CPU工作量   最后不还得加上上次的PID输出绝对值吗?所以本质上确实是位置式的。之所以单独提出增量式这个概念,只是为了强调它的计算简便性,也没什么不妥吧。

使用特权

评论回复
15
milktang|  楼主 | 2015-9-10 13:05 | 只看该作者
现在程序是把PID输出的初始值设为2550(PWM=PID输出/10,在准备PID调节时是满占空比255),用增量式公式算出增量u(k),然后PWM=PWM+u(k),这样可以吗,测了下温度曲线如下

使用特权

评论回复
16
南海渔歌| | 2015-9-10 13:49 | 只看该作者
milktang 发表于 2015-9-10 12:59
温差为0时,要算PID输出不是还需要P,I,D这三个系数吗,是说把这三个系数固定再算吗
觉得应是确定了PID输 ...

我是先设置PID三个系数  没有系数  你的PID公式如何计算输出?

另外 你下面的公式 PWM=PWM+u(k)  不对    应该是 u(n)=u(k)+u(n-1)     u(n)和u(n-1)分别是本次和上次PID输出绝对值    每次算出u(n)后   PWM=u(n)/10

使用特权

评论回复
17
milktang|  楼主 | 2015-9-10 17:23 | 只看该作者
程序中是先计算增量add=PID_CAL,
PID_out=PID_out+add,
if(PID_out<0) PID_out=0;
if(PID_out>2550) PID_out=2550;
PWM=(uchar)(PID_out/10)

使用特权

评论回复
18
milktang|  楼主 | 2015-9-10 17:24 | 只看该作者
南海渔歌 发表于 2015-9-10 13:49
我是先设置PID三个系数  没有系数  你的PID公式如何计算输出?

另外 你下面的公式 PWM=PWM+u(k)  不对    ...

是说先设定PID系数,然后来试验PID输出与PWM的比例关系吗

使用特权

评论回复
19
南海渔歌| | 2015-9-10 17:47 | 只看该作者
milktang 发表于 2015-9-10 17:24
是说先设定PID系数,然后来试验PID输出与PWM的比例关系吗

你陷入了一个误区    PID输出与PWM的比例  就是个固定的数字 比如除以10   不用经过试验什么的  目的只是为了:让你的PWM能满量程发挥作用

使用特权

评论回复
20
南海渔歌| | 2015-9-10 17:48 | 只看该作者
milktang 发表于 2015-9-10 17:23
程序中是先计算增量add=PID_CAL,
PID_out=PID_out+add,
if(PID_out2550) PID_out=2550;

对  我就是这么做的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

267

帖子

4

粉丝