PID知识总结

2023-05-16

PID算法算是控制系统中一个比较常见的控制算法了,特别是在闭环控制系统中,PID的使用尤为常见,鄙人由于电赛延期在家闲来无事,决定把自己在电赛备赛期间所学的PID知识总结一下,希望自己在总结的时候能“温故而知新”,同时也请各位大佬能有所指正,揪出我的错误。

目录

  • 1.PID的算法简介
    • 1.1增量式PID
    • 1.2位置式PID
  • 2.串级PID
  • 3.PID的调参
    • 3.1matlab调参
    • 3.2经验调参

1.PID的算法简介

PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。顾名思义,PID控制算法是结合比例、积分和微分三种环节于一体的控制算法,PID控制的实质就是根据输入的偏差值,按照比例、积分、微分的函数关系进行运算,运算结果用以控制输出。
简单的概括为一句话:PID算法将所求误差的比例积分微分进行线性组合组成控制量,将控制量对控制变量进行控制的算法。

PID的数学公式

式中,Kp——比例增益,Kp与比例度成倒数关系;
Tt——积分时间常数;
TD——微分时间常数;
u(t)——PID控制器的输出信号;
e(t)——给定值r(t)与测量值之差。

闭环控制的PID的控制流程图
在这里插入图片描述
PID算法中常见的有两种:

1.位置式PID控制算法
2.增量式PID控制算法

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

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

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

1.1增量式PID

因为我们是单片机对数据进行采集,对数据进行离散采取,所以我们使用的是离散式增量式PID
数学公式如下:
在这里插入图片描述

算法如下(增量式PI控制速度)

/**************************************************************************
函数功能:速度闭环PID控制(实际为PI控制)
入口参数:目标速度 当前速度
返回  值:速度控制值
根据增量式离散PID公式 
ControlVelocity+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]
e(k)代表本次偏差 
e(k-1)代表上一次的偏差  以此类推 
ControlVelocity代表增量输出
在我们的速度控制闭环系统里面,只使用PI控制
ControlVelocity+=Kp[e(k)-e(k-1)]+Ki*e(k)
**************************************************************************/
int Velocity_FeedbackControl(int TargetVelocity, int CurrentVelocity) 
{
		int Bias;  //定义相关变量
		static int ControlVelocity, Last_bias; //静态变量,函数调用结束后其值依然存在
		
		Bias=TargetVelocity-CurrentVelocity; //求速度偏差
		
		ControlVelocity+=Velcity_Kp*(Bias-Last_bias)+Velcity_Ki*Bias;  //增量式PI控制器
                                                                   //Velcity_Kp*(Bias-Last_bias) 作用为限制加速度
	                                                                 //Velcity_Ki*Bias             速度控制值由Bias不断积分得到 偏差越大加速度越大
		Last_bias=Bias;	
		return ControlVelocity; //返回速度控制值
}

在我使用增量式PID中,我大多使用的是增量式PI对霍尔电机进行速度控制。

1.2位置式PID

同样原理,所以我们使用的是离散式位置式PID
数学公式如下:
我感觉
算法如下

/**************************************************************************
函数功能:位置式PID控制器
入口参数:目标圈数(位置) 当前位置
返回  值:速度控制值
根据位置式离散PID公式 
pwm=Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)]
e(k)代表本次偏差 
e(k-1)代表上一次的偏差  
∑e(k)代表e(k)以及之前的偏差的累积和;其中k为1,2,,k;
pwm代表输出
**************************************************************************/
int Position_FeedbackControl(float Circle, int CurrentPosition)
{
		float TargetPosition,Bias, ControlVelocity;     //定义相关变量
		static float Last_bias, Integral_Bias;          //静态变量,函数调用结束后其值依然存在

		Bias=TargetPosition-CurrentPosition; //求位置偏差
	  Integral_Bias+=Bias;
    if(Integral_Bias> 970) Integral_Bias= 970;	//积分限幅 防止到达目标位置后过冲,这里的值可以自由修改,我在这里修改为970
	  if(Integral_Bias<-970) Integral_Bias=-970;	//积分限幅 防止到达目标位置后过冲
	
		ControlVelocity=Position_Kp*Bias+Position_Ki*Integral_Bias+Position_Kd*(Bias-Last_bias);  //位置式PI控制器
	                                                                                            //Position_Kp*Bias 偏差越大速度越大
	                                                                                            //Position_Ki*Integral_Bias 减小稳态误差
	                                                                                            //Position_Kd*(Bias-Last_bias) 限制速度

		Last_bias=Bias;	   //更新误差
		return ControlVelocity;    //返回速度控制值 
}

