PID控制器的介绍

2023-05-16

PID 控制算法介绍

在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称 PID 控制,又称 PID 调节。PID 控制器问世至今已有近 70 年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用 PID 控制技术最为方便。即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用 PID 控制技术。PID 控制,实际中也有 PI 和 PD 控制。

PID 控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。将偏差的比例§、积分(I)和微分(D)通过线性组合构成控制量,对被控对象进行控制,故称 PID 控制器,原理框图如图所示。

a9HKV1.png

PID 控制器原理框图

在计算机控制系统中,使用的是数字 PID 控制器,控制规律为:

a9H82D.png

式中a9Htrd.png

简单说来,PID 控制器各校正环节的作用如下:

  1. 比例环节:及时成比例地反映控制系统的偏差信号,偏差一旦产生,控制器立即产生控制作用,以减少偏差。
  2. 积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数,越大,积分作用越弱,反之则越强。
  3. 微分环节:能反映偏差信号的变化趋势(变化速率),并能在该偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。

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

位置式 PID

位置式 PID 中,由于计算机输出的 u (k) 直接去控制执行机构(如阀门),u(k)的值和执行机构的位置(如阀门开度)是一一对应的,所以通常称公式(4.2)为位置式 PID 控制算法。

a9H5GT.png
位置式 PID 控制算法的缺点是:由于全量输出,所以每次输出均与过去的状态有关,计算时要对过去 e(k)进行累加,计算机工作量大;而且因为计算机输出的u(k)对应的是执行机构的实际位置,如计算机出现故障,u(k)的大幅度变化,会引起执行机构位置的大幅度变化,这种情况往往是生产实践中不允许的,在某些场合,还可能造成严重的生产事故。

因而产生了增量式 PID 控制的控制算法,所谓增量式 PID 是指数字控制器的输出只是控制量的增量△u(k)。

增量式 PID

当执行机构需要的是控制量的增量(例如:驱动步进电机)时,可由式(4.2)推导出提供增量的 PID 控制算式。由式(4.2)可以推出式(4.3),式(4.2)减去式(4.3)可得式(4.4)。

a9HRZn.png

