标题: 关于PID算法程序参数理解的疑问 [打印本页]

作者: sinjin    时间: 2020-6-7 13:19
标题: 关于PID算法程序参数理解的疑问
最近在看PID相关文档时,一直想不明白一个问题,希望论坛的朋友帮帮忙。

使用PID算法计算出来的结果,与控制量怎么联系起来?
比如我用PWM控制无刷电机,目前是控制在1万转,引用PID算法计算出来一个变量PID_output,控制PWM的占空比用PWM_value写入单片机寄存器,这两个变量怎么关联起来呢?

我看别人的程序是这样的
if (PID_output > PWM_max)
     PWM_value = PWM_max;
else if (PID_output < 0)
     PWM_value = 0;
else
     PWM_value = PID_output;

为什么PWM_value = PID_output呢,我不理解是因为PWM_value是有范围的,比如0~1024,而PID_output 可能很大或很小,与PID参数和目标值1万转等有关,那计算结果PID_output可能会一直是很大的值或负数,远远超出PWM_value的范围。


作者: yzwzfyz    时间: 2020-6-8 10:50
PID算法计算出来一个变量PID_output,不是一个定值,它是会变的。
PID的稳态输出,原则是,当设定值与目标值(采样)一样时,保持当前的输出值不变。
否则就将输出,反向增减。
PID的算法,与历史采样记录都相关。你的程序中提到的,不属于PID计算方式。
作者: 权威人物    时间: 2020-6-8 16:23
你所复制出来的是计算过后的结果,不是PID计算的过程,PID_output是会变动的,你这个计算后限制PID_output输出的最大值和最小值。
if (PID_output > PWM_max)//限制上限
     PWM_value = PWM_max;
else if (PID_output < 0)//限制下限
     PWM_value = 0;
else
     PWM_value = PID_output;//容许范围内才能赋值给PWM
作者: lichaooo    时间: 2020-6-10 13:12
除了 PWM_value的值有范围限制之外,积分部分的值因为每次计算后都会保存,它的取值范围也应该和 PWM_value的取值范围相同,这样就不会出现你说的情况了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1