在这里我是通过位置式PID对电机进行控制,控制电机旋转至目标位置

注意:
1:位置式PID不是专门用来控制目标进行目标位置的移动,位置式PID也可以用来控制速度,位置式PID中的位置并非电机的位置,这里的位置是指PID计算结果与信号的对应关系

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

2.串级PID

在这里我推荐大家看这位博主对串级PID的解析,我对串级PID的理解也是通过他的博客才有所加深
串级PID的理解

串级PID的定义:

串级控制系统是改善控制质量的有效方法之一,在过程控制中得到了广泛的应用。所谓串级控制,就是采用两个控制器串联工作,外环控制器的输出作为内环控制器的设定值,由内环控制器的输出去操纵控制阀,从而对外环被控量具有更好的控制效果。这样的控制系统被称为串级系统。PID串级控制就是串级控制中的两个控制器均为PID控制器。

其流程图如下:
在这里插入图片描述

上图就是平衡小车的串级PID的流程图,

在上面的流程图中:先是在角度环PID中计算角度误差,通过角度环PID输出期望角速度,再通过角速度PID控制速度达到期望速度,在通过角速度PID输出角度反馈进行角度环PID。

其特点就是角度环PID的输出就是角速度PID的输入,角速度PID的输出就是角度环PID的输入,各个PID相互影响。

我可能写的不是非常好,大家可以查找一下一些相关博主的资料,他们相应的串级PID文章写的非常好,易于理解。

3.PID的调参

其实PID最难的部分就是PID的调参了,可以说PID的调参是整个PID的学习核心,那么PID怎么进行调参呢?
在这里我主要介绍一下这两种的调参方式:matlab调参和经验调参,这两种方式比较常见而且实际调参比较多。

3.1matlab调参

在讲matlab调参之前,我先介绍一本书
在这里插入图片描述
在这本书里介绍了matlab怎么对PID进行仿真,调参和实际应用。我感觉这本书讲的非常好,大家可以看看,对PID和matlab的应用有很大的理解。

在进行调参之前,我们先要用simulink对PID进行仿真,构建一个仿真图。在这里我先构建一个PID仿真图(simulink怎么进行PID仿真我先不介绍了,到时候我会另写博客进行细讲)

在这里插入图片描述

这里我们是预先知道相应的传递函数,如果不知道相应的传递函数,我们可以用matlab的系统传递进行求解,在这里我就不细说了,我会写另一个博客怎么对系统传递进行传递函数的使用。

