这位同学,请先理解PID。在此实验中,PID是一种算法,所谓P是指计算你测量值与目标值的差值。
假设,你目标值为输出10V,但目前测量值是1V,则P为10-1,那么我现在直接让1V+9V不就可以了嘛?
事实上这么做并不可行因为你无法标定准确输出9V,那么我们可以以1V为单位每次+1V(这里不是标定1V是近似值)这样+1次测量一次,如以此来需要9次可接近(注意是接近或者超过)10V,这个每次加1则叫做D!D并不是固定的每次加1,而是(10-1)*k,这里K叫做系数,每次取这个值就会无限接近目标值,但无限是相对的,最终(目标值-测量值)*k1会达到趋近于0但大于零,且不等于目标值。这也不是我们想要的,这时候I登场了,它的作用就是修正这个误差,即累计误差,多次误差累计到一定数值则跳变修正最小误差,这样就可以使目标值=测量值。这就是PID的含义(个人理解不对之处还请指正)。
实际使用中P有系数KP,D有系数KD,I有系数KI,KP+KD+KI=1
每次PID修正值=P*KP+D*KD+I*KI
D=P*K1
I=∑(目标值-测量值)
这些系数需要你在实验中确定,KP,KD,KI这三个系数在PID系统中有个名字叫权重。
粗略说了以下个人对PID的理解,希望你能理解PID算法后自行编写代码,PID代码仅仅4行。 |