经过一段时间的调试,我对PID控制有了进一步的理解,现将其中的一些理解写在下面。
以PID控制温度为例,PID算法输入的是温度值的误差,而算法输出的是误差经过比例,微分和积分运算后得到的结果。但是我们要用这个结果来控制PWM信号的占空比,那么就需要将PID算法的输出归一化。具体怎么归一化我还没有研究很透彻,但是经过测试,我发现对于我的系统而言,乘以系数0.0004可以符合要求。
即: result = IncPIDCalc()*0.0004*50000; //计算出输出的PWM信号占空比对应的寄存器值
if (result <= 0)
TA1CCR2 = 0; // CCR2 original PWM 0
else if(result <=50000)
TA1CCR2 = result;
else
TA1CCR2 = 50000;
下面是调试的结果:
一:设置Kp=10,Ki=10,Kd=0.3;
1:温度T设置为150℃,温升曲线为:
2:设置温度T=100℃,温升曲线为: