技术文档

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

小编 2024-10-17 技术文档 23 0

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

今天我们来聊一聊直流电机速度控制,不过别担心,我们会用最通俗易懂的语言来讲解这个在工程和机器人领域中非常重要的应用案例,以此为例让你一文搞懂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的参数整定,通俗讲法叫做调参,到底如何整定,由于文章篇幅问题,后续文章我将详细讲解,欢迎大家持续关注。

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

舵机直流电机控制原理

本文简单介绍在舵机中的直流电机控制原理和方法。下图是控制器原理图,单片机选择stm32f030,驱动选择fm116b,ldo为lp2992,这个可以任意选择兼容的芯片,电压反馈端用tl431进行分流稳压,确保反馈电阻器供电电压的稳定。

舵机的工作原理很简单,处理器实时获取电阻器的ADC值来计算获得当前的角度,如果与预期的角度一致,就不做任何操作,保持当前状态;如果与预期角度不同,就计算出当前角度与预期角度的差值,然后通过PID算法计算出控制量,根据控制量输出PWM控制电机旋转,随着电机旋转,实时角度会越来越接近预期值,控制输出也会越来越小,直到最后为0,就转到了预期的位置。

本方案通过I2C接口获取控制命令,可以实现比传统模拟方式更多的功能。

PWM1和PWM2控制电机转速和方向,当PWM1输出高电平而PWM2输出低电平就是正转,反之就是反转,如果二者都输出低电平就停止。

ADC值需要标定,确定舵机角度为0和180时的ADC采样值,这样才能通过比例计算出任意ADC值对应的角度。

PID这里,ADC得到的角度减去预期角度就是角度差,乘以比例系数构成比例项;角度差的和乘以积分系数构成积分项,积分项要设置上限,防止该值过大影响响应速度;本次角度差与上一次的角度差的差乘以微分系数构成微分项(这里用固定的时间采样,dt固定,故不需要计算变化率了)。三者之和就是预期的输出值,再根据输出限制得到最终的输出值,该值可正可负,注意变量选取要合适。

具体的代码可以查看:

https://github.com/gcrisis/ElectronBot/tree/trans_blocking/2.Firmware/ServoDrive-fw-ll

相关问答

如何用51 单片机 控制 电机 和水泵?

谢谢邀请,作为一名单片机开发工程师,和大家讲一讲电机控制的几个技术要点。电机是自动化等领域必须要用到的电子器件,而电机控制也就应用很广泛,专业技术要求...

单片机 控制可控硅无级调压的原理?

可控硅无极调压的工作原理根据单片机PID温控仪表或带有变送输出功能的智能仪表其连续输出的电流值大小,改变可控硅电压调整器触发器输出脉冲的导通角大小,从而...

问一下!!怎么学习步进 电机 以及步进 电机 驱动器。?

[回答]上某宝网站,搜索L298N步进电机驱动,或ULN2003步进电机驱动,这是两种不同形式的驱动,也是网上卖的最多的学习入门型驱动,然后找店主问一下,配套...

步进 电机 驱动器和步进 电机 怎么接线?

[回答]TS5740A42A步进电机一般有两相,三相,五相步进电机。接TD4845驱动器一般有说明书。不能随便接。因为步进电机和普通电机不同,里面至少两个绕组。接错...

plc实现 电机 断续前进的优缺点?

PLC编程,比较简单,而单片机编程不易掌握。PLC是生产商将其功能模块化了,并提供专用的编程软件,主要用于开关量的控制,其可靠性比较高。单片机就是一个没有外...

温度表自整定是什么原理?

1、温控议自整定就是温控器根据系统特性自动计算出PID控制的三个参数,以达到最合理也是最准确的控制的目的,当然也可以通过人为设定PID参数。表的设置里有启用...

【220V变频器带动三相异步电动机的原理是什么?】作业帮

[回答]请你了解一下变频器原理就知道了.变频器实际上就是一个逆变器.它首先是将交流电变为直流电.然后用电子元件对直流电进行开关.变为交流电.一般功率...

步进 电机 驱动器和步进 电机 怎么接线?

[回答]上某宝网站,搜索L298N步进电机驱动,或ULN2003步进电机驱动,这是两种不同形式的驱动,也是网上卖的最多的学习入门型驱动,然后找店主问一下,配套...

怎么查看手机芯片型号-ZOL问答

无论用哪种单片机都能很方便地实现你要求的功能。但是对于没有AD转换功能的单片机需要加一片AD转换芯片。需要编程。对于正弦波,其有效值可以测得峰值后,除以...

两个电磁阀怎么控制一开一关?

首先一般的电磁阀你是无法控制开口大小的,比例阀才行,一般的电磁阀只能控制通断。以我在学校时的经验,单片机的输出不能直接控制电磁阀,驱动能力不够,可以...

猜你喜欢