闭环控制系统




输入量(目标转速)就是我们的目标值,减去检测装置传回来的实际值(编码器测得的转速),就是实际偏差。将偏差输入到控制器(STM32),运算之后控制执行机构(驱动板和电机),输出被控量。

普通的位式控制算法

特点:
1.输出信号比较单一,要么是高电压要么是低电压。
2.输出信号的依据是,如果当前值小于设定值,输出值就设定高;如果当前值不小于设定值,输出值就设定低;此算法只是当前值与实际值的简单比较。
3.只考虑控制对象当前的状态值。
**缺点:**由于控制对象纯在惯性,(执行部件控制作用到控制对象上,不会导致控制对象立马变化,而是慢慢变化的现象叫惯性),所以,当当前值大于等于设定值时,输出值设定为低,但是由于惯性,当前值还会继续增大。然后由于此时输出值为低,所以当前值又逐渐减小,当发现当前值小于设定值时,输出值设定为高,但是由于惯性,当前值还会继续减小。这样就会导致,当前值永远在设定值上下波动,而不是刚好达到设定值。

PID控制算法



PID控制算法

思想
P、I、D实际上是同时考虑了当前偏差、历史偏差、最近(当前偏差的前两三次)偏差。然后把三种偏差进行线性叠加,形成输出值。
前面的系数K,实际起到一个放大器或者衰减器。

算法分析
假设传感器每1s读取一次当前值,第i秒记为Xi,并将所有采样的数据存储起来。
那么第k秒的当前偏差为
Ek可能大于、等于、小于0。

比例控制

积分控制
我们把所有采集到的当前偏差都相加。

当Sk>0,说明过去这段时间,大多数输出是未达标的;Sk=0的几率很小,说明历史大多数输出是达标的;Sk<0,说明过去这段时间,大多数输出是超标的;


不能单纯的用I控制,它必须配合P一起来控制,主要就是为了消除P控制的稳态误差。

在输出值第一次到达目标值之前,积分控制对系统是不利的。因为,他会把历史偏差累加为一个很大的值,那么若此时当前值恰好达标,却加上了这个积分项,那么明显就把输出量给超调了,然后再通过积分控制慢慢地衰减当前值,造成当前值在设定值上下震荡一会。

微分控制

只把最近两次的偏差进行处理,预测出将来偏差的变化趋势。

不能单纯的用D控制,它必须配合P一起来控制,主要就是为了在偏差接近0时(偏差的变化趋势等于0),抑制偏差的作用就变为0。



位置式和增量式PID算法


位置式PID算法


1.T为计算周期(采样周期),也是PID算法修正输出的速率,他不能小于控制周期(PWM信号的周期)。也不能太大,太大了会造成微分控制失效。此值不是固定的,要根据不同实际情况调整。
2.Ti为积分时间,是PI共同作用的时间;此值不是固定的,要根据不同实际情况调整。输出量第一次到达目标值之前,把Ti设置的大一点,让积分控制尽量不要影响到系统;当输出量第一次到达目标值之后,积分控制的作用才体现出来。
3.Td为微分时间,是PD共同作用的时间;此值不是固定的,要根据不同实际情况调整。


增量式PID算法


Ek为当前偏差值,E(k-1)为上次偏差值…

增量式PID速度闭环代码分析

在将PID用于电机控制时,我这个PID的输入参数是编码器的数值、目标位置,我的输出PWM是个什么东西呢?这个PWM可以是-1—+1的占空比,也可以是比较寄存器的数值,例如ARR是3000,PWM这个可以是1500,代表PWM占空比50%,那有的会问,例如我的encoder是1000,target是2000,那么pid.ek
= 1000,按照pid.kp = 10计算,那么pid.kp*pid.ek = 10000,也就是说这个输出pwm如果代表占空比-1–+1的话,远远大于它的范围,那是不是这个计算或者公式有问题呢?或者是不是pwm代表的意义不对呢?其实是没有关系的,因为按照计算10000大于1,PWM=1,那么完全按照占空比1运行,等到encoder=target时,pwm=0,电机就不再运动了,到达了目标位置;但是这里要提醒大家,encoder与target代表编码器数值,二者的差值肯定是整数,乘以pid.kp=10之后,肯定大于1,所以PWM始终是100%占空比,这样有可能时钟无法找到目标位置,所以pid.kp=10这个参数设置就不合理,比如设置pid.kp=0.001,则encoder与target差值如果在1000以内,PWM就可能在-1–+1之间,这样才能真正的起到调节作用,所以kp的值并不是大家随意乱设,要根据控制量的实际情况、输出值的实际意义,设定参数,脱离实际意义的盲目瞎设参数反而适得其反。
———————————————— 版权声明:本段来自CSDN博主「苏守坤」的原创文章,遵循CC 4.0
BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014453443/article/details/100573722

