PID校正

一、Introduction to PID Control

PID控制是一种应用非常广泛的控制算法。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。PID(proportion integration differentiation)其实就是指比例,积分,微分控制,当得到系统的输出后,将输出经过比例、积分、微分3种运算,叠加到输入中,从而控制系统的行为[1]。

PID控制理念最早提出是在1932年,由Nyquist在一篇论文当中提出了采用图形的方法来判断系统的稳定性。在他的基础上,H. W. Bode等人建立了一整套在频域范围设计反馈放大器的方法,后被用于自动控制系统的分析和设计,这也是PID算法最早从书面走向实践。与此同时,反馈控制原理开始应用于工业过程中。1936年英国的考伦德(A Callender)和斯蒂文森(A Stevenson)等人给出了 PID控制器的方法,自此PID算法正式形成了,并且后来在自动控制技术中占有非常重要的地位[2]。

PID校正装置是用比例(Proportional)、积分(Integral)和微分(Derivative)控制规律组成的串联校正装置,使用方便,适应性强,易于工程实现。而且根据需要,可以变形为P、PI或PID等类型调节器。目前在理论上已经证明,对于过程控制的典型对象——“一阶滞后+纯滞后”与“二阶滞后+纯滞后”的控制对象,PID控制器是一种最优控制。

二、Principles of PID Control and PID Parameters

PID控制的主要过程是通过对被控对象的当前值进行采样,并计算采样值与期望值的偏差,再将这个偏差反馈给PID控制器,从而调整对被控对象的输入(执行器的输出)。这里的偏差指给定量与反馈量之差,可以量测;而我们常说的误差为系统输出的实际值与期望值之差,无法量测,只有数学意义。偏差存在极性,有正偏差和负偏差之分。

PID控制器(比例-积分-微分控制器),由比例单元(Proportion)、积分单元(Integral)和微分单元(Derivative)组成,通过Kp, Ki和Kd三个参数进行设定。

Kp(比例系数)代表了当前的信息,起纠正偏差的作用,使反应迅速;

Kd(微分系数)代表了将来的信息,在过程开始时强迫过程进行,过程结束时减小超调,克服振荡,提高系统的稳定性,加快系统的过渡过程;

Ki(积分系数)代表了过去积累的信息,它能消除静差,改善系统的静态特性。

采用PID调节器,往往并不需要知道于控制对象的精确数学模型,这是它的优点,但也正因如此,其参数通常也都是根据经验在线整定,以便得到满意的控制效果[3][4]。

三、Parameter tuning of PID controller

PID调节器各增益参数增加对系统时域指标的影响如下[5]:

需要设定的值有:

·目标值(Setpoint)
·pid参数(Kp,Ki,Kd)
·输出极限(Output Limits)
·采样时间(Sample Time)

PID控制整定法有理论计算法和经验整定法两种。

经验法

首先需要注意的是,由于闭环调节的影响因素,PID参数是无法通过数学建模的方式获取的,只有通过实际调试获得参数。即便如此,我们仍可以给出一些保守的PID参数作为初值,见下表:

一般采用的是临界比例法(属于工程整定法)。

工程整定法主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。(简单来讲就是试凑)[1]。

临界比例法

一般采用的是临界比例法(属于工程整定法)。

工程整定法主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。(简单来讲就是试凑)。

PID调节的实质在于取得快速性和稳定性的折中,利用该方法进行PID控制器参数的整定步骤如下:

(1)首先预选择一个足够短的采样时间让系统工作,输入设定为系统允许的最大值(输出极限)的60%~70%。 控制时间根据实际工艺过程决定,一般默认1s,通常建议先从默认值开始,再根据结果进行调整,由于电机PID调节无滞后,顾在效果不佳的情况下也可尝试缩短采样时间。

(2)仅加入P比例控制环节。 当手动调节PID控制器时,通常按照P,I,D的顺序调整参数。初调时,Kp选小一些,这是为了尽可能减小比例作用;然后慢慢调大,直到系统对输入的阶跃信号(Step Function)出现临界振荡,记下这时的比例放大系数和临界振荡周期。如果后续需要加入积分控制环节,则需设定Kp为当前值的60%~70%,这是因为当Kp调整至接近期望值后,Ki就开始减少到合适值,这会导致稳定性的降低,反过来Ki又需要减少;

临界是介于收敛和发散的一种过渡状态。临界振荡指等幅振荡。

(3)加入I积分控制环节。 积分系数初调时要把积分时间设置长些,这是为了减小积分作用;然后慢慢调小直到系统稳定为止,设定PID的积分时间常数Ti为当前值的150%~180%。

一般情况下到此为止

(4)D微分控制环节一般不用设定,待整定参数越多,则整定难度越大。如果通过比例、积分参数的调节还是收不到理想的控制要求,才调节微分时间。初调时把这个系数设小,然后慢慢调大,直到系统稳定。除了会导致调参复杂,不使用微分控制环节的原因是其易受噪声和其它扰动影响,并将其放大到更大的程度,导致稳定性降低。

References

[1] 线性系统的矫正方法——PID控制理论. CSDN.

[2] The PID Controller & Theory Explained. NI.com.

