关于pid控制的一些困惑解答
对于pid控制电机时,我遇到了十分令人困惑的问题,即为何给予该pid系统的是电机转速,却可以直接时候使用该系统的feedback作为pwm波的占空比。究其原因是没有彻底理解pid控制的核心内涵:通过输出偏差的比例、积分和微分的线性组合来构造控制量,选择合适的PID参数值,使输出趋近于期望输出,从而减小或者消除输出偏差。
现在简略书写每次测量时的中断回调函数:
我们注意到,此时speed竟然可以直接等于PID-Cal函数返回值加本身的值。
为了解释这一原因,我援引了csdn一位朋友的例子,可以通俗理解:
假设我们设置一个定时器,来定时读取编码器的值,相邻两次读取的值做差得到值a,只要a一直保持不变,是不是电机的速度也就一直不变呢。有了这个最简单的控制电机转速的概念,就可以引用pid算法了。
我们假设目标值target_val=200,一开始电机不转,读取做差测得的值便是0,这时就会产生error,有了error,pid就可以运算,假设pid运算出来的值b=1,用这个值去设置pwm占空比,显然太小,电机甚至不转动,然而电机不转动,继续产生error,产生的过程与之前说的同理,但是由于积分i的作用这次pid运算出来的值b更大了。
假如b=2吧,用b去设置pwm的占空比,还是太小,电机还是不动,那就接着pid运算,如此反复,最终b=50,这个值刚好是电机转动了起来,但是速度太低,相邻两次读取编码器的值做差之后还是小于200,还是有error,继续pid运算,b一直增大,最终b达到某个值,使得电机的转速满足相邻两次读取编码器的值做差等于200这一条件,这时error为0,pid运算出来的值还是最终的那个b,最后稳定达到我们设置的预期值。
原文链接:https://blog.csdn.net/m0_73936072/article/details/128264417
于是这样,我们就可以通过任意的量,如电压,电流等与电机速度毫不相关的量来控制电机,达到目的。