在写出仿真图后我们进行PID的自动调参
在这里插入图片描述在这里插入图片描述在Domain那里选择时间,在中间的Response Time 和 Transient 那里移动滑轮,直至曲线平滑(中间的曲线是matlab自动调参的曲线,可根据自己的要求进行相应的更改,实线是我们目前的matlab的曲线

3.2经验调参

经验调参其实主要靠自己平时的调参经验所得到的,这有时要看玄学的,我刚开始也不信这经验调参的,但是他有事往往出效果了。
在经验调参这里我是基于这个口诀的:
参数整定找最佳, 从小到大顺序查。
先是比例后积分, 最后再把微分加。
曲线振荡很频繁, 比例度盘要放大。
曲线漂浮绕大弯, 比例度盘往小扳。
曲线偏离回复慢, 积分时间往下降。
曲线波动周期长, 积分时间再加长。
曲线振荡频率快, 先把微分降下来。
动差大来波动慢, 微分时间应加长。
理想曲线两个波, 前高后低四比一。
一看二调多分析, 调节质量不会低。

不过在调参之前,我会分析PID的极性,先判断PID的极性在进行口诀进行参数调节

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

PID知识总结 的相关文章

  • 海思ISP曝光调整策略

    AE曝光调整 Exposure Attr 影响参数 xff1a ExpTimeRange Min Max 曝光时间Gain 各种增益控制Speed 曝光速度 xff08 影响到曝光收敛 xff0c AE闪烁 xff09 Compensati
  • ADS(ARM Developer Suite)安装与卸载中的问题(转)

    ADS用来对ARM的裸机代码进行编辑和调试 我在安装ADS1 2的过程中 xff0c 遇到了一个小问题 xff0c 写下来和大家分享一下解决方法 1 在安装程序 xff0c 进度条到100 时 xff0c 会一直停在那 xff0c 十几分钟
  • ucosIII 学习资料汇总

    网站 书籍 1 嵌入式实时操作系统uc OS III 邵贝贝译 这本书其实就是一本工具书 xff0c 我参考了官方的说明文档 xff0c 发现雷同很高 感觉就是官方说明文档翻译的 xff0c 用来应用查查接口还有点用 xff0c 不是十分推
  • USB协议传输结构

    USB作为数据通信标准 xff0c 固件可分为枚举配置和类协议部分 xff0c 枚举配置实现USB主机对设备的枚举和配置 xff0c 类协议实现设备各自的数据传输 usb2 0协议chapter8 protocol layer 1 USB协
  • 蓝牙HCI协议

    HCI 层位于蓝牙高层协议和低层协议之间 xff0c 提供了对基带控制器和链路管理器的命令以及访问蓝牙硬件的统一接口 它是我们实现自己的蓝牙设备要接触的第一个蓝牙协议 起着承上启下的作用 HCI通过包的方式来传送数据 命令和事件的 xff0
  • 标准USB设备请求命令

    一 标准的usb设备请求命令 控制传输是最重要和结构最复杂的一种传输类型 控制传输的 初始设置步骤 中包含了1 个8 字节的DATA0 数据包 参见图6 6 这8 字节的数据包是主机用来发送控制阶段中的请求命令的 而这些请求命令是主机配置U
  • 卡尔曼滤波基本公式推导(高斯乘积法)

    前言 卡尔曼滤波的推导这里给出两种推导方法 xff1a 一种是利用高斯乘积定理和贝叶斯公式推导出来 的 xff0c 另一种借用的是最小误差的思想 xff08 IMSE xff09 关于卡尔曼滤波的应用场景以及通俗的解释 xff0c 我相信各
  • 计算机组成原理(唐朔飞)

    计算机组成原理 唐朔飞 存储器 存储器分类 存储介质分类 半导体存储器磁表面存储器磁芯存储器 淘汰 存储方式 存储结构 存储器容量 地址总线 xff1a CPU能访问的地址宽度 xff0c 32地址线表示能访问2的32次方个存储单元地址 数
  • ubuntu配置静态IP、DNS地址

    虚拟机需要使用桥接上网 1 ifconfig 查看网卡信息 2 vi etc network interfaces 打开并编辑配置文件 配置说明 xff1a auto lo iface lo inet loopback auto ens33
  • c调用libcurl库发送GET 和 POST请求

    libcrul请求的基本套路流程 1 调用curl global init 初始化libcurl2 调用curl easy init 函数得到 easy interface型指针3 调用curl easy setopt 设置传输选项4 根据
  • LINUX 操作GPIO口

    两种方法 1 写驱动的方式 缺 2 通过linux提供的用户空间 终端控制 通过在用户空间上来操作GPIO xff0c 控制入口在 xff1a sys class gpio 首先确认内核里是否已选择上gpiolib的sysfs接口功能 默认
  • V4L2简介

    http work blog readthedocs org en latest v4l2 20intro html 第一章 V4L2简介 1 1 什么是v4l2 V4L2 xff08 Video4Linux的缩写 xff09 是Linux
  • 电子设计项目

    全套完整毕业设计智能家居控制系统设计 16X16点阵滚动显示 单片机595 43 138LED点阵 基于WIFI传输的单片机传感器设计 xff08 毕业论文 xff09 基于单片机设计的多点测温系统 数码管显示温度 基于单片机设计的公交报站
  • 视觉惯导里程计VIO综述

    最近阅读了VIO中的一些论文 xff0c 在这里做个汇总方便以后查阅 xff0c 如有问题欢迎指正 一 背景 VIO xff08 Visual Inertial Odometry xff09 视觉惯导里程计 xff0c VINS xff08
  • 【Cocos2d-X-2.1.4游戏引擎】发布第一个游戏

    有一段时间没更新博客了 xff0c 最近一直在写一个小游戏 xff0c 游戏在今天终于搞好了 xff0c 又可以开始写写博客 xff0c 打打dota的悠闲的日子了哈 看了十几天cocos2d x后 xff0c 也依照官网的例子写了个打飞机
  • 游戏升级之路

    七十一雾央原创 转载请注明 http blog csdn net hust xy 楼主学习编程有两年了 xff0c 决定向游戏发展大概就是半年前了 xff0c 在这里总结一下游戏方面的学习经历过 xff0c 给初学的朋友们参考下 xff0c
  • Nmap安装和使用详解

    文章目录 Nmap概述功能概述运行方式 Nmap安装Nmap参数详解目标说明主机发现端口扫描端口说明和扫描顺序服务与版本探测脚本扫描操作系统探测时间和性能防火墙 IDS规避和欺骗输出选项使用示例 常用扫描命令扫描ip地址或域名扫描整个网段扫
  • MSCKF_VIO:MSCKF的双目版本

    论文 xff1a MSCKF的双目版本 Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight 下载地址 xff1a 点击 源码地址 xff1a https git
  • 功能测试,系统测试,兼容性测试,手工测试

    功能测试 功能测试一般需要根据编写的 测试用例 xff0c 执行测试用例 xff0c 执行的过程中提交缺陷 xff1b 功能测试一般至少会有两轮 xff0c 遇到比较麻烦的项目甚至会有三到四轮 xff0c 而每一轮测试都有其侧重点 xff0
  • C++ sdk 获取执行文件所在路径

    TCHAR szFilePath MAX PATH 43 1 61 0 GetModuleFileName NULL szFilePath MAX PATH tcsrchr szFilePath T 39 39 1 61 0 szFileP

随机推荐

  • UART串口

    一 串口的历史 首先 xff0c 串口对每一个做硬件和嵌入式软件的人来说 xff0c 就是一个必备的工具 xff0c 调试一个带MCU或者CPU的系统 我们在调试的过程中 xff0c 一般第一件事情 xff1a GPIO点灯 xff0c 第
  • C++软件工程师的发展前景如何?

    目前国内的嵌入式开发非常火 xff0c 而C 43 43 主要用于底层的嵌入式开发 驱动开发等 xff0c 也用于WINCE等嵌入式系统的应用软件开发 可以说C 43 43 软件工程师发展前景还是不错的 xff0c 下面就给大家具体介绍一下
  • 成为一名C++开发工程师,需要具备哪些条件?

    C 43 43 是C语言的继承 xff0c 它既可以进行C语言的过程化程序设计 xff0c 又可以进行以抽象数据类型为特点的基于对象的程序设计 xff0c 还可以进行以继承和多态为特点的面向对象的程序设计 C 43 43 擅长面向对象程序设
  • 一年精通,三年熟悉,五年了解,十年用过!C++真的这么难吗?

    C 43 43 有句俗话说 xff1a 一年精通 三年熟悉 五年了解 十年用过 如果可以把C 43 43 程序员分层的话 xff0c 看看你在第几层 xff1f 第0层 掌握基本的C 43 43 语法 xff0c 会写一些基本的if els
  • 【C语言实现贝塞尔曲线】无聊人士专用程序,PS钢笔工具最初原形~

    简介 动态演示贝塞尔曲线的绘制过程 支持任意点数 任意阶次 点击鼠标右键 xff0c 在鼠标位置将创建新的点 按住鼠标左键拖动控制点 空格键屏幕将清空 一起来玩一玩吧 xff01 运行效果 源码 程序名称 xff1a 贝塞尔曲线 inclu
  • c++ stream iword、pword和register_callback函数

    pword xff0c stream 的 register callback函数 include lt iostream gt include lt sstream gt using namespace std const int name
  • AWS CLI version 2 在 Windows 下的安装

    首先你需要到下面的链接地址中下载需要的应用 xff1a https awscli amazonaws com AWSCLIV2 msi 双击运行 双击运行下载的可以运行的文件 下一步继续 下一步继续安装进程 许可协议 你需要同意许可协议后继
  • MATLAB安装时为英文如何切换中文

    MATLAB安装时为英文如何切换中文 MATLAB安装问题 问题描述 2018b及以上版本的MATLAB安装时 xff0c 其中英文模式会根据电脑所在区域环境进行配置 若电脑所在区域环境不在中国 xff0c 则MATLAB初始化安装会被定义
  • VINS-Fusion-RGBD在双轮差数轮小车上配置并进行稠密建图

    VINS Fusion RGBD在小车上进行稠密建图 1 轮式里程计代替视觉里程计2 其他获得更为鲁棒性建图效果的做法3 点云地图及栅格地图的获得4 多个参数可配置 VINS Mono由于存在运动初始化过程 xff0c 对于地面小车来说运动
  • ST LINK V2.1接线图

    方便查询 xff0c 图片来源已经忘记了 xff0c 如有冒犯请通知我 特此记录以防忘记 anlog 2020年8月29日
  • ROS笔记之Gazebo机器人仿真(二)——Soildworks搭建机器人模型

    1 引言 机器人的模型是通过URDF文件进行描述 xff0c 具体说明可以参考URDF 但对于一些复杂的机器人 xff0c 通过直接编写URDF文件就比较繁琐 xff0c 这里我们介绍一种通过专业的三维建图软件Soildworks构建模型然
  • ROS笔记之Gazebo机器人仿真(四)——Rviz及Gazebo下机器人模型显示

    1 引言 上一章中我们成功导出了URDF文件 xff0c 这章中我们将学习如何在Rviz和Gazebo下显示我们创建的三维模型 2 预备 首先 xff0c 我们需要对导出的URDF文件进行下修改 xff08 1 xff09 package
  • 制作树莓派镜像img,并在其他新板上使用,实现批量克隆树莓派板

    1 将现有的系统制作成镜像img 2 配置网络 1 将现有的系统制作成镜像img 1 1 先将新买的sd卡用SDFormatter工具格式化 xff0c 以作备用 1 2 将带有系统的sd卡用Win32DiskImager exe工具Rea
  • Qt开发-Qt对象间的关系

    一 Qt对象间的关系 1 Qt对象间可以存在父子关系 xff08 1 xff09 每个对象都保存有它所有子对象的指针 xff08 2 xff09 每一个对象都有一个指向其父对象的指针 2 当指定Qt对象的父对象时 xff08 1 xff09
  • VScode+esp-idf:例程(esp32-web-camera)保存视频到sd卡(附源码)

    文章目录 1 移植到 esp32 web camera 2 jpeg2avi使用方法2 1 何处调用jpeg2avi start2 2 何处调用jpeg2avi add frame2 3何处调用jpeg2avi end 3 编译运行工程4
  • 单片机能代替PLC吗?过来人告诉你

    随着科技的进步和市场的需要 xff0c 近年来出现了 非常多 类似Arduino 这样的开源电子原型平台 xff0c 它们大部分实现了对单片机的二次封装 xff0c 所有外设 模块接口都是现成的 xff0c 对于 使用者 的要求 只需懂C语
  • STM32学到什么程度可以就业

    很多在门外观望的朋友总会有这些担心 STM32难不难学 xff1f 学到什么程度可以去工作 xff1f 前景怎么样 xff1f 对应的工资高不高 xff1f 对于小编来说最难的事你已经在做了 xff0c 就是还在门口观望 xff0c 望来望
  • 那么辛苦的熬单片机,不拿它DIY点小玩意怎么对得起自己。

    大家好 xff0c 我是华维蔵鹰 xff0c 不管你处于什么身份 做任何一件事情你都会需要一个动力的源泉 在大学中很多人弹吉他并不是爱好它 xff0c 只是为了多点机会去接触些妹子 xff0c 就像我们以前刚入门单片机的时候 xff0c 都
  • 众人寻AI千百度

    引 xff1a 说起AI xff0c 或许很多普通人仍然不清楚这是什么 然而说起人工智能 xff0c 机器人 xff0c 想必大家不是如雷贯耳也是耳濡目染 xff0c 略知一二 从小我们便不断的从电影 xff0c 电视剧中接触AI xff0
  • PID知识总结

    PID算法算是控制系统中一个比较常见的控制算法了 xff0c 特别是在闭环控制系统中 xff0c PID的使用尤为常见 xff0c 鄙人由于电赛延期在家闲来无事 xff0c 决定把自己在电赛备赛期间所学的PID知识总结一下 xff0c 希望