使用增量式pid算法,最后发现怎么调节kp,ki都不再让系统上升,反而下降,
能提高系统的动态响应速度,迅速反映误差,从而减少误差,但是不能消除误差,简单来说就是越大越快越小越慢但是可能会超调或者过慢有很多弊端,并且太大了会不稳定。
根据参考资料所述,增量式PID算法中的三个参数Kp、Ki、Kd分别对应比例、积分和微分这三个环节。反转现象可能是由于Kp设置过大或者Kd设置不当导致的,因此可以按以下步骤优化算法:
首先,检查Kp参数是否设置过大,因为Kp的作用是能提高系统的动态响应速度,但是如果设置过大,可能会超调或者过慢,导致反转现象。可以逐渐调小Kp的值,观察系统的响应情况,直到反转现象消失。
如果Kp已经调整合适,还出现反转现象,可以检查Kd的设置是否合适。因为微分控制对干扰噪声敏感,可能会被噪声所干扰,使系统抑制干扰的能力降低,从而导致反转。可以加入惯性滤波环节,将Kd设置合适,在微分环节中增加惯性滤波器,来减小噪声的影响。
最后,如果反转现象仍然存在,可以逐渐减小Ki的值,观察系统的响应情况。因为积分作用主要是用来消除误差的,当误差较小时,积分作用对控制量的影响较小,可能会引起反转。适当减小Ki的值可以消除这种影响。
参考代码片段(Python代码示例):
# 假设已经读取到所需的数据:error、delta_error、output、last_output等数据
Kp = 0.5 # 初始化比例参数
Ki = 0.1 # 初始化积分参数
Kd = 0.1 # 初始化微分参数
last_error = error # 上一次误差
I_term = 0 # 积分项
D_term = 0 # 微分项
P_term = Kp * delta_error # 计算比例项
# 增量PID算法
I_term += error
D_term = Kd * (output - last_output) / delta_time
output += P_term + Ki * I_term + D_term
# 加入惯性滤波器
D_filtered = low_pass_filter(D_term, alpha) # alpha为滤波系数
output += P_term + Ki * I_term + D_filtered
其中,low_pass_filter()函数为实现惯性滤波器的滤波算法,alpha为滤波系数,可以根据实际情况进行调整。