PID算法:增量式PID 位置式PID

news2024/12/23 14:36:58

 

前面的文章已经介绍过什么是pid了,现在再回顾一下:

PID:是过程控制中常用的一种针对某个对象或者参数进行自动控制的一种算法。

这一篇分享不打算再深究pid的理论知识,如果有不懂或者对pid感兴趣的朋友,可以自行查阅资料,或者看我前面的文章。

这次分享一下pid算法的常见实现和流程。主要简单分享一下pid的模拟控制实现和数字控制实现。

1、PID的模拟控制

在以前,计算机系统没这么发达的时候,那个时候很多的系统是通过硬件电子的方式去实现的。如果有观察过一些老物件的话,会发现以前那个时代的很多电子式的控制系统,都是很巨大很笨重的,里面满满的都是电子元器件。

到了后面计算机技术发展迅猛,很多的系统可以依靠软件算法实现了,也极大地减少了系统的元器件电子的使用,使得很多系统功能强大的同时还体积小巧轻便。

比如下图这个模拟反馈控制系统的示意图:

上图是一个简单的模拟闭环反馈控制系统,它可以实现将被控量通过反馈回路反馈到输入端,从而对被控量和期望输出值进行比较,形成一个闭环的自动控制系统。

图中的模拟调节器的意思就是控制规律的方案是通过模拟硬件的方式来实现的,如果想要调整系统的控制规律就需要修改调节器的硬件。这就是模拟控制系统的意思。

而模拟PID的实现也是通过模拟电子器件搭建的电路实现的,通过电子元器件的方式实现比例、积分、微分单元,然后整合在一块组成一个控制系统,这就是模拟PID了。如下的示意图:

模拟PID的微分方程如下:

而PID调节器的传递函数如下:

 

2、PID的数字控制

数字控制系统是以微型计算机作为控制器,通过软件的方式来实现控制规律的一种控制系统。当我们想要改变控制器的控制规律,一般只要通过改变相应的程序或者软件参数即可以实现改变控制规律。

数字控制系统的示意图如下:

通过数字控制实现的PID的差分方程如下:

 

3、数字PID算法的两种类型 — 位置式、增量式

数字PID:指的是PID控制算法的实现是通过计算机软件程序实现的,计算机需要对输入的连续信号进行采集,然后通过量化作为控制器的输入参数,从而经过算法的调节实现目标对象的控制。

PID控制算法在计算机系统中,一般都是采用的数值逼近的方法进行的。因为在很多的系统中,它一般都是连续的,而计算机要进行运算就要依靠计算机的运算,计算机的运算是离散的。所以想要让计算机能够实现PID算法程序,就必须要将PID算法的连续函数进行离散化,从而能够在计算中通过软件算法的方式实现。

一般而言,计算机实现PID算法的时候,在采样周期很小的时候,积分部分可以用对误差求和的方式代替,微分部分可以用差商的方式代替,从而实现将连续的PID算法的差分方程进行离散化,能够通过计算机实现。

数字PID主要有两种:位置式PID和增量式PID

3.1、位置式PID

位置式PID:指的是PID控制器经过运算输出的Uk是被控对象的实际控制量大小。

这个概念是不是咋一看有点拗口?不理解?别急,举个例子看看就知道了。

打个比方:我要进行一个阀门的控制,从而控制流体的流量大小。假设阀门的开度位置为0~100,当前阀门的开度在位置20的地方。现在我希望加大流体的流量,通过修改设定值,PID通过调节,最终输出控制量Uk=80,即这个时候阀门的开度要到80的位置。这就是位置式PID输出的是对被控对象的实际控制量大小的理解。

再来位置式PID的离散公式。如下:

 

式中:

通过进一步整理,可以表示为:

其中:

Kp - 比例系数
Ki - 积分系数;Ki = Kp*T/Ti;
Kd - 微分系数;Kd = Kp*Td/T;
T:采样时间
Ti:积分时间
Td:微分时间

从上面的公式可以看出,位置式PID只需要计算第K次和K-1次的误差即可,并且控制器会对偏差进行累加,也就是控制器的每次输出Uk都和过去的状态有关。

这也会带来一些问题,因为位置pid的输出Uk和以前的状态有关,如果控制器出现异常,那么可能会导致Uk的输出大幅变化,导致执行机构的状态大幅变化,严重的话可能会导致严重的生产事故。

