![f51185f62198489b68bf61896416535b.png](https://i-blog.csdnimg.cn/blog_migrate/2bfeff95aed03f25fcd4b95d79cb0e89.jpeg)
2.3 STM32电机PID速度控制
之前的文章,完成了直流减速电机的PWM控制、电机测速。本篇文章,将实现电机的速度闭环控制。 在公众号:小白学移动机器人,发送:速度PID,即可获得本篇文章的STM32工程文件以及相关资料。
2.3.1 解决的问题
解决带编码器直流电机的速度闭环问题。
2.3.2 PID理论
将偏差的比例、积分、微分,通过线性组合构成控制量,用控制量对被控对象进行控制,这样的控制器称为PID控制器。在连续空间中,我们通常探讨模拟PID的控制原理,如图所示:
![4b68d95232105a0f3ee6e975592d4bfa.png](https://i-blog.csdnimg.cn/blog_migrate/107ccb5854490c0809f3bf218d6de5c8.png)
我们这里用电机速度控制为例,讲解PID控制系统。r(t)为设定电机速度、y(t)为实际电机速度、e(t)=y(t)-r(t)为速度差值作为PID控制器的输入、u(t)为PID控制器的输出,作用到被控对象电机上。根据模拟PID控制器,科学家们也得出了模拟PID控制的公式,如图所示:
![355b42c34224ce3ec2e48f37cf654cd9.png](https://i-blog.csdnimg.cn/blog_migrate/600264ff58bc4043a3742fc7b02d2a76.png)
其中Kp、Ti、Td,分别为控制器的比例系数、积分系数、微分系数。该理论用在控制的例子比比皆是。但是模拟PID控制系统是在连续空间的上描述的,无法在计算机上用代码实现。于是就有数字PID控制理论,将连续空间的PID控制系统在离散空间上描述。积分变成了求和、微分变成了求斜率,于是就出现数字PID控制系统的理论公式,如图所示:
![13ebcc34641cbe0a304e65051a80e779.png](https://i-blog.csdnimg.cn/blog_migrate/b0b081904f33681d70a07dae849af568.png)
其中Kp、Ti、Td和上面描述的一样,T为采用周期,ek是本次差值,ek-1上一次的差值,直接通过模拟PID转化的数字PID又叫做位置式PID,该方式的PID的输出直接是控制量,非常不适合经常出现异常的系统,另外一种方式是增量式PID,每次只输出一个正向或者反向的调节量,就算出现异常,也不会产生巨大的影响。具体数学公式如下所示:该方法较多的应用于生产生活中,本论文中电机的速度PID控制当然也不例外。
![f0a705409432e6f948929f22e565d947.png](https://i-blog.csdnimg.cn/blog_migrate/55f4e2a6c5372ebe807f4f79d30a3baf.png)
有了上面的理论基础,开始代码实现的介绍。首先就是明确增量式PID系统的输入、输出、控制对象。将速度的设定值和速度的测得值作为PID控制器的输入参数,PID的输出参数为对PWM的调节偏差,控制对象PWM进而驱动电机达到设定速度。以上内容确定之后,就是PID控制器的代码部分了。其实仔细看看增量式PID就只有一个公式,所以使用代码实现并不困难。如下所示核心代码就这一句。
![5d0478707032e023c1989a00cfd3f74a.png](https://i-blog.csdnimg.cn/blog_migrate/227b51926554bc56934ba56068dd1ad5.png)
完成上面的代码,只是完成速度PID的一