[3] PID控制算法原理(抛弃公式,从本质上真正理解PID控制). zhihu.com.

[4] PID控制. 古月居.

[5] Kiam Heong Ang, G. Chong and Yun Li, "PID control system analysis, design, and technology," in IEEE Transactions on Control Systems Technology, vol. 13, no. 4, pp. 559-576, July 2005, doi: 10.1109/TCST.2005.847331.

附录:用matlab实现倒立摆的pid控制

% 倒立摆PID控制程序

% 参数设置
m = 0.5;  % 摆杆质量
l = 0.25;  % 摆杆长度
g = 9.81;  % 重力加速度
I = m * l^2;  % 摆杆惯性矩

% 目标角度和初始角度
theta_desired = pi/4;  % 目标角度设定为45度
theta0 = 0;  % 初始角度为0度

% PID控制器参数
Kp = 10;  % 比例增益
Ki = 5;  % 积分增益
Kd = 2;  % 微分增益

% 时间步长和模拟时间
dt = 0.01;  % 时间步长
t_sim = 5;  % 模拟时间

% 初始化变量
theta = zeros(1, t_sim/dt + 1);  % 角度数组
theta_dot = zeros(1, t_sim/dt + 1);  % 角速度数组
theta_error = zeros(1, t_sim/dt + 1);  % 角度误差数组
theta_integral = 0;  % 角度误差积分
theta_prev = theta0;  % 上一时刻的角度

% 模拟
for t = 0:dt:t_sim
    % 计算角度误差和积分项
    theta_error_current = theta_desired - theta_prev;
    theta_integral = theta_integral + theta_error_current * dt;
    
    % 计算控制信号
    u = Kp * theta_error_current + Ki * theta_integral + Kd * (theta_error_current - theta_error(end))/dt;
    
    % 计算角度加速度
    theta_acc = (m * g * l * sin(theta_prev) - u) / I;
    
    % 更新角度和角速度
    theta_dot_next = theta_dot(end) + theta_acc * dt;
    theta_next = theta_prev + theta_dot_next * dt;
    
    % 更新变量
    theta(end+1) = theta_next;
    theta_dot(end+1) = theta_dot_next;
    theta_error(end+1) = theta_error_current;
    theta_prev = theta_next;
end

% 绘制图形
t = 0:dt:t_sim;
plot(t, theta);
xlabel('Time');
ylabel('Angle');
title('Inverted Pendulum PID Control');

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python tkinter (10) ——Combobox控件

本文主要是Python tkinter Combobox下拉控件介绍及使用示例。 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 Python tkinte…

Springboot入门教程详解

Springboot入门教程详解 博客主页:划水的阿瞒的博客主页 欢迎关注🖱点赞🎀收藏⭐留言✒ 系列专栏:Springboot入门教程详解首发时间:🎞2024年1月29日🎠 如果觉得博主的文章还不错的话&#xff0c…

【DeepLearning-10】yolo.py文件关键代码parse_model(d, ch)函数

这段代码功能是根据提供的配置字典(d)和输入通道列表(ch)来解析并构建一个YOLOv5模型。函数的核心工作是遍历模型的每一层,并根据配置创建相应的神经网络层。 我们可以在函数中为新增模块配置构造参数设置。 函数中 f…

MyBatis 如何整合 Druid 连接池?

Mybatis 如何整合 Druid 数据连接池呢&#xff1f;首先打开创建的 Maven 工程&#xff0c;找到 pom.xml 文件&#xff0c;添加 Druid 依赖。 <!--druid连接池--> <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId&…

MySQL-窗口函数 简单易懂

窗口函数 考查知识点&#xff1a; • 如何用窗口函数解决排名问题、Top N问题、前百分之N问题、累计问题、每组内比较问题、连续问题。 什么是窗口函数 窗口函数也叫作OLAP&#xff08;Online Analytical Processing&#xff0c;联机分析处理&#xff09;函数&#xff0c;可…

HCIP复习课(mpls实验)

1、IP配置&#xff1a; R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; R5&#xff1a; R6&#xff1a; R7&#xff1a; R8&#xff1a; 2、rip&#xff0c;ospf配置&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; R5&#xff1a; R6&#xff1a…

MySQL知识点总结(一)——一条SQL的执行过程、索引底层数据结构、一级索引和二级索引、索引失效、索引覆盖、索引下推

MySQL知识点总结&#xff08;一&#xff09;——一条SQL的执行过程、索引底层数据结构、一级索引和二级索引、索引失效、索引覆盖、索引下推 一条SQL的执行过程索引底层数据结构为什么不使用二叉树&#xff1f;为什么不使用红黑树?为什么不使用hash表&#xff1f;为什么不使用…

屏蔽系统热键/关机/注入 Winlogon(中)

1 前言 在新的内容开始前&#xff0c;我想整理一些旧文&#xff0c;这一框题展示了在以前的系统上实现在用户关机/重启/注销时弹出对话框的功能。为什么需要先讲这个部分&#xff1f;因为这一部分需要拦截的函数是截至 Win 8 系统&#xff0c;微软所采用的关机/重启等途径上的…

