去年导师给公司做的三路温控器讓我搞的匆匆忙忙就交差了直到现在反应出了一些问题我也搞了两天。感觉调PID参数太耗时间了现在改进之后,超调量1度误差正负0.5度。之前的问题是存在4度的静态偏差尤其是在温控设定值三十多度四十度时比较明显。PID程序是直接用师兄的复制粘贴过来的去年调的时候没加积分项原因是加了积分项之后根本就控制不起来了。由于当时比较赶也没有深究五十度时控制效果很好就也没试验其它值就交差叻。
加积分项就控制不了这个问题我想了一晚上直到早上我醒了有了思路。那就从最根本的开始分析:
说明了这个PID计算的值一直是小于零的可是为什么小于零呢?来看一下PIDCalc();这个函数
其中返回值是三个数相加的Error、dError这两个值是确定的可以计算出来的,而SumError是多少呢初始值根本就不知道,所以问题就在于没有初始化初始化,初始化这个一定要记住喽局部变量不初始化就是任意值,定义变量时最好帶着初始化了
初始化之后果然好使了。但是系统震荡明显且振幅大于是开始调PID的过程了。参考了一位前辈的经验其中他的那个模型特别好,直接带入计算设定值效果还是不错的。不过当设定温度与实际温度相差较大时控制效果很不好。于是加入积分分离只有当靠近设定温度时才引入积分项。
} //积分分离防止大幅度增减设定导致积分项一直累加,引起较大超调就是说遇到了问题不要慌不要烦从朂根本的问题去分析。