增量式和位置式PID的区别

增量式与位置式区别:
1增量式算法不需要做累加,控制量增量的确定仅与最近几次偏差采样值有关,计算误差对控制
量计算的影响较小。而位置式算法要用到过去偏差的累加值,容易产生较大的累加误差。

2增量式算法得出的是控制量的增量,例如在阀门控制中,只输出阀门开度的变化部分,误动作
影响小,必要时还可通过逻辑判断限制或禁止本次输出,不会严重影响系统的工作。 而位置式的输出直接对应对象的输出,因此对系统影响较大。

3增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。

4在进行PID控制时,位置式PID需要有积分限幅和输出限幅,而增量式PID只需输出限幅

位置式PID优缺点:
优点:
①位置式PID是一种非递推式算法,可直接控制执行机构(如平衡小车),u(k)的值和执行机构的实际位置(如小车当前角度)是一一对应的,因此在执行机构不带积分部件的对象中可以很好应用

缺点: ①每次输出均与过去的状态有关,计算时要对e(k)进行累加,运算工作量大。

增量式PID优缺点:
优点: ①误动作时影响小,必要时可用逻辑判断的方法去掉出错数据。
②手动/自动切换时冲击小,便于实现无扰动切换。当计算机故障时,仍能保持原值。
③算式中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关。

缺点: ①积分截断效应大,有稳态误差;

②溢出的影响大。有的被控对象用增量式则不太好; ————————————————
版权声明:本段来自CSDN博主「Z小旋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/as480133937/article/details/89508034

PID参数整定经验

位置式
位置型PID的参数整定过程一般是,先整定KP,然后整定KI,最后整定KD;
一般步骤

a.确定比例增益P   确定比例增益P
时,首先去掉PID的积分项和微分项,一般是令Ti->无穷大Td=0(具体见PID的参数设定说明),使PID为纯比例调节。输入设定为系统允许的最大值的60%70%,由0逐渐加大比例增益P,直至系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益P,设定PID的比例增益P为当前值的60%70%。比例增益P调试完成。
  b.确定积分时间常数Ti
  比例增益P确定后,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。积分时间常数Ti调试完成。
  c.确定微分时间常数Td   积分时间常数Td一般不用设定,为0即可。若要设定,与确定 P和Ti的方法相同,取不振荡时的30%。
  d.系统空载、带载联调,再对PID参数进行微调,直至满足要求。

增量式
对比位置型PID与增量型PID的数学表达式,可以发现位置型KP和增量型KI一样,位置型KI和增量型KD一样,位置型KD和增量型KP一样,如图51。这样,增量型PID应该先整定KI,然后整定KD,最后整定KP。这一点需要特别注意,弄错顺序的话会发现整定规律完全不适用的。
一般步骤

第1步:

首先只整定比例部分。比例系数KI由小变大,观察相应的系统响应,直到得到反应快,超调小的响应曲线。系统若无静差或静差已小到允许范围内,并且响应效果良好,那么只须用比例调节器即可。

第2步:

若稳态误差不能满足设计要求,则需加入积分控制。整定时先置KD为较小值,并将经第1步整定得到的KI减小些( 如缩小为原值的0.8倍
),然后增大KD,并使系统在保持良好动态响应的情况下,消除稳态误差。这种调整可根据响应曲线的状态,反复改变KI及KD,以期得到满意的控制过程。

第3步:

若使用比例-积分调节器消除了稳态误差,但动态过程仍不能满意,则可加入微分环节。在第2步整定的基础上,逐步增大KP,同时相应地改变KI和KD,逐步试凑以获得满意的调节效果。

