PID的目的:
是为了使系统从当前值更快更稳的变到设定值。比如,温度控制,当前是20°,想让它变成100°,这里有个前提条件是要确保整个升温过程中温度都不能超过100°。
简单方法,可以每秒升温a°,(100-20)/a秒后ok。但这种方法缺点是无法确保时刻通过温度反馈来判断后续如何操作,比如预想1秒升温20°,但实际情况都很难控制,
比如我们煤气灶开一样的火,铁锅和砂锅单位时间内升温多少是不一样的。所以我们需要根据经过单位时间后反馈的温度来决定后续操作该如何进行?
回到最开始的例子从20-->100,一开始可以猛烈加热,当温度升到一定程度,再减少一些,如此循环,直到温度无限趋近100°而不超过。我理解PID大体上就是这种理念而产生的。
方法:
1、PID有三个参数(常量参数)P、I、D,需要凭经验通过多次调试将其确定下来。
2、三个参数确定后,只要给出当前值和设定值即可通过公式得到结果,根据这个结果来决定下一步的操作
如果根据PID的结果进行下一步操作:
PID输出是0-32767的数值,
1)可对应到模拟量输出口如0-10输出,PID输出为32767时模拟口输出10V,PID输出0时模拟口输出也是0V。
举个例子,
用PID控制温度,当前温度20°C,想让它升到100°C,用热水来加热,那么这个热水进水管上用个MFC,流量控制器,这个流量控制器是用0~10V电压来控制阀门开度的,0V就是关阀,10V就是阀全开。
那么当PID算出结果是10000时,就用10000在0-32767中的比例换算成0~10V的值,这个电压加到热水进水管的阀门上,开度就跟着变成多大。
2)这个数值你可以对应到某个输出口用占空比型式输出如周期设成一秒那么它的输出占空比高时会是高电频0.99秒低电频0.01秒如此循环,占空比低时相反。
举个例子,
PID值=(32767-0)/4,那么如果周期是一秒,则打开0.25秒,关闭0.75秒,从而实现控制。