STM32平衡小车 pid简单学习

news2024/11/13 11:33:00

自动控制系统

自动控制系统可分为开环控制系统和闭环控制系统。

 1、开环控制系统
开环控制系统(open-loop control system)指被控对象的输出(被控制量)对控制器(controller)的输出没有影响。在这种控制系统中,不依赖将被控量反送回来以形成任何闭环回路。

2、闭环控制系统

  闭环控制系统(closed-loop control system)的特点是系统被控对象的输出(被控制量)会反送回来影响控制器的输出,形成一个或多个闭环。闭环控制系统有正反馈和负反馈,若反馈信号与系统给定值信号相反,则称为负反馈( Negative Feedback),若极性相同,则称为正反馈,一般闭环控制系统均采用负反馈,又称负反馈控制系统。

什么是pid控制器

        将偏差的比例(Proportion)、积分 (Integral) 和微分(Differential) 通过线性组合构成控制量用这一控制量对被控对象进行控制,这样的控制器称 PID 控制器。简单的说,根据给定值和实际输出值构成控制偏差,将偏差按比例、积分和微分通过线性组合构成控制量,对被控对象进行控制。常规PID控制器作为一种线性控制器,也就是一种闭环反馈控制器。

        这么说把,pid就是一种根据反馈,也就是输出量,然后去调整输入量大小的一种控制器,像我们人的话,是有五感去充当反馈的,例如你想喝一杯温水,这时桌子上有一杯水,那你怎么去判断,这杯水是不是你想要的温度呢,最简单的就是用手去摸,是吧,然后当你感觉到了温度大小大概了,你再去说,如果是冰水就加热,如果是热水就放凉,如果是温水就喝了,这个过程就是反馈,可是机器是没有五感的,这就需要我们去赋予它了,也就是给与它反馈,让机器能根据反馈传来的数据,不断地去调整输入量。

控制原理

        常规PID控制系统原理如图1所示,这是一个典型的单位负反馈控制系统。系统由PID控制器和被控对象组成:

计算公式

系统图像分析

 在介绍pid算法之前要先介绍阶跃响应,阶跃响应是当输入信号,从零跳变为一之后,系统的输出曲线响应,如下图所示:

 红线就是系统的输出响应,可以看到它经过一段时间的上升之后。逐渐稳定到1附近。

其实上图就是一个系统,有输入,有输出,那么我们如何根据这个图来判断我们设计的这个系统的性能好坏呢。

可以通过一些系统性能指标来评价系统阶响应的好坏:

一. 超调:overshoot

它是指响应超出稳态值的最大偏移量与稳态值之比

二. 上升时间:rise time

是指的响应曲线从10%上升到稳态值90%所需的时间,在上图中就是指rise time。

三. 稳定时间:seeting time

就是指响应曲线到达稳定值附近,比如正负-5%左右,并不在超过这一段误差范围之外的最小时间,也就是图中的setting time,到达setting time之后,就可以认为系统基本达到稳定状态了。

四. 稳态误差:steady-state error

它也叫静态误差或者静差,它是指的稳态值与设定值之间的误差。

如果我们要控制无人小车,要让它比小车准确的前进三米,那么它的稳态误差就是它实际行驶的距离与设定值三米之间的差距,上升时间就是指距离值的10%,也就是0.3米上升到2.7米的行驶时间,稳定时间就是指它稳定在三米附近的时间。 我们需要设计一个反馈控制器,目的是使原本性能参数不太好的性能曲线变成理想状态的性能曲线,也就是说它的上升时间和稳定时间都要尽可能小,并且要消除他的稳态值与它的设定值之间的误差。

        pid也叫比例积分微分控制器,比例(Proportion)、积分 (Integral) 、微分(Differential),简称就是pid了嘛,回到上面那个图,我们也可以看到,一个常规的pid控制器由三个控制器组成,p控制器是最基础,在其基础上可以加上i控制器或者d控制器来形成pi或者pd控制器,也可以三种控制器同时使用,也就是最后的pid控制器,下面分别对这三种控制器进行详细介绍。