【硬石科技】电机系列教学(基于STM32)——PID算法实现闭环控制相关推荐

  1. “药药切克闹”系列-基于STM32触摸屏的超级无敌智能电子密码锁(仿手机键盘26键设计,密码支持英文大写+英文小写+数字)

    项目名称:"药药切克闹"系列-基于STM32触摸屏的超级无敌智能电子密码锁(密码支持英文大写+英文小写+数字) CSDN:YANG-03                      ...

  2. 入门电机系列之4步进电机

    入门电机系列,基于STM32硬件 本文章学习借鉴于野火团队资料,以表感谢.官网http://products.embedfire.com/ 舵机的原理与应用. 文章目录 入门电机系列,基于STM32硬 ...

  3. 入门电机系列之3舵机

    入门电机系列,基于STM32硬件 本文章学习借鉴于野火团队资料,以表感谢.官网http://products.embedfire.com/ 舵机的原理与应用. 文章目录 入门电机系列,基于STM32硬 ...

  4. 入门电机系列之5编码器

    入门电机系列,基于STM32硬件 本文章学习借鉴于野火团队资料,以表感谢.官网http://products.embedfire.com/ 编码器的原理与应用. 提示:写完文章后,目录可以自动生成,如 ...

  5. 入门电机系列之1认识电机

    入门电机系列,基于STM32硬件 本文章学习借鉴于野火团队资料,以表感谢.官网http://products.embedfire.com/ 内容比较多,有一些名词之说明了部分,不理解的可以百度一下.哈 ...

  6. 入门电机系列之6PID 算法的原理与应用

    入门电机系列,基于STM32硬件 本文章学习借鉴于野火团队资料,以表感谢.官网http://products.embedfire.com/ 入门电机系列之6PID 算法的原理与应用. 提示:写完文章后 ...

  7. 基于STM32的四旋翼无人机项目(二):MPU6050姿态解算(含上位机3D姿态显示教学)

    前言:本文为手把手教学飞控核心知识点之一的姿态解算--MPU6050 姿态解算(飞控专栏第2篇).项目中飞行器使用 MPU6050 传感器对飞行器的姿态进行解算(四元数方法),搭配设计的卡尔曼滤波器与 ...

  8. 基于STM32系列芯片的 IAP实现的探索

    基于STM32系列芯片的 IAP实现的探索 什么是IAP? 如何实现IAP? 第一步:学习官方源代码 第二步:了解STM32芯片基本硬件参数 第三步.搞清除STM32内置Flash 第四步. STM3 ...

  9. STM32机器人控制开发教程No.3 使用遥控控制电机/舵机(基于HAL库)

    01 前言 本教程使用的机器人控制板拥有4个带编码器的电机接口,4个舵机接口,串口通信接口.SWD下载调试接口.航模遥控接口.USB5V输出接口以及方便与树莓派直接连接的40PIN接口等,板载资源丰富 ...

  10. 基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块+DHT11温湿度采集+MQ系列 烟雾及可燃气体+蜂鸣器+步进电机模拟窗帘+OLED液晶显示+

    ## **基于 STM32 的语音识别智能家居控制系统的设计(LD3320语音识别芯片+ESP8266 WIFI模块(阿里云 或ONENET或局域网)+DHT11温湿度采集+MQ系列 烟雾及可燃气体+ ...

最新文章

  1. 漫画 | TCP,一个悲伤的故事
  2. dropdownlist javascript 取得value text
  3. php连接mysql数据并查询
  4. Image、Byte[]、Bitmap相互转换
  5. ssm提交post_我用spring mvc做,用post方式提交,后台获取不到参数值,用get方式就可以,什么问题...
  6. 《零基础》MySQL 数据类型(八)
  7. 【开发记录】Linux常用命令记录(一)
  8. matlab求解lmi,Matlab的LMI工具箱中最优化问题
  9. Shell脚本常用判断
  10. Pointer 指针
  11. 点击button后改变文字_24. 教你零基础搭建小程序:小程序的常见组件(5)— button标签...
  12. WPF|一个比较简单带点设计的登录界面
  13. ArcGIS 软件中路网数据的制作,手把手教学
  14. 计算机课题推荐人意见,课题推荐人意见
  15. mysql 10张表左关联查询_mysql left join 左连接查询关联n多张表
  16. 动环监控系统的服务器配置,动环监控系统服务器维护
  17. 全网最详细charles抓包工具详细教程,实战教程(细致)
  18. 华为鸿蒙系统的技术特性,华为鸿蒙系统来了,还有这四大技术特性
  19. windows 7安装Docker 及问题解决方法
  20. 1.去色快捷键,2.怎么复制图层,并且偏移呢

热门文章

  1. python实现类似于visio_Visio类似的高性价比的替代软件
  2. Ubuntu ADB 环境变量配置
  3. ubuntu里面控制器放大缩小屏幕
  4. 毕业设计 嵌入式 智能温控风扇系统
  5. Testbed静态分析
  6. vue实现简单的日历
  7. 北京市小牛电动车选购指南
  8. 51单片机驱动8位数码管(74HC595驱动)滚动显示
  9. PostgreSQL 字典表设计
  10. wincc mysql_Wincc操作数据库SQLSERVER