文章目录

  • 前言
  • PID算法
  • PID算法的形成
  • P算法,即比例控制算法:
  • I算法,即积分控制算法
  • D算法,即微分控制算法
  • PID总体的数学模型:
  • 基于单片机的PID控制算法:
  • 单片机中的PID算法的表达式:
  • 采样周期
  • 结语

前言

如何学习PID控制,最开始需要先抛开各种软硬件,单纯从数学上进行分析,弄懂底层的控制原理是什么?理解清楚后,无非把数学公式变成代码。剩下就是不断的实践,来确定三个参数,使控制结果更加准确。

开始介绍之前需要一个例子,我们就以电机控制为例,我们设置所要到达的速度为100。假如我们没有使用PID控制算法,就单纯电机通断一条线,刚开始的时候速度没有达到100,那电机肯定是通,速度就往100冲,当速到超过100时,电机断,速度掉到100以下,然后电机再通,如此反复,使得速度一直在100左右波动。缺点:控制不稳定,没法维持在100;电机一直处于通断状态,十分不稳定。这就需要算法来进行调节,而用到的就是PID算法

PID算法



将偏差的比例(Proportion)、积分(Integral)和微分(Differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称 PID 控制器

在理解之前我们要搞清楚一个点就是:我们通过PID算法对传感器采集回来的数据进行运算,最后会输出一个值,而这个值就是用来控制PWM的占空比,从来控制电机的转速,这样就可以使控制达到准确、平滑的特点。

PID算法的形成

P算法,即比例控制算法:

分析:
1、从开机以来,传感器会采集到一系列的数据,存放到存储器中构成一串序列X1,X2,X3,X4…X(K-2),X(K-1),X(K),在例子当中也就电机编码器会采集到一些列的电机速度;

2、每次传感器采集到一个Xk都会与我们最开始的设定值相减即Ek=Sv-Xk;
当Ek>0时,表示控制未达标;当Ek=0时,表示正好达标;当Ek<0时,表示已经超标。
同时我们引入一个系数Kp;

公式表示为:Pout=Kp*Ek+OUT0(为什么要有Kp呢,这样我们才能通过调整系数来改变P算法在PID三个算法中的比重;为什么要有OUT0呢,这样当EK=0时,我们还能输出一定量的占空比来维持电机转动,而不至于让电机停止转动)

这个P算法怎么理解呢?
P算法的特点就是它只考虑当前的状态,通过与设定值相减的值来判断我们要给PWM多少占空比。当Ek>0时表示当前控制位达标,那这时我们就要加大PWM的占空比。当Ek<0时,表示已经超标,这是我们就要减小占空比。当EK=0时表示正好达标,此时P算法的缺点也就出来了,当我们达标了,我们算法要干嘛?不知道!所以此时整个系统是失控的。也就是P算法的缺点就在于它只能在有误差的情况下运行,当没有误差的情况它就失控了!
为什么叫比例算法:因为它前面有一个比例系数,我们可以通过调节比例系数,来控制输出的大小,因此类似与比例运算。

I算法,即积分控制算法

我们把运算得到的一系列EK数据存放到存储器中构成一串序列E1,E2,E3,E4...E(K-2),E(K-1),E(K),我们把它成为历史偏差序列. 令SK=E1+E2+E3+E4+...+E(K-2)+E(K-1)+E(K),当SK>0,表示过去这段时间的大部分时间都不达标;当SK=0,表示过去大部分时间达标;当SK<0,表示过去这段时间大多时间超标; 引入公式:Iout=Kp*Sk+OUT0;(Kp和OUT0存在原因和P算法公式一样) 如何理解I算法? I算法的特点就是它只考虑历史的状态,通过SK值来判断我们要给PWM多少占空比。当SK>0时表示过去这段时间的大部分时间都不达标,那这时我们就要加大PWM的占空比。当SK<0时,表示已经超标,这是我们就要减小占空比。当SK=0时表示正好达标。那么I算法有什么缺点吗?有,它太依赖历史数据了,很久以前的数据也会干扰现在的控制,这是I算法最大的缺点。 举个例子:比如我们刚开机,在第一次达到设置值之前,我们可以知道EK都是大于0的,SK都是大于0的,那么在传感器传回来的值是设置时,此时根据I算法判断SK>0,所以要加大PWM输出,可是我们现在已经是达到稳定值了,所以也就是会产生过冲现象。这种现象通常是怎么解决,就是利用积分分离,也就是另I算法权重为0.

为什么叫积分算法?因为我们进行的是对偏差求和的运算,类似积分运算。

D算法,即微分控制算法

引入DK=EK-E(K-1),因为EK与E(K-1)之间的时间间隔相同,当DK>0时,表示偏差有增大的趋势,当DK<0时,表示偏差有减小的趋势,当DK=0,表示偏差无增大或减小的趋势。

引入公式:Dout0=KP*DK+OUT0;

如何理解D算法?
D算法的特点就是它只考虑偏差EK有没有变大趋势,偏差存不存在不是D算法管的内容,举个例子,比如平衡车受到碰撞,突然要倒了,那种情况D算法就起了重要作用。那么D算法有什么缺点吗?有,它的控制是在误差一直存在的情况下进行,所以它不能单独对系统进行控制。

为什么叫微分算法?因为我们求的是变化率,类似进行微分运算。

PID总体的数学模型:

基于单片机的PID控制算法:

1、SK的处理:

这个公式怎么理解?
(1)、T:计算周期(采样周期)这个很重要,因为我们的程序会对传感器采集回来的数据进行PID算法运算,运算完会送到PWM上面。但是如果我们上一次的PWM还没调控完,算法就已经送来另一个控制PWM占空比的数,这时不就矛盾了吗。所以我们要保证每次传感器采集到的数据都能加到PWM上面真正起作用,就要控制T的大小。
(2)、Ti:积分时间常数,通常可以通过设置按钮进行调控。Ti值越大,SK越小,相应该算法所占权重就小。

2、DK的处理:

这个公式怎么理解?
(1)、T:计算周期,与上面一样;
(2)、Td:微分常数,同样的是通过控制其大小,来控制该算法所占的权重。

单片机中的PID算法的表达式:

1、位置式PID算法:

这种算法的缺点是:由于全量输出,所以每次输出均与过去状态有关,计算时要对EK进行累加,工作量大。并 且,因为计算机输出的对应的是执行机构的实际位置,如果计算机出现故障,输出的将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故,这在实际生产际中是不允许的。

2、增量式PID算法:(计算出的是控制量的增加值)

特点:如果计算机控制系统采用恒定的采样周期 T ,一旦确定 A、 B、 C,只要使用前后三次测量的偏差值,就可以求出控制量。增量式 PID 控制算法与位置式 PID 算法相比,计算量小的多,因此在实际中得到广泛的应用。

而位置式 PID 控制算法也可以通过增量式控制算法推出递推计算公式:
u = u + △u
上式就是目前在计算机控制中广泛应用的数字递推 PID 控制算法

采样周期

采样周期的选择
香农(Shannon) 采样定律 :为不失真地复现信号的变化,采样频率至少应大于或等于连续信号最高频率分量的二倍。根据采样定律可以确定采样周期的上限值。实际采样周期的选择还要受到多方面因素的影响,不同的系统采样周期应根据具体情况来选择。
采样周期的选择,通常按照过程特性与干扰大小适当来选取采样周期:即对于响应快、(如流量、压力) 波动 大、易受干扰的过程,应选取较短的采样周期;反之,当过程响应慢(如温度、 成份)、滞后大时,可选取较长的采样周期。 采样周期的选取应与 PID 参数的整定进行综合考虑, 采样周期应远小于过程的扰动信号的周期,在执行器的响应速度比较慢时,过小的采样周期将失去意义,因此可适当选大一点;在计算机运算速度允许的条件下,采样周期短, 则控制品质好;当过程的纯滞后时间较长时, 一般选取采样周期为纯滞后时间的 1/4~1/8。

结语

大家可以收藏!!!顺便帮我点个赞,给我点鼓励!

【平衡车】PID控制原理到底如何理解?建议收藏!相关推荐

  1. [单片机学习笔记](35):串级PID算法应用剖析、通过串口控制电机、MPU6050获取平衡车姿态、自制平衡车PID算法程序设计

    串级PID算法应用剖析 这是经过给队友讲解串级PID的程序的之后的进一步的理解总结. 内环的实际值,取决于你能测出什么值给内环.而内环的输入就是内环误差 内环的输出值,是内环误差(内环目标值-内环实际 ...

  2. 浅谈两轮平衡车的控制原理

    前言:在IT行业摸爬滚打了好几年,好不容易从学生熬成了社会人士,通过自己的不断努力又从社会人士熬成了学生.这几年的修行,同道博友给了我很多的帮助,很早之前就有写博客的想法,想借自己绵薄之力来回馈一下默 ...

  3. 直立平衡车PID控制策略以及数据平滑算法

    在某些场合下,如果我们把一个突变的数据直接加到一个已经稳定的系统中,那么这个系统可能会很难再次达到稳定,这个时候就需要对突变的数据进行平滑处理,逐渐的加大.可能这样说不太容易理解,举个例子,最近在做一 ...

  4. 玩转OpenHarmony PID:教你打造两轮平衡车

    目录 简介 硬件配置资源 原理概括 PID算法介绍 两步搭建样例工程 关键算法讲解 直立环控制算法: 速度环控制算法: 转向环控制算法: 总结 相关链接 简介 此次为大家带来的是OpenAtom Op ...

  5. pid算法通俗解释,平衡车,倒立摆,适合不理解PID算法的人来看!

                        先插句广告,本人QQ522414928,不熟悉PID算法的可以一起交流学习,随时在线 http://liuxinyu520zhuanshu.qzone.qq.c ...

  6. 三天让车立起来!STM32平衡车入门PID —— 第二天(软件算法)

    说明:本文章适用于STM32初学者,想完成一个好玩且有深度的项目但不知道从何下手的同学. 平衡车是我入门STM32的第一个实战项目,前前后后和我搭硬件的队友路总(硬件大佬,专注于PCB画板)搭了有七八 ...

  7. HAL库版STM32双轮自平衡车(一) ———代码思路和PID基础精讲

    系列文章目录 HAL库版STM32双轮自平衡车(一) ---代码思路和PID的简单介绍(本篇) HAL库版STM32双轮自平衡车(二) --- CubeMX的配置.原理图接线.物料准备 HAL库版ST ...

  8. 平衡车直立PID调节总结

    苦战一周,终于使平衡小车站了起来,PID无疑是我从学习板子至今遇到最困难的东西了,并不是说它原理有多么复杂,只是想让小车的效果更佳,调参的过程无疑是漫长而艰难的. 连续调了俩天的参数后,今天我的小车终 ...

  9. pid算法(平衡车+风力摆)

    前段时间做了一辆平衡车,移植学长的代码,虽然做出来了,但是对于其中的pid控制还是不熟,这几天又重新研究了一下,现在来做一个总结,也供大家学习. 1.为什么要用pid 1.PID即:Proportio ...

最新文章

  1. java sqlite使用小记
  2. mysql自动备份与还原
  3. CryptAPI和openssl交互使用
  4. springboot jar服务器运行后无法请求_Spring boot、微服务、OAuth、OpenID的爱恨情仇!...
  5. javascript 对象方法、类方法、原型方法
  6. [云炬创业学笔记]第三章商业创意的发掘与评估测试1
  7. kaggle notebook中使用git lfs
  8. UML模型中的图-实现图【组件图、配置图】
  9. Unity 协程深入解析与原理
  10. Spring.NET学习笔记17——事务传播行为(基础篇) Level 200
  11. 【Codeforces Round #546 (Div. 2) E】Nastya Hasn't Written a Legend【线段树】
  12. 查看C语言库函数源码
  13. 波长间隔与频率间隔换算
  14. 怎么做到css和html分开,CSS结构与表现分离怎么实现?
  15. 计算广告——搜索广告技术初窥
  16. 从魔兽玩家到区块链领袖,V神是如何打造出区块链2.0代表的以太坊
  17. iOS SDWebImage详细介绍
  18. Taro跨端开发探索19——商城小程序确认订单页面开发
  19. HTML5 form表单 调查问卷制作
  20. OCI runtime create failed: container_linux.go:380

热门文章

  1. 京东2017年4月7日笔试编程原题解析(站队、终结者C)
  2. 简单讲解前序遍历,中序遍历,后序遍历和层次遍历
  3. 先序遍历、中序遍历、后序遍历
  4. 【一日一logo_day_35】chi
  5. 完全限定域名(fully qualified domain name,FQDN,笔记)
  6. 大数据-什么是大数据?大数据的相关概念
  7. Expert 诊断优化系列------------------内存不够用么?
  8. SP服务商Java短信平台的软件模型和实现(吴宏杰,赵雷,杨季文,苏州大学计算机科学和技术学院)...
  9. solr中英文分词模糊查询
  10. 为什么去开发一个MLSQL