​ 公式(4.4)称为增量式 PID 控制算法,可以看出由于一般计算机控制系统采用恒定的采样周期 T,一旦确定了 KP、TI 、TD,只要使用前后三次测量值的偏差,即可由式(4.4)求出控制增量。
增量式 PID 具有以下优点:
​ (1) 由于计算机输出增量,所以误动作时影响小,必要时可用逻辑判断的方法关掉。
​ (2) 手动/自动切换时冲击小,便于实现无扰动切换。此外,当计算机发生故障时,由于输出通道或执行装置具有信号的锁存作用,故能保持原值。
​ (3) 算式中不需要累加。控制增量△u(k)的确定仅与最近k次的采样值有关,所以较容易通过加权处理而获得比较好的控制效果。
​ 但增量式 PID 也有其不足之处:积分截断效应大,有静态误差;溢出的影响大。使用时,常选择带死区、积分分离等改进 PID 控制算法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PID控制器的介绍 的相关文章

  • FPGA实现电机转速PID控制

    通过纯RTL实现电机转速PID控制 包括电机编码器值读取 电机速度 正反转控制 PID算法 卡尔曼滤波 最终实现对电机速度进行控制 使其能够渐近设定的编码器目标值 一 设计思路 前面通过SOPC之NIOS 实现电机转速PID控制 调用中断函
  • 电机控制进阶——PID速度控制

    之前的几篇文章 电机控制基础篇 介绍的电机编码器原理 定时器输出PWM 定时器编码器模式测速等 本篇在前几篇的基础上 继续来学习电机控制 通过PID算法 来进行电机的速度控制 并进行实验测试 PID基础 PID即 Proportional
  • PID稳压

    思路说明 我们设置一个目标值 这是我们要调节的目标 我们通过AD采样 PC3 采集到当前电压 通过减法运算我们得出当前电压与目标电压的差值 接下来我们只要发现当前电压与目标电压不同 我们就要想办法改变当前单片机的输出电压 PA8 也就是当前
  • 【抗扰PID控制】干扰抑制PID控制器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 Simulink 文章讲解 1 概述 文献来源 抗扰PI
  • TSI系统测量参数之:转速和零转速

    一 TSI系统测量参数 1 轴向位移 2 盖振或瓦振 3 偏心 4 键相 5 零转速 6 轴向振动 7 相对热膨胀 胀差 8 绝对热膨胀 缸胀 二 各参数作用 1 零转速与转速 1 零转速 主要用在汽机转速到零时投盘车的连锁以及对大机转速的
  • PID算法应用于室内温度控制的C语言实现

    我最近在学习PID算法 对此很感兴趣 所以与大伙分享下 有不足的地方欢迎指出 非常谢谢 PID算法的基本内容本篇博客就不做阐述了 网上有很多资料 文章的主题是用C语言实现PID算法 为了更好的理解 我采用软件模拟室内温度控制的方式与大伙分享
  • 什么是死区时间

    死区时间是PWM输出时 为了使H桥或半H桥的上下管不会因为开关的关断延迟问题发生同时导通而设置的一个保护时段 通常也指pwm响应时间 由于IGBT 绝缘栅极型功率管 等功率器件都存在一定的结电容 所以会造成器件导通关断的延迟现象 一般在设计
  • 【平衡小车制作】(一)硬件原理图讲解(超详解)

    大家好 我是小政 之后的一系列文章我将介绍我玩平衡小车的过程以及遇到的一些问题 将这些内容记录下来分享给大家 也让大家少走一些弯路 接下来我将从硬件框架选择 软件编程 PID算法 PID调参 蓝牙遥控这五个部分向大家讲解平衡小车的制作过程
  • 【STM32CubeMX】位置式PID调节控制输出电压(超详解)

    本文将借助STM32CubeMX来配置ADC DMA DAC USART 并利用PID位置式算法实现对输出电压进行AD采集通过PID算法调节DAC 获取到我们想要的电压值 讲解的主要知识 何为PID以及为何需要PID STM32CubeMX
  • PID算法理论,运用,代码编写详解

    什么是PID 我相信能来看这篇文章的应该都知道什么是PID PID就是一种控制算法 利用比例运算 P 积分运算 I 和微分运算 D 一起控制某一事件 当然也可以只运用其中一个也可以两两结合 运用举例 比如我们家里都会有的那个电热水器 有点热
  • 如何在C++中使用system()命令获取执行进程的pid

    当我们使用system 命令 程序等待完成 但我正在执行process using system 并使用负载平衡服务器 因为该程序在执行系统命令后立即进入下一行 请注意 process可能不完整 system my script after
  • 如何在Python中检查是否存在给定pid的进程?

    有没有办法检查 pid 是否对应于有效进程 我从其他来源获取 pid 而不是os getpid 我需要检查机器上是否不存在具有该 pid 的进程 我需要它在 Unix 和 Windows 中可用 我还在检查 PID 是否未被使用 如果 pi
  • 有没有办法确定 Linux PID 是否暂停?

    我有一个 python 脚本 它使用 SIGSTOP 和 SIGCONT 命令与 os kill 来暂停或恢复进程 有没有办法判断相关PID是处于暂停状态还是恢复状态 您可以从进程的 proc 目录 proc
  • 识别 DNS​​ 请求的 PID 源 (Windows XP)

    我希望确定发出 DNS 请求的进程 查看查询给了我一个线索 但并不能帮助我确定确切的过程 我可以在 Wireshark 中看到本地端口号 但请求太短暂 无法被 TCPView 接收 有没有可以捕获 DNS 请求和 PID 的日志记录工具 过
  • mac os x 下进程使用的内存

    给定PID 如何获取进程当前使用的内存 具体来说 我正在寻找 进程使用的私有物理内存 RAM 进程使用的交换空间 但我对映射文件和共享内存不感兴趣 简而言之 我想确定通过终止 PID 将释放多少内存 RAM 和交换 这有用吗 您可以使用ps
  • 使用批处理查找java PID

    我需要从 Windows 批处理控制台知道 java 进程 PID echo off set p CD FOR F tokens 1 A IN JAVA HOME bin jps exe v find p DO SET str A echo
  • 如何在shell脚本中从fork子进程获取PID

    我相信我可以从父进程派生出 10 个子进程 下面是我的代码 bin sh fpfunction n 1 while n lt 20 do echo Hello World n times sleep 2 echo Hello World2
  • PID和TID的区别

    PID和TID有什么区别 标准答案是 PID 用于进程 而 TID 用于线程 然而 我发现有些命令可以互换使用它们 例如 htop有一个 PID 列 其中显示同一进程的线程的 PID 具有不同的值 那么PID什么时候代表线程或进程呢 这很复
  • 如何通过VBA获取当前Excel实例的进程ID,而不使用标题?

    如何获取运行 VBA 代码的当前 Excel 实例的进程 ID 我不想通过标题中的名称来请求它 当我有两个或多个具有相同标题的 Excel 实例时 这会导致问题 您可以使用此方法来获取当前进程ID Declare Function GetC
  • 如何在bash中列出所有后台pid

    要么我无法正确表达我的搜索 要么答案不容易找到 但我正在尝试找出如何列出我的所有后台任务 PID 例如 到目前为止 我发现要列出我们使用的最后一个 PID 但现在我想列出之前任务的 PID 如果存在 但我找不到如何做到这一点 最终我想列出我