P、I、D控制器介绍

P控制器介绍

P(比例)控制器是最简单的控制器,P英文全称Proportion(比例),也就是比例的意思,比例控制器的基本思想就是对系统的误差(也就是反馈得到的值和我们期望的值的差)呈上一个比例因子kp,从而得到它的控制量输出o,也就是利用误差的正负和大小作出成比例的反应, 比例因子kp,可以得到相应o值的正负和大小,输出量的大小与输入误差信号的大小成比例关系的一种控制。 公式是:O=Kp*e 。

假设让无人小车前进3m,p控制器输出pwm波的占空比Duty_p,Duty_p =Kp*error,就是Duty_p等于误差乘以kp(比例因子)。加上p控制器之后,系统响应曲线就可以变成下图所示的蓝色曲线。

         可以看到p控制器减少了上升时间和稳态误差,但是系统也有本身没有任何超调变成了有一定的超调量,也就是说p控制器增加了系统的超调量。

        上图显示的是p控制器中不同的比例因子Kp,kp所对应的三条响应曲线,其中蓝色是p=5的情况,红色是p=10的情况,橙色是p=20的情况,可以看出kp值越大上升时间也就越快,稳态误差越小,但是它的超调量也会随之增大。 通过简单的改变比例系数kp是不能消除系统震荡效果,并且kp值越大,系统震荡的幅度也在增大。也就是通过p控制器对误差所产生的修正会使系统在接近理想状态时产生一个超越稳态值的冲量并产生震荡。

D控制器介绍

        要解决震荡,就需要对系统接近理想状态时的动量进行修正。(动量=质量 x 速度) ,也就需要对速度进行修正,使系统在接近理想状态时,为了让他更容易稳定下来,我们要将速度值尽量减小,这就需要用到误差的导数,因为速度的本质就是位移的导数,而这里的误差就是位移值之差,所以速度也可以认为是误差的导数(O=Kd* de/dt),我们需要用它来对输出控制量进行进一步的修正,也就是引入了微分控制。

        它可以利用误差的导数,也就是误差的变化率来修正pwm波的占空比,所以现在duty_pd等于误差乘以比例因子kp再加上误差减去上一次误差的变化量乘以一个微分系数kd(Dudy_pd=Kp*error+Kd*(error-last_error))。它们的响应曲线如下图所示:

 蓝线是之前加入p控制器的响应曲线,红线是在pd控制下的响应曲线,可以看出Pd控制器的使用使得超调量相对之前减少了很多,而且稳定时间也有所减少。

        其实比例控制器是一种事后调节,它是在发生了误差之后再进行调节,微分控制器是事前进行调节,就是超前预测控制,它在误差有减小趋势的时候,就是这次误差小于上一次误差时,加入d控制器会使得它的输出变小,从而避免过度控制所产生的超调,当误差有增大的趋势时,也就是说这一次的误差大于上次的误差,d控制器会使得输出更大一些,从而抑制误差的增长趋势,加快系统的运动速度使得调节时间减小。

        同时也可以发现,此时其实系统还存在稳态误差,你会发现我们怎么去调我们得到的反馈值和我们的期望值始终存在一定的误差、为了消除这一点我们需要引入另外一种控制器,也就是积分控制器来改善控制系统,它可以记录自己前面一些时刻的误差,尤其有重复性的,并且值比较固定的误差,特别是稳态误差,它可以将这些误差累加起来,当达到一定阈值,也就是说足够大的时候,系统就会做出一些补偿或者修正。 所以此时Pi控制器的输出也就是pwm波的占空比,(Dudy_pi=Kp*error+Ki*∑error)Dudy_pi等于误差乘以比例因子kp再加上前一段时间的误差之和乘以积分因子Ki,下图曲线是三种不同控制器下的响应曲线:

 绿线和蓝线分别是之前的pd和p控制器所对应的响应曲线,红线是pid控制器所对应的响应曲线,加入了积分控制器之后,系统没有了稳态误差,但是也增加了一定超调量。 所以i积分控制器的主要作用是消除静态误差,使系统最后的稳态值和设定的值之间没有任何误差,同时积分作用的强弱也取决于积分时间常数,如果积分时间常数越大,积分项也会越慢,控制调节效率也就越弱。 综合考虑的所有因素,考虑到误差的变化率以及消除误差的因素,我们可以将这三种控制器全部都用上,也就是同时对误差进行比例积分和微分运算,它的系统响应如下图所示:

 