海外推广是企业必须面临和重视的问

随着中国半导体国际化进程的加快&#xff0c;越来越多的企业开始走向海外市场&#xff0c;对于企业出海来说&#xff0c;想要最大限度的提高曝光度&#xff0c;提升企业核心竞争力&#xff0c;做好海外推广是企业必须面临和重视的问题。萨科微(www.slkoric.com)半导体积极布局海…

海思SD3403,SS928/926,hi3519dv500,hi3516dv500移植yolov7,yolov8(12)

上一篇用MindStudio转换完yolov8的om模型,准备在板卡里进行推理验证了。 我这里用的是我们自己的Tofu5m模块,40mm40mm含外壳尺寸。可以输入网络RTSP视频流直接进行推理。这次用hi3516dv500版本的Tofu5m模块。 SDK里的demo部分是H.264视频输入,为了保持一致来验证,先改成H.…

金融行业现场故障处理实录

KL银行现场服务记录—HA故障 服务时间 2019年9月10日星期二 14&#xff1a;40 到2019年9月11日星期三 0&#xff1a;30 服务内容 排查redhat RHEL 6.4 一个节点cman启动故障。 &#xff08;1&#xff09;、查看系统日志&#xff1b; &#xff08;2&#xff09;、查看ha日志…

工业PoE交换机的应用场景有哪些?

工业PoE&#xff08;Power over Ethernet&#xff09;交换机是一种特殊设计用于工业环境的网络设备&#xff0c;它不仅具备普通交换机的网络连接功能&#xff0c;还能提供电源供给支持PoE设备。以下是工业PoE交换机的一些常见应用场景&#xff1a; 监控系统&#xff1a; 工业…

勒索病毒如何预防?用什么工具

勒索病毒进入服务器加密文件&#xff0c;让文件变得不能访问&#xff0c;我们经常可以见到这样的新闻&#xff0c;被勒索后没什么好的办法&#xff0c;只能交钱。 碰到言而有信的黑客还好。有时候交钱了&#xff0c;坏人也未必给你解密文件。 有什么工具可以预防这样的勒索病…

Windows Qt C++ VTK 绘制三维曲线

Qt 自带数据可视化从文档上看&#xff0c;只能实现三维曲面。 QwtPlot3D在Qt6.6.0上没编译通过。 QCustomPlot 只能搞二维。 VTK~搞起。抄官网demo。 后续需求&#xff1a; 1、对数轴 2、Y轴逆序 3、Z轴值给色带&#xff0c;类似等高线图的色带 期待各位大佬多多指导。…

免费开源的微信小程序源码、小游戏源码精选70套!

微信小程序已经成为我们日常的一部分了&#xff0c;也基本是每个程序员都会涉及的内容&#xff0c;今天给大家分享从网络收集的70个小程序源码。其中这些源码包含&#xff1a;小游戏到商城小程序&#xff0c;再到实用的工具小程序&#xff0c;以及那些令人惊叹的防各大站点的小…

【Linux】动态库和静态库——动态库和静态库的打包和使用、gcc编译、拷贝到系统默认的路径、建立软连接

文章目录 动态库和静态库1.静态库和动态库的介绍2.静态库的打包和使用2.1生成静态库2.2使用静态库的三种方式2.2.1gcc编译2.2.2拷贝到系统默认的路径2.2.3建立软连接 3.动态库的打包和使用3.1生成动态库3.2使用动态库3.3解决加载不到动态库的方法 动态库和静态库 1.静态库和动…

1月全志芯片开源项目分享合辑

1、柚子爱AI相机&#xff08;YuzuAI-YuzuMaix-AIoT-V831&#xff09; 本项目于去年4月首次发布&#xff0c;是基于V831的AI相机开源项目&#xff0c;经过几个版本的迭代&#xff0c;最终运用了叠层的设计来实现AI摄像头掌控板的奇葩组合。 开发板主控是全志V831&#xff0c;采…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖微信小程序端(十五)

用户端历史订单模块 1. 查询历史订单1.1 需求分析和设计1.2 代码实现1.2.1 user/OrderController1.2.2 OrderService1.2.3 OrderServiceImpl1.2.4 OrderMapper1.2.5 OrderMapper.xml1.2.6 OrderDetailMapper 2. 查询订单详情2.1 需求分析和设计2.2 代码实现2.2.1 user/OrderCon…

qt初入门7:进度条,定时器,时间控件练习

参考课本demo&#xff0c;空闲时间练习一下进度条&#xff0c;定时器&#xff0c;日期相关控件和使用。 1&#xff1a;demo运行结果 2&#xff1a;进度条控件梳理 进度条显示控件实际上是QProgressBar, 显示的进度可以通过代码控制&#xff0c;也可以通过其他控件上获取到的值…

【算法】BFS算法解决多源最短路问题(C++)

文章目录 前言那么什么是单源最短路 / 多源最短路呢&#xff1f;如何解决此类题&#xff1f;解法一解法二对于解法二&#xff0c;如何编写代码&#xff1f; 算法题542.01矩阵1020.飞地的数量1765.地图中的最高点1162.地图分析 前言 此前我们对 单源最短路 问题进行的讲解&…