另外,因为位置PID要对偏差进行累积,所以会导致系统的运算量变大,这对于运算性能不够好的计算机也是一种负担。

3.2、增量式PID

增量式PID:指的是控制器的输出是对被控对象的增量∆Uk,而不是实际的控制量大小。

怎么去理解增量式PID呢?

打个比方:比如我要控制一个步进电机转动的角度,步进电机转动之后所在的位置没有达到我们期望的位置,但是又快要接近了,这个时候PID控制器输出的是变化的增量,而不是实际的控制量。

这么说吧,假如我希望步进电机转动到角度120°,现在是115°了,所以只要再增加+5°的输出角度即可。如果因为控制超了,到了123°的位置,这个时候只要减少-3°即可。所以这种情况下控制的输出是增量变化,而不是实际的控制量大小。

增量式PID的离散公式如下:

整理如下:

式中:

 

从增量式PID的离散公式可以看到:增量式PID跟n时刻、n-1时刻、n-2时刻的偏差都有关系,但是不会对偏差进行累积,所以相比位置式PID的计算量要小,也不会跟过去的偏差有关联,所以控制的稳定性会更好。

4、数字PID算法的程序流程

上面分享了数字PID的离散化公式,代码也是有实现的,但是因为暂时还没整理好,就留着下次分享的时候再放上来吧。这里先放PID算法的程序流程图,其实说到这里,PID的算法也已经可以自己去实现了。

(1)位置式PID的算法实现的流程图

(2)增量式PID的算法实现流程图

 

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

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

相关文章

【docker桌面版】windows使用docker搭建nginx

1.拉取nginx镜像 docker pull nginx 2.运行容器 docker run -d -p 80:8081 --name nginx nginx 3.本地磁盘创建nginx目录 D:\Docker\project\nginx 4.复制docker中的nginx配置文件 查看运行的容器docker ps -a docker cp 8f18d58bc77b:/etc/nginx/nginx.conf D:\Docker…

【Leetcode】DP | 打家劫舍,当一个机灵的小偷

198 打家劫舍 令 D [ i ] D[i] D[i]表示前 i i i间房子的最大收益: D [ i ] max ⁡ ( D [ i − 1 ] , D [ i − 2 ] n u m s [ i ] ) D [ 0 ] n u m s [ 0 ] D [ 1 ] max ⁡ ( n u m s [ 0 ] , n u m s [ 1 ] ) D[i] \max(D[i -1], D[i-2]nums[i]) \\ D[0] …

软件测试工程师如何从功能测试转成自动化测试?

功能测试转成自动化测试,答案就三个字:“靠学习”。 学习自动化的方法无非是三种: 一、靠培训(下方有如何选择培训机构) 在相对有氛围的学习环境中来学习自动化测试,这是一个较快学习的方法。二、靠自学自…

js文件引入vue $notify组件,自定义添加按钮功能!

import Vue from vue; //新创建一个vue实例 let v new Vue(); const h v.$createElement console.log(h) v.$notify({ dangerouslyUseHTMLString: true, message: h( div, {}, [ h(p, {}, [ h(p, {style:"font-size: 15px;"}, 车架号:${res.rows[0].…

C# Winform 多个程序之间的通信(非Scoket)

效果 功能:打开窗体自动连接主程序,并自动添加到列表,可以向子程序群发消息 可以向单个程序单独发送消息 在退出程序后,添加的程序列表会自动移除 一、概述 参考:C# Winfrom程序之间通讯_c# sendmessege copydatastr…

x宝评论抓取

#某宝评论接口sign参数逆向 1.接口速览 多次请求发现,t为时间戳,sign为加密参数,盲猜和data、t有关,sign为32位,盲猜是字符串的32位的MD5 2.搜索js代码 这里为搜索的是appKey,就找到了sign,然…

如何实现APP自动化测试?

APP测试,尤其是APP的自动化测试,在软件测试工程师的面试中越来越会被问到了。为了更好的回答这个问题,我今天就给大家分享一下,如何进行APP的自动化测试。 一、为了实现JavaAppiumJunit技术用于APP自动化测试,所以需要…

使用AIGC工具提升论文阅读效率

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

接口测试实战工具如何选择?这6个工具首选(建议收藏)

常见接口类型 • HTTP/HTTPS 类型接口 基于HTTP协议开发的接口现在应用是最为广泛的,这类API使用起来简单明了,因为它是轻量级的、跨平台、跨语言的, 但凡是第三方提供的API都会有HTTP版本的接口。 RESTful API也是基于HTTP协议的&#xff0c…

Android滴滴路由框架DRouter原理解析

作者:linversion 前言 最近的一个新项目使用了Clean Architecture模块化MVVM架构,将首页每个tab对应的功能都放到单独的模块且不相互依赖,这时就有了模块间页面跳转的问题,经过一番研究选择了滴滴的DRouter,因为其出色…

Image captioning中自定义文本数据整理为类似Flickr8k.token.txt的格式--->助力后期生成JSON格式用于训练

手把手实现Image captioning,将自定义文本数据整理为类似Flickr8k.token.txt的格式,助力后期生成JSON格式用于训练。如果感觉有用,不妨给博主来个一键三连,白天科研,晚上肝文,实属不易~ ~ ](https://imgse.com/i/p9FmMDK) 这里写目录标题 1. 任务需求2. 程序实现2.1 读取…

vistual studio 2017中导入pthread.h的配置方法

1.下载pthread.h的相关库文件 下载路径 https://www.mirrorservice.org/sites/sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip 加压后得到两种系统版本的三个文件夹 pthreads.2 : 包含了pthread的源文件 Pre-built2 :包含了pthreads for win32的头文件…

软件测试04:软件测试流程和软件测试过程

软件测试04:软件测试流程和软件测试过程 软件测试流程 软件测试流程:获取测试需求->编写测试计划->制造测试方案->开发与设计测试用例->执行测试->提交缺陷报告->测试分析与评审->提交测试总结->准备下一版本测试 软件测试过…

网页JS自动化脚本(九)创建一键导出数据库到桌面的功能按钮

我们获取到了数据库,当然我们希望能把这个数据库给保存到本地电脑上进行一些数据的处理,我们这一节就添加一个按钮把数据一次性导出 保存到桌面为json格式 我们直接用TXT打开它如下图所示 然后再使用json转EXCEL的小工具规整之后如下图 好了我们下面上代码 // UserScript // n…

算法提高-图论-单源最短路的综合应用

单源最短路的综合应用 单源最短路的综合应用AcWing 1135. 新年好AcWing 340. 通信线路AcWing 342. 道路与航线AcWing 341. 最优贸易 单源最短路的综合应用 AcWing 1135. 新年好 多次dijkstra求每个点到其它点的最短距离, 此时相当于建好了一张图,每个点…

http客户端Fegin

1.RestTemplate方式调用存在的问题 代码可读性差,编程体验不统一 参数复杂URL难以维护 2.Feign的介绍 Feign是声明式的http客户端(只需要将发http请求的信息写出即可) 主要基于SpringMvc的注解来声明远程调用的信息: 步骤&…

(十二)K8S可视化工具Rancher部署项目应用实战

1.Rancher部署springboot私有镜像 连接私有镜像操作步骤 1.进入资源>>密文 2.进入镜像库凭证列表,点击添加凭证 3.输入凭证名称,选择自定义,填入自己的私有镜像仓库地址,这里使用的是阿里云,输入用户名和密码…

Zoho CRM SDK

前言 因早期公司的业务在Zoho CRM,现在孵化出自己的想法,想着能把一部分CRM的数据同步导出来,故研究Zoho CRM SDK的接入方法。虽说在文档上都有提及,但有部分细节不甚明了,也是一遍遍尝试出来的,所以分享出…

【Vue】六:路由(上)使用路由 多级路由

文章目录 1.多页面应用2. 单页面应用(使用路由)3. 多级路由 1.多页面应用 2. 单页面应用(使用路由) (1)安装vue-router插件 vue2 要安装 vue-router3 npm i vue-router3vu3 要安装 vue-router4 npm i vue…

字节薪酬体系被曝光,我真的酸了....

曾经的互联网是PC的时代,随着智能手机的普及,移动互联网开始飞速崛起。而字节跳动抓住了这波机遇,2015年,字节跳动全面加码短视频,从那以后,抖音成为了字节跳动用户、收入和估值的最大增长引擎。 自从字节…