|
发表于 2014-7-14 19:34:20
|
显示全部楼层
看到不少用PID做温控的,我自己只用有电机控制的经验,所以温控里面有什么特别注意的我也说不出来,唯一的可能就是采样周期和系统滞后相对大一些吧。
下面就我的理解回答你的问题,难免有不足和简陋之处:
1、这是比较关键的问题,其实你没把温度和占空比这两个量联系起来。我们控制的是温度,实际也是控制的输出占空比,他们实际是简单的线性关系,温度和占空比大致就是正比,温度=系数*占空比。
那么在PID计算里面,为了方面理解,你PID公式里面的量最好是一致的,比如你的error不妨就是温度的误差(设定值-当前值,单位是℃),那么你通过增量PID算出的量就看成是单位是℃,然后用温度/系数得到真空比a,然后CCR1Val+a 就行了。你的CCR1Val += incPIDcalc(&PID1,I2C_Temp)也可以啊,但是你必须保证incPIDcalc(&PID1,I2C_Temp)输出的是占空比哦,否则你前面的CCR1Val表示占空比,后面的算出是温度,加起来没有意义。总结一句话,通过系数变换让单位一致就行。另外,注意一下你的控制精度,举个例子,你用0%~100%的占空比,如果这个真空比用的是整数型变量,那你得精度就是1%的真空比对应的温度了(大致)。
2、占空比初始值就是变量默认的零咯。放到系统里面理解就是最一开始控制量是零。你说占空比是1,应该是占空比100%是吧,你明明是让PID去做的,却人为干预让他初始的输出是最大,没道理这么做的吧。你怎么不考虑人家是用来降温呢...
3、过冲问题。不知道你有没有仔细看“coleyao”朋友的图,T_up是上升时间。图1,上升时间20s;图2,101s;图3,493秒。控制系统要求稳、快、准。你追求快速性,稳定性肯定有所牺牲的,追求稳定没超调,那你快速性要妥协。我没有温控的实际经验,个人认为这个看场合吧。
还有一个,我记得不是很清楚了,上面的三个图应该是调整的积分环节做到的。 |
|