随机推荐

  • 小白入门gitee(码云)

    文章目录 一 介绍二 注册账户三 本地环境的配置1 如果是在linux系统2 如果是windows系统 四 本地代码库的操作1 基本概念2 命令操作 五 远程代码库的操作1 下载远程代码库的代码2 同步远程仓库 xff08 上传代码 xff
  • ubuntu:安装cmake后查看版本报错:CMake Error: Could not find CMAKE_ROOT !!!

    问题描述 xff1a ubuntu18原来安装过cmake xff0c 想升级下版本 xff0c 在安装新版本的cmake完成后 xff0c 输入指令 xff1a cmake version 查看版本号时出现以下错误 xff1a CMake
  • g++ 编译选项

    返回主页 lsgxeva MyGitee https gitee com lsgx MyGithub https github com lsgxeva 博客园首页新随笔联系订阅管理 随笔 437 文章 0 评论 1 GCC 警告 优化以及调
  • STM32CubMx+FreeRTOS互斥锁和递归互斥锁(五)

    文章目录 FreeRTOS系统一 简绍二 STM32CubMx配置1 准备2 添加互斥锁2添加递归互斥锁 三 互斥锁1 代码2 测试 四 递归互斥锁1 代码2 测试 FreeRTOS系统 一 简绍 互斥锁 xff0c 谁获得的消息谁来释放
  • ESP8266-12F最小系统板程序烧录

    文章目录 ESP8266一 简介二 准备1 ESP8266 12F系统板2 转接板3 USB转串口模块4 烧录软件 三 连接烧录四 下载 ESP8266 一 简介 前一段时间一直用ESP8266 12F开发板来学习开发 xff0c 但是最近
  • ESP8266+0.96OLED驱动显示(I2C)

    文章目录 ESP8266一 简介二 管脚定义三 代码 ESP8266 一 简介 这篇我们说一下ESP8266来驱动OLED显示屏显示 xff0c 这里使用的是I2C的屏幕 xff0c 像Arduino中有好几个库可以驱动屏幕 xff0c 但
  • Node.js超详细指南(一)

    文章目录 一 概述二 Node js的特点1 异步I O2 事件驱动3 单线程4 支持微服务 三 Node js下载与安装安装步骤验证安装是否正确 一 概述 Node js的官方开发语言是JavaScript JavaScript是前端开发
  • Linux未设置root初始密码怎么办?

    问题描述 xff1a Linux未设置初始密码 xff0c 无法从用户状态切换到root状态怎么办 xff1f 是不是遇上下面的情况 xff1a 解决方案 xff1a 使用下列命令进行修改root密码 sudo passwd root
  • 计算机体系结构——功能部件

    一 功能部件 加法器 1 全加器 全加器 将两位本地二进制数和1位低位进位的数进行相加 xff0c 求的1位本地结果以及1位向高位进位的结果 简单来说就是3个input xff0c 2个output xff0c 这里的逻辑比较简单 xff0
  • Mac M1遇到更换清华源不成功问题解决办法(实测有效)

    遇到的问题 在使用如下命令更换为清华源后 xff0c update时出现了错误 xff1a bash span class token operator span c 39 echo span class token string 34 d
  • Ubuntu安装gcc遇到Depends依赖问题解决办法(XXX : Depends: gcc-12-base)

    gcc遇到依赖问题 libatomic1 Depends gcc 12 base 61 12 20220319 1ubuntu1 but 12 1 0 2ubuntu1 22 04 is to be installed libc6 dev
  • Tmux终端复用器下载安装及配置文件(超好用)

    1 Tmux简介 tmux是一款非常好用的终端复用软件 xff0c 曾经的你是不是还在为开n个终端而烦恼呢 xff0c 有了tmux就可以实现多终端显示在一个桌面上 xff0c 分屏丝滑 xff0c 当然还有其他功能 xff0c 比如保护现
  • make menuconfig遇到 warning:.config does not exists

    一生一芯PA0 xff1a PA0 xff1a make menuconfig 编译报错 问题描述 遇到的报错 xff1a 解决方案 xff1a 安装缺失的工具 xff1a 安装 bison 和 flex即可 xff0c flex和 bis
  • LibTorch1.7.1: error: ‘min_values’ is not a member of ‘at’

    错误描述 xff1a 原来用的libtorch的版本是1 5 0的 xff0c 今天换成了最新的1 7 1 xff0c 就报了这个错误 xff1a error min values is not a member of at 解决方法 xf
  • Github使用指南

    文章目录 注册成为用户GitHub功能及常用词汇板块说明Your profile使用仓库上传资源查找资源 注册成为用户 首次使用GitHub并准备长期使用需要先注册 xff0c 当然也可以以游客的方式进行浏览 登录官网GitHub Wher
  • 三孔插座接线方法(上地,左零,右火)

    三孔插座接线方法 一般三孔插座的线序 xff0c 如下图所示 xff1a 上 xff1a 地线 xff08 保护地 xff09 左 xff1a 零线 右 xff1a 火线 xff08 相线 xff09 正确的接接线方法 错误的接线方法 xf
  • CAN总线详解

    CAN总线协议 要了解报文数据帧的直接看第三点 1 CAN简介 CAN controller area network 控制器局域网是用于解决汽车众多控制部件之间的数据交换而开发的一种串行数据通信总线 其特点有 xff1a 总线上节点不分主
  • 【FreeRTOS】2. SVC系统调用

    SVC系统调用 问题 xff1a RTOS内核在何时去产生一个SVC系统调用 xff1f SVC中断服务里面使用的是MSP堆栈指针 xff0c 内核在何时切换为PSP指针 xff1f 1 产生SVC系统调用 FreeRTOS启动调度器的时候
  • 【FreeRTOS】3. PendSV异常

    PendSV异常 问题 xff1a 怎么触发PendSV异常 xff1f 何时使用MSP何时切换PSP xff1f PendSV如何实现上下文切换 xff1f 1 触发PendSV异常 在RTOS内核中 xff0c 任务切换的原理是 xff
  • PID控制器的介绍

    PID 控制算法介绍 在工程实际中 xff0c 应用最为广泛的调节器控制规律为比例 积分 微分控制 xff0c 简称 PID 控制 xff0c 又称 PID 调节 PID 控制器问世至今已有近 70 年历史 xff0c 它以其结构简单 稳定