龙空技术网

一文搞懂PID算法如何实战-直流电机控制从原理、C代码到参数整定

晓亮Albert 1510

前言:

今天咱们对“单片机的pid控制”大致比较讲究,我们都想要剖析一些“单片机的pid控制”的相关文章。那么小编在网上汇集了一些有关“单片机的pid控制””的相关文章,希望兄弟们能喜欢,大家一起来学习一下吧!

今天我们来聊一聊直流电机速度控制,不过别担心,我们会用最通俗易懂的语言来讲解这个在工程和机器人领域中非常重要的应用案例,以此为例让你一文搞懂PID算法是如何实战的。

1. 理论分析

在速度闭环控制中,我们使用PID(比例-积分-微分)控制算法来调整电机的转速,使得实际转速逐渐趋近于期望值。PID算法的离散形式可以表示为:

离散PID

这个公式描述了如何通过比例项、积分项和微分项来计算控制输出,进而调整电机的运行状态。PID代表“比例-积分-微分”,是一种超级智能的调节系统。这玩意的目标是让电机跑到我们期望的速度。

比例项(P): 就是看实际速度跟我们想要的速度差多远,然后按比例调整输出。比如,差距大,输出就大,差距小,输出就小。积分项(I): 累积一下误差,让电机更快地达到目标速度。就好比你一直按着油门,车就能更快。微分项(D): 预测一下速度变化的趋势,防止电机响应过度。有点像提前感知前方路况,避免突然变化。

这三个项通过一些调节参数,比如Kp、Ki、Kd,就组成了PID算法。

2. 控制原理图

下图为电机速度控制原理图,清晰展示了闭环控制系统中各个组成部分之间的关系,搞懂它就明白了整个系统的大的原理。

控制原理图

1.带编码器直流电机就是整个系统的被控制对象,我们要控制的就是它的转速。

2.直流电机是带编码器的,编码器通过测量单位时间内的脉冲数就能算出电机实际的转动速度。我们要将编码器传感器测量的电机实际转速值反馈给速度控制器使用。

3.直流电机驱动器就是驱动电机动起来的硬件部分,有了它电机就可以让电机有足够能量转起来,控制器只需要给直流电机驱动器提供一个电压信号,驱动器就根据这个信号大小来控制电机转速,可以理解成油门信号。所以控制器就是控制输入到驱动器的这个电压信号来达到控制电机的目的,一般是使用微控制器的PWM脉宽调制来实现信号电压大小调节。

4.速度PID控制器部分就是PID算法部分,我们一般通过微控制器来跑固件代码的形式来实现PID算法控制,所以是一个软件实现过程。

总体来讲就是,速度闭环控制就是根据编码器测量的电机实际速度,并与目标速度值进行比较,得到控制偏差,然后通过PID对偏差的比例、积分、微分进行控制,使偏差趋于零的过程。

3. C语言代码实现

现在,让我们看一下如何用C语言来结合上面的理论来实现这个速度闭环控制器,这是一个非常有意思的过程。PID算法函数代码如下:

C代码

函数入口参数为编码器的电机速度的实际测量值,第二个参数为我们期望的速度目标值,函数返回值是pwm值,也就是输入到电机驱动器的电压信号大小。

第二行是计算速度偏差,测量值减去目标值。

第三行通过累加实现 速度偏差积分。

第四行使用位置式PID算出电机控制值,按照上面PID离散公式计算。

第五行事保存上一次速度偏差,方便下次计算。

接着,如下,在单片机的周期执行函数里面调用该函数来实现。

代码

1.这个调用PID函数的周期即是我们离散系统的控制周期,比如10ms,这个一般根据实际控制需求来定,理论上越小越好,因为控制周期越小信号更连续,但是也不能也必须在电机和驱动器的可接受信号范围内。

2.Set_Pwm(Moto)就是将PID算法算出的控制值通过单片机的PWM技术调制出实际电压信号输入到电机驱动器来控制电机。注意,这个函数具体实现根据单片机硬件不同具体代码实现有所差异,但是通用思路基本上也是将PID算出的值设置到PWM相关寄存器上,从而让单片机IO输出对应电压。

通过周期性执行PID函数,周期性单片机输出变化电压信号,输入到电机驱动器就可以周期性的调整电机转速,通过不断调整电机输出,使得电机的当前转速逐渐接近目标转速。

4. 参数整定

在实际应用中,PID算法的参数(Kp、Ki、Kd)的选择对系统性能影响很大。通常采用经验法或者一些专业工具进行参数整定。这包括:

比例项参数 Kp: 控制系统的灵敏度,如果设置太高,系统可能会过于敏感,引起振荡。如果设置太低,系统响应可能较慢。积分项参数 Ki: 控制系统的稳定性,用于消除系统静差。过高的积分项可能导致系统过度调整,产生超调。微分项参数 Kd: 控制系统的过冲和振荡,可以减缓系统的响应。然而,过高的微分项可能引入噪声。

参数的选择需要在实际系统中进行调试和优化,通常是一个迭代的过程。如下图就是一个比较理想的效果。

理想效果图

白线是目标值,红线是实际电机响应曲线。可以看到系统很快速,也就是很短时间内就达到目标值,这叫快速性。可以看到系统达到目标值之后震荡非常小,波动幅度很小,这叫稳定性。系统最后停留的速度基本上和目标线重叠,基本无偏差,这叫准确性。

关于PID的参数整定,通俗讲法叫做调参,到底如何整定,由于文章篇幅问题,后续文章我将详细讲解,欢迎大家持续关注。

后续持续更新系列高质量文章,码字不易,觉得写的不错欢迎关注、点赞、收藏以及提问。

标签: #单片机的pid控制 #pid函数