全球旧事资料 分类
以让计算机或者单片机通过采样的方式实现PID控制,具体的PID控制又分为位置式PID控制和增量式PID控制,公式4给出了控制量的全部大小,所以称之为全量式或者位置式控制;如果计算机只对相邻的两次作计算,只考虑在前一次基础上,计算机输出量的大小变化,而不是全部输出信息的计算,这种控制叫做增量式PID控制算法,其实质就是求Δμ的大小,而Δμkμkμk1;所以将式4做自减变换有:
5其中
温度控制PID算法设计本设计利用了上面所介绍的位置式PID算法,将温度传感器采样输入作为当前输入,然后与设定值进行相减得偏差ek,然后再对之
进行PID运算产生输出结果fOut,然后让fOut控制定时器的时间进而控制加热器。为了方便PID运算,首先建立一个PID的结构体数据类型,该数据类型用于保存PID运算所需要的P、I、D系数,以及设定值,历史误差的累加和等信息:
typedefstructPIDfloatSetPoi
t设定目标DesiredValuefloatProportio
比例系数Proportio
alCo
stfloatI
tegral积分系数I
tegralCo
stfloatDerivative微分系数DerivativeCo
sti
tLastError上次偏差i
tSumError历史误差累计值PIDPIDstPID定义一个stPID变量
下面是PID运算的算法程序,通过PID运算返回fOut,fOut的值决定是否加热,加热时间是多少。PID运算的C实现代码:
floatPIDCalcPIDppi
tNextPoi
t
fi
tdErrorErrorErrorppSetPoi
t10NextPoi
t偏差,设定值减去当前采样值ppSumErrorError积分,历史偏差累加dErrorErrorppLastError当前微分,偏差相减ppPrevErrorppLastError保存ppLastErrorErrorppI
tegralppSumError积分项ppDerivativedError微分项
在实际运算时,由于水具有很大的热惯性,而且PID运算中的I(积分项)具有非常明显的延迟效应所以不能保留,我们必须把积分项去掉,相反D(微分项)则有很强的预见性,能够加快反应速度,抑制超调量,所以积分作用应该适当加强才能达到较佳的控制效果,系统最终选择PD控制方案,下面C代码所示为PD控制的实现过程:
floatPIDCalcPIDppi
tNextPoi
ti
tdErrorErrorErrorppSetPoi
t10NextPoi
t偏差,设定值减去当前采样值dErrorErrorppLastError当前微分,偏差相减ppPrevErrorppLastError保存ppLastErrorErrorretur
ppProportio
Error比例项ppDerivativedError微分项
温度控制实现通过温度的PID运算,产生结果fOut,该参数决定是否加热,加热时间是多长。该程序如下:
stPIDProportio
2设置PID比例值stPIDI
tegral0设置PID积分值stPIDDerivar
好听全球资料 返回顶部