STM32—PID控制在直流电机中的应用「建议收藏」

STM32—PID控制在直流电机中的应用「建议收藏」文章目录一.PID控制算法1.什么是PID2.PID系数的理解Ⅰ.比例(P)部分Ⅱ.积分(I)部分Ⅲ.微分(D)部分3.PID的数字化处理二.位置闭环控制三.速度闭环控制一.PID控制算法1.什么是PIDPID:Proportion-Integral-Differential在过程控制中,我们经常使用的一种算法就是PID算法了,所谓PID控制算法就是对偏差进行比例、积分、微分控制,来使偏差…

大家好,又见面了,我是你们的朋友全栈君。

一.PID控制算法

1.什么是PID

PID:Proportion-Integral-Differential

在过程控制中,我们经常使用的一种算法就是PID算法了,所谓PID控制算法就是对偏差进行比例、积分、微分控制,来使偏差趋于某一固定的值,PID核心由三个单元组成:比例单元(P)、积分单元(I)、微分单元(D),PID实际上就是误差控制。

PID控制系统(模拟)的框图如下:

在这里插入图片描述

2.PID系数的理解

理解PID的三个系数,可以结合PID调节时候的响应曲线,要使实际中的响应曲线趋近于理想状态下的响应曲线,无非就是三点灵魂:快速(P)、准确(I)、稳定(D),要想控制的变量保持在完美的状态,这三个灵魂就必须调整好。

以下分析中的:P、I、D都指的是PID的三个系数

下面从三个系数对整体控制的影响做出分析

Ⅰ.比例(P)部分

输入值一旦与目标值产生偏差e,就需要缩小偏差,P就是用来缩小偏差的,使控制量向减少偏差的方向改变,而且P越大,偏差缩小的速度就越快,所以P的作用就是使控制量更快地接近目标值

但是!十肇九快!!!P过大的时候,就容易刹不住,很容易超出目标值,当超出目标值时,又会反向朝目标值飞奔,然后又太快了,再次偏离目标值,然后又朝目标值…这样反反复复的在目标值附近震荡,这就是P太大的弊端:不够稳定。

所以,P大了虽然可以快速响应,但也容易产生震荡,破坏系统的稳定性,可以适当增大D来提高稳定性

Ⅱ.积分(I)部分

积分的表达式如下:

在这里插入图片描述

从其表达式中可以看出,只要存在偏差,积分结果就会不断增加,也就是控制作用会不断增加;当偏差为0时,积分结果是一个常数,此时控制作用才可能是一个稳定的值。

所以直观的来看,积分可以消除系统的静态偏差,因为一旦有误差,积分就会增加,系统就会做出反应,直到偏差为0,也就是积分保证了控制的准确性

积分的作用虽然会消除静态偏差,但是也会拉低系统的响应速度,就是说I对P有抑制作用

Ⅲ.微分(D)部分

上面说了,P过大会引起震荡,降低系统稳定性,可以通过提高D来减小震荡。

微分的作用就是根据偏差的变化趋势预先给出纠正!怎么个预先法呢?因为微分可以看作是求导,上过高中同鞋都知道:求导可以反映函数的变化趋势。所以,通过微分,可以对偏差的变化进行预判地抑制,防止 矫枉过。

微分的引入,有助于减小震荡,使系统趋于稳定,D越大,抑制P的效果就越强。

3.PID的数字化处理

由于计算机控制是一种采样控制,只能根据采样时刻的偏差值计算控制量,所以我们是通过软件实现控制算法的,要对PID进行离散化处理(也就是数字化处理),就是根据离散采样点的偏差值进行控制,在离散化处理后,相比于模拟控制由如下改变:

  • 由差分代替微分
  • 由累加代替积分

数字化处理后的PID系统如下:

在这里插入图片描述

采样的周期越小,就越接近模拟控制,控制的效果也就越好。

二.位置闭环控制

位置闭环控制,也叫位置式PID控制,就是传统的PID控制,控制的偏差逐渐接近0,从而使控制量趋于目标值。

对电机使用位置闭环控制的时候,就是控制电机的转动位置,通过编码器的脉冲累加测量电机的位置信息,与目标位置进行比较,得到偏差值,通过比例、积分、微分的PID算法进行控制,使偏差趋于0。

电机控制中,输出量就是电机控制模块输出的占空比,作用于电机转速,此时离散PID的公式如下:

在这里插入图片描述

其控制框图如下:

在这里插入图片描述

控制实现代码如下:

/* 返回输出 * Encoder为输入(编码器测量的信号,也就是电机转速) * Target为目标值 */
//KP、KI、KD为PID的系数
int Postition_PID( int Encoder, int Target )
{ 
   	//依次的变量代表:偏差、输出、偏差积分、偏差微分
	static float Bias,Pwm,Integral_bias,Last_bias;  
    Bias = Encoder-Target;//计算偏差
    Integral_bias += Bias;//计算偏差积分,累加
    Pwm = KP*Bias+KI*Integral_bias+KD*(Bias-Last_bias);//计算输出,根据PID
    Last_bias = Bias;//保存为上一次偏差
    return Pwm;//返回输出
}

在定时中断里实现PID控制,定时中断相当于离散的采样点,中断服务函数中可调用控制函数:

//中断中如下调用
Moto = Postition_PID( Encoder, Target );
//最终的控制落回到控制电机转速上
Set_Pwm( Moto );

最终的控制要落回到电机的控制上,也就是电机的转速控制——PWM控制。