总结

三个基本参数 Kp,Ki,Kd.在实际控制中的作用:

比例调节作用:是按比例反应系统的偏差,系统一旦出现了偏差,比例调节立即产生调节作用用以减少偏差。比例作用大,可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至造成系统的不稳定。
积分调节作用:是使系统消除稳态误差,提高无差度。因为有误差,积分调节就进行,直至无差.积分调节停止,积分调节输出一常值。积分作用的强弱取决与积分时间常数 Ti,Ti 越小,积分作用就越强。反之 Ti 大则积分作用弱,加入积分调节可使系统稳定性下降,动态响应变慢。积分作用常与另两种调节规律结合,组成 PI 调节器或PID 调节器。

微分调节作用:微分作用反映系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势,因此能产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除。因此,可以改善系统的动态性能。在微分时间选择合适情况下,可以减少超调,减少调节时间。微分作用对噪声干扰有放大作用,因此过强的加微分调节,对系统抗干扰不利。此外,微分反应的是变化率,而当输入没有变化时,微分作用输出为零。微分作用不能单独使用,需要与另外两种调节规律相结合,组成PD 或PID 控制器。

典型的两种pid控制算法

PID控制公式

其中:

  • u(t)为控制器输出的控制量;(输出)

  • e(t)为偏差信号,它等于给定量与输出量之差;(输入)

  • KP 为比例系数;(对应参数 P)

  • TI 为积分时间常数;(对应参数I)

  • TD 为微分时间常数。(对应参数 D) 

数字 PID 控制算法通常分为位置式 PID 控制算法和增量式 PID 控制算法。  

位置式 PID 算法 

 e(k): 用户设定的值(目标值) -  控制对象的当前的状态值 

  • 比例P :    e(k)

  • 积分I :   ∑e(i)     误差的累加

  • 微分D :  e(k) - e(k-1)  这次误差-上次误差

也就是位置式PID是当前系统的实际位置,与你想要达到的预期位置的偏差,进行PID控制

        因为有误差积分 ∑e(i)  一直累加,也就是当前的输出u(k)与过去的所有状态都有关系,用到了误差的累加值;(误差e会有误差累加),输出的u(k)对应的是执行机构的实际位置,一旦控制输出出错(控制对象的当前的状态值出现问题 ),u(k)的大幅变化会引起系统的大幅变化

        并且位置式PID在积分项达到饱和时,误差仍然会在积分作用下继续累积,一旦误差开始反向变化,系统需要一定时间从饱和区退出,所以在u(k)达到最大和最小时,要停止积分作用,并且要有积分限幅和输出限幅

        所以在使用位置式PID时,一般我们直接使用PD控制,而位置式 PID 适用于执行机构不带积分部件的对象,如舵机和平衡小车的直立和温控系统的控制。

增量式PID

  • 比例P :    e(k)-e(k-1)   这次误差-上次误差

  • 积分I :   e(i) 误差   

  • 微分D :  e(k) - 2e(k-1)+e(k-2)   这次误差-2*上次误差+上上次误差

增量式PID根据公式可以很好地看出,一旦确定了 KP、TI  、TD,只要使用前后三次测量值的偏差, 即可由公式求出控制增量。

而得出的控制量▲u(k)对应的是近几次位置误差的增量,而不是对应与实际位置的偏差,没有误差累加。也就是说,增量式PID中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果,并且在系统发生问题时,增量式不会严重影响系统的工作

总结:

增量型 PID,是对位置型 PID 取增量,这时控制器输出的是相邻两次采样时刻所计算的位置值之差,得到的结果是增量,即在上一次的控制量的基础上需要增加(负值意味减少)控制量。