位置控制的调节经验:先只使用P控制,逐渐增大P,系统震荡后加入微分控制D来抑制震荡,调整KD直至消除震荡,之后再根据系统对响应和静差的要求,调节P、I参数。

三.速度闭环控制

速度闭环控制也可叫增量式PID控制,与位置式PID控制不同,位置式PID输出的是控制量新的状态,而增量式PID输出的是控制量的增值,增量式PID的离散公式如下:

在这里插入图片描述
位置闭环控制是使电机准确转到某一位置,速度闭环控制是使电机以某一速度转动,在速度闭环控制里,我们只需要使用PI控制即可,所以简化后的公式如下:
在这里插入图片描述

注意:公式直接将控制量的增量加在上一次控制量的状态上了!!!

控制框图如下:

在这里插入图片描述

控制代码如下:

/* 返回输出 * Encoder为输入(编码器测量的信号,也就是电机转速) * Target为目标值 */
//KP、KI为PID的系数
int Incremental_PI( int Encoder, int Target )
{ 
   	//依次的变量代表:偏差、输出、偏差微分
	static float Bias,Pwm,Last_bias;  
    Bias = Encoder-Target;//计算偏差
    Pwm += KP*(Bias-Last_bias)+KI*Bias;//增量式PI
    Last_bias = Bias;//保存为上一次偏差
    return Pwm;//返回输出
}

在定时中断里实现PID控制,定时中断相当于离散的采样点,中断服务函数中可调用控制函数:

//中断中如下调用
Moto = Incremental_PI( Encoder, Target );
//最终的控制落回到控制电机转速上
Set_Pwm( Moto );

要注意速度闭环控制采用PI控制,公式与PID有所不同,输出的也是控制量的增量,这里将增量直接加在了上一次的状态量上,所以输出的还是控制量的新状态。

最后附上我找到的PID参数调整口诀:

常用口诀:

参数整定找最佳,从小到大顺序查

先是比例后积分,最后再把微分加

曲线振荡很频繁,比例度盘要放大

曲线漂浮绕大湾,比例度盘往小扳

曲线偏离回复慢,积分时间往下降

曲线波动周期长,积分时间再加长

曲线振荡频率快,先把微分降下来

动差大来波动慢。微分时间应加长

理想曲线两个波,前高后低4比1

一看二调多分析,调节质量不会低

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135527.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月4日 下午11:46
下一篇 2022年6月5日 上午6:00


相关推荐

  • sudo visudo 退出保存

    sudo visudo 退出保存环境 Ubuntu16 04TLS 说明 Linux 普通用户使用 sudo 权限每次都要输入密码 虽然提高了安全系数 但是长久以往会感觉很麻烦修改配置文件 执行 sudovisudo 找到如下授权 注释 adminALL ALL ALL 修改为新的授权 意思是不需要密码执行 adminALL ALL NOP

    2026年3月17日
    2
  • ArcGIS地图投影

    ArcGIS地图投影问题 shp 矢量原始数据坐标信息如下图 leaflet 或者 cesium 进行数据可视化必须是经纬度地理坐标 需要进行坐标转换 若地理坐标为 WGS84 通常进行定义投影到 WGS84 坐标下就可以了 即为反投影 现在这个方法行不通 我也很奇怪 所以通过要素中投影到 WGS84 地理坐标 即将坐标转换到 WGS84 坐标 并去掉投影坐标坐标 转为经纬度地理坐标

    2026年3月16日
    1
  • 论计算机发展史及展望_策略单元培训心得

    论计算机发展史及展望_策略单元培训心得一种对计算机发展史展开研究的策略(3页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9积分一种对计算机发展史展开研究的策略一种对计算机发展史展开研究的策略一种对计算机发展史展开研究的策略一、引言随着中国的开放,科学技术的国际交流日益深入,现代化意义上的计算机产品与技术被不断介绍并引入到国内,且在短时间内取得了迅.L.猛的发展。然而,作为…

    2022年10月18日
    5
  • Android listView用法详解

    Android listView用法详解1.前言在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。列表的显示需要三个元素:1.ListVeiw:用来展示列表的View。2.适配器:用来把数据映射到ListView上的中介。3.数据:被映射的字符串,图片,或者基本组件。2.listView的使用listVi

    2022年7月22日
    18
  • 最大矩阵和 leetcode_leetcode有效的括号

    最大矩阵和 leetcode_leetcode有效的括号给你一个二维矩阵 matrix 和一个整数 k ,矩阵大小为 m x n 由非负整数组成。矩阵中坐标 (a, b) 的 值 可由对所有满足 0 <= i <= a < m 且 0 <= j <= b < n 的元素 matrix[i][j](下标从 0 开始计数)执行异或运算得到。请你找出 matrix 的所有坐标中第 k 大的值(k 的值从 1 开始计数)。示例 1:输入:matrix = [[5,2],[1,6]], k = 1输出:7解释:坐标 (0,

    2022年8月9日
    10
  • SDIO接口简单描述

    SDIO接口简单描述转 https www cnblogs com hellokitty2 p 10981084 htmlSDIO 接口一 SDIO 简介 SDIO 接口是在 SD 内存卡接口的基础上发展起来的接口 SDIO 接口兼容以前的 SD 内存卡 并且可以连接 SDIO 接口的设备 SDIO1 0 标准定义了两种类型的 SDIO 卡 1 全速的 SDIO 卡 传输率可以超过 100Mbps 2 低速的 SDIO 卡 支援的时脉速率

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号