增量式与位置式区别

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

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

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

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

位置式PID优缺点:

优点:

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

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

增量式PID优缺点:

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

②溢出的影响大。有的被控对象用增量式则不太好;

调参口诀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++入门(下)

C入门(下) 对于C的基础语法的讲解,由想要实现多次重复的函数,引出宏函数和inline的内联函数的对比,对于inline的讲解和运用,在后,C语言中的NULL和C中独特的nullptr的相比两者的比较&#xff0c…

kong(4):限流配置

Kong 提供了 Rate Limiting 插件,实现对请求的限流功能,避免过大的请求量过大,将后端服务打挂。 Rate Limiting 支持秒/分/小时/日/月/年多种时间维度的限流,并且可以组合使用。例如说:限制每秒最 多 100 次请求&…

Windows Server 2012R2 安装mysql 丢失VCRUNTIME140_1.dll------亲测

无去启动此程序,因为计算机中丢失VCRUNTIME140_1.dll。尝试重新安装该程序以解决此问题。 1.解决思路 说到底还是缺少底层的依赖,先下载依赖然后安装,最后安装vc。要不然vc是安装不成功。 下载安装--一下的插件 安装过程中需要重启一次电脑。 注意:必…

Android LoaderManager AsyncTaskLoader加载全部图片RecyclerView BigImageView呈现,Java(1)

Android LoaderManager AsyncTaskLoader加载全部图片RecyclerView BigImageView呈现&#xff0c;Java&#xff08;1&#xff09; 权限&#xff1a; <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:n…

VUE3子组件-业务代码优化

Vue3子组件 1.简介 Vue 3组件的主要优势之一就是它们可以帮助你将你的应用程序分解成可维护和可重用的部分。当你在应用程序中多次使用相同的代码时&#xff0c;你可以将它们抽象成一个组件&#xff0c;然后在应用程序中的多个地方使用该组件&#xff0c;而不必每次都编写相同…

5年了,终于入职阿里测试岗位,直接涨薪30K...

前言 本科毕业后就一直从事软件测试的工作&#xff0c;和多数人一样&#xff0c;最开始从事功能测试的工作&#xff0c;看着自己的同学一步一步往上走&#xff0c;自己还是在原地踏步&#xff0c;说实话这不是自己想要的状态。 一年半后开始沪漂生活&#xff0c;又摸爬滚打了…

阿里巴巴软件测试面试过了,起薪20k

普通二本计算机专业毕业&#xff0c;从毕业后&#xff0c;第一份接触测试的工作是在一家通讯小公司&#xff0c;大部分接触的工作是以功能测试为主&#xff0c;一直都是几千块钱工资&#xff0c;还一度被派出差&#xff0c;以及兼职各种产品、运维、运营的活&#xff0c;感觉自…

Cleer ARC II 音弧

戴上Cleer ARC II 音弧解放双耳&#xff0c;享受更自由的音符 用惯了各种入耳式耳机&#xff0c;换上开放式耳机&#xff0c;戴着确实更加舒服&#xff0c;特别是我现在用的这款Cleer ARC II 音弧&#xff0c;戴上还不容易掉&#xff0c;很适合运动使用。这款耳机采用一种耳挂佩…

JavaEE1(4/23)

目录 1.计算机CPU 2.CPU和GPU的区别 3.线程 4.内存是如何分配的 5.进程的调度 6.线程和进程的区别和联系&#xff1f; 1.计算机CPU 主频 &#xff1a;运算速度 3.73Ghz 表示每秒计算37.3亿次 基准速度&#xff1a;最小计算速度 睿频&#xff1a;最大运行速度 超频&…

【头歌C语言程序设计】结构体解答

写在前面 这道题总体来说还是偏难的&#xff0c;如果只看代码比较难以理解&#xff0c;当结构体的文章发出后&#xff0c;就有许多小伙伴问我这个问题&#xff0c;我开始意识到&#xff0c;可能我对这道题所作的解答还不够&#xff08;不装了&#x1f601;&#xff0c;根本没有…

Python进阶篇(三)-- TCP套接字与UDP套接字编程

1 Python3 网络编程 1.1 介绍 本文将首先利用 Python 实现面向TCP连接的套接字编程基础知识&#xff1a;如何创建套接字&#xff0c;将其绑定到特定的地址和端口&#xff0c;以及发送和接收数据包。其次还将学习 HTTP 协议格式的相关知识。在此基础上&#xff0c;本篇将用 Pyt…

Spring boot项目编译后未能加载静态资源文件

起因: 因甲方爸爸加了一个紧急的需求: 需要搞一个文件上传和下载功能. 我心中想:这不简单,搞个资源服务器,将上传文件放上去,然后访问资源链接就行了. 但接下来甲方爸爸说 不需要这莫麻烦,直接将文件放服务器里,用的时候下载到资源文件夹下就行. 我心里想: 我擦嘞 还能这样!! 然…

【C++】—— STL简介(了解)

前言&#xff1a; 在上节&#xff0c;我们简单的认识了模板的基本概念。今天我简单的给大家介绍一下关于 STL 。 目录 &#xff08;一&#xff09; 什么是STL &#xff08;二&#xff09; STL的版本 &#xff08;三&#xff09; STL的六大组件 &#xff08;四&#xff09;…

Tomcat概述以及部署与优化

一、Tomcat概述 1、Tomcat的概念 Tomcat是Java语言开发的&#xff0c;服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP程序的首选。一般来说&am…

Python入门基础小练习

通过前面的两个篇章Python-入门基础篇和Python-入门基础语句篇大家应该已经认识了python基础的语句和函数了&#xff0c;并且可以使用pycharm编译器创建.py文件进行运行了&#xff0c;今天适当的来一些小练习&#xff0c;给枯燥的学习增添一些趣味性。 判断一个数是否为偶数 …

linux服务器实现百万并发遇到的问题以及解决思路

目录 前言服务器与客户端的配置介绍server 代码client 代码遇到的问题error too many open files为什么会出现这个问题解决这个问题的思路 killed&#xff08;已杀死&#xff09;为什么会出现这个问题解决这个问题的思路 最终结果学到的经验教训 前言 在完成百万并发服务器的时…

搭建家庭影音媒体中心 - 公网远程连接Jellyfin流媒体服务器

文章目录 前言1. 安装Home Assistant2. 配置Home Assistant3. 安装cpolar内网穿透3.1 windows系统3.2 Linux系统3.3 macOS系统 4. 映射Home Assistant端口5. 公网访问Home Assistant6. 固定公网地址6.1 保留一个固定二级子域名6.2 配置固定二级子域名 转载自远程穿透的文章&…

MySQL高级第十六篇:数据库日志有哪些(慢查询日志、通用查询日志、错误日志和二进制日志)

MySQL高级第十六篇&#xff1a;数据库日志有哪些&#xff08;慢查询日志、通用查询日志、错误日志和二进制日志&#xff09; 一、MySQL支持的日志有哪些&#xff1f;1. 日志类型总结2. 日志有什么缺点吗&#xff1f; 二、通用查询日志&#xff08;slow query log&#xff09;三…

【开发工具】idea2023.1社区版设置优化,媲美旗舰版

相信大家很多时候都是用旗舰版来开发&#xff0c;各种序列号破解包各种搞&#xff0c;但说不定哪天又失效了那天又爆泄漏隐私安全问题。随着idea的版本升级破解也不好搞了&#xff0c;所以我就直接用了社区版&#xff0c;经过一番折腾发现社区版一点不比旗舰版差&#xff0c;可…

Linux文件类型与属性

一、文件类型 Linux 系统下一共分为 7 种文件类型。通过 stat 命令或者 ls 命令来查看文件类型。 - &#xff1a;普通文件 d &#xff1a;目录文件 c &#xff1a;字符设备文件 b &#xff1a;块设备文件 l &#xff1a;符号链接文件 s &#xff1a;套接字文件 p &…