[控制理论]—位置式PID与增量式PID

位置式PID与增量式PID

1.位置式PID

按模拟PID控制算法,以一系列的采样时刻点kT代表连续时间t,以矩形法数值积分近似代替积分,以一阶后向差分近似代替微分,即:
t ≈ k T ( k = 0 , 1 , 2... ) ∫ o t e r r o r ( t ) d t ≈ T ∑ j = 0 k e r r o r ( j T ) ≈ T ∑ j = 0 k e r r o r ( j ) d e r r o r ( t ) d t ≈ e r r o r ( k T ) − e r r o r ( ( k − 1 ) T ) T = e r r o r ( k ) − e r r o r ( k − 1 ) T t≈kT (k=0,1,2...) \\ \int_o^terror(t)dt ≈T\sum_{j=0}^kerror(jT)≈T\sum_{j=0}^kerror(j) \\ \frac{\mathrm{d}error(t)}{\mathrm{d}t}≈\frac{error(kT)-error((k-1)T)}{T}=\frac{error(k)-error(k-1)}{T} tkTk=0,1,2...oterror(t)dtTj=0kerror(jT)Tj=0kerror(j)dtderror(t)Terror(kT)error((k1)T)=Terror(k)error(k1)
可得离散PID表达式:
u ( k ) = k p ( e r r o r ( k ) + T T I ∑ j = 0 k e r r o r ( j ) + T D T ( e r r o r ( k ) − e r r o r ( k − 1 ) ) ) u ( k ) = k p e r r o r ( k ) + k i ∑ j = 0 k e r r o r ( j ) T + k d e r r o r ( k ) − e r r o r ( k − 1 ) T u(k)=k_p(error(k)+\frac{T}{T_I}\sum_{j=0}^kerror(j)+\frac{T_D}{T}(error(k)-error(k-1))) \\ u(k)=k_perror(k)+k_i\sum_{j=0}^kerror(j)T+k_d\frac{error(k)-error(k-1)}{T} u(k)=kp(error(k)+TITj=0kerror(j)+TTD(error(k)error(k1)))u(k)=kperror(k)+kij=0kerror(j)T+kdTerror(k)error(k1)

k_p = 1;  
k_i = 1; 
k_d = 1;  
T = 0.1;  N = 100;  
error = zeros(1, N);  
u = zeros(1, N);  
error_sum = 0;  setpoint = 1;
output = 0; for k = 1:Nerror(k) = setpoint - output;error_sum = error_sum + error(k);% 计算微分项if k > 1d_error = (error(k) - error(k-1)) / T;elsed_error = 0;  endu(k) = k_p * error(k) + k_i * error_sum * T + k_d * d_error;output = output + u(k);  end% 绘制控制输入和输出的变化
figure;
plot(1:N, u, 'r', 'LineWidth', 2);
title('PID Control Input u(k)');
xlabel('Time step k');
ylabel('Control Input u(k)');

2.增量式PID

当执行机构需要的是控制量的增量(如驱动步进电机)时,应采用增量式PID控制。根据地推原理可得:
u ( k − 1 ) = k p ( e r r o r ( k − 1 ) + k i ∑ j = 0 k − 1 e r r o r ( j ) + k d ( e r r o r ( k − 1 ) − e r r o r ( k − 2 ) ) ) u(k-1)=k_p(error(k-1)+k_i\sum_{j=0}^{k-1}error(j)+k_d(error(k-1)-error(k-2))) u(k1)=kp(error(k1)+kij=0k1error(j)+kd(error(k1)error(k2)))

递推原理解释:

为什么在离散时间系统的递推关系中,通常只涉及到前两次输出 y_1, y_2 和前两次输入 u_1, u_2,而不是更多次的输入和输出。

离散时间系统的阶数

在离散时间系统的递推关系中,实际使用的输入和输出的“历史”数量与系统的阶数(或传递函数的阶数)直接相关。阶数决定了系统的动态响应的复杂性,阶数较低的系统只需要考虑少量的过去输出和输入,而阶数较高的系统则需要更多的过去输出和输入。

  • 如果我们有一个 二阶(second-order)系统,通常递推公式只涉及到 前两次的输入和输出,因为它已经足够描述系统的动态行为。
  • 对于一个 三阶 或更高阶的系统,递推公式则可能会涉及更多的历史输入和输出。

阶数的概念来源于系统的传递函数的分母和分子阶数。具体来说,离散时间系统的递推关系来源于传递函数的分子和分母的多项式。假设传递函数是这样的形式:

G ( z ) = n u m 0 + n u m 1 z − 1 + n u m 2 z − 2 1 + d e n 1 z − 1 + d e n 2 z − 2 G(z) = \frac{num_0 + num_1 z^{-1} + num_2 z^{-2}}{1 + den_1 z^{-1} + den_2 z^{-2}} G(z)=1+den1z1+den2z2num0+num1z1+num2z2

在这个传递函数中,分母的阶数决定了当前输出(y(k))与前几次输出(y(k-1), y(k-2) 等)之间的关系。分子的阶数决定了输入(u(k), u(k-1) 等)如何影响输出。

  • 分母阶数(如 den_1, den_2 决定了系统输出如何依赖于过去的输出(反馈)。
  • 分子阶数(如 num_1, num_2 决定了系统输出如何依赖于过去的输入。

为什么是有限次的历史输入和输出

系统的阶数决定了历史输入和输出的个数

  • 有限阶系统: 大多数实际控制系统在设计时会选择一个有限阶数,这意味着输出 y(k) 只与系统的有限个历史输出和输入有关。也就是说,通常情况下我们只关心系统的前两次或前三次输出和输入,而不需要考虑无限次历史数据。

  • 高阶系统: 对于一个 n阶 系统,递推公式中最多会包含 n 次历史输出和 n 次历史输入。换句话说,一个 二阶系统(如你提供的示例)只考虑前两次输出和输入。若是一个 三阶系统,则递推公式会涉及前三次输出和输入。

在现实中,大多数系统都可以通过相对较低阶的模型来很好地近似其行为,因此通常只使用前两次(或最多前三次)的输入和输出数据进行计算。

递推关系的稳定性
  • 系统的稳定性 与系统阶数、系数以及历史输入输出的数量紧密相关。随着历史数据(如输入和输出的次数)增加,递推公式可能会变得更复杂,但也更难以稳定计算。而在大多数实际应用中,二阶或三阶系统已经足够描述系统的动态行为。

离散化和系统的记忆性

在离散时间系统中,系统的记忆性(即系统如何依赖过去的状态)与其阶数和传递函数的结构紧密相关。离散时间传递函数的分子和分母系数表示了系统的因果关系记忆特性。对于一个阶数较低的系统,它通常只有有限的“记忆”,即它只会受到过去有限次输入和输出的影响。

示例:二阶系统的递推关系

假设我们有一个二阶离散时间系统,其传递函数形式为:

G ( z ) = n u m 2 z − 1 + n u m 3 z − 2 1 + d e n 1 z − 1 + d e n 2 z − 2 G(z) = \frac{num_2 z^{-1} + num_3 z^{-2}}{1 + den_1 z^{-1} + den_2 z^{-2}} G(z)=1+den1z1+den2z2num2z1+num3z2

从这个传递函数可以看出,系统的输出 y(k) 依赖于输入的前两次 u_1u_2,以及输出的前两次 y_1y_2。它的递推关系通常表示为:

y ( k ) = − d e n 1 y ( k − 1 ) − d e n 2 y ( k − 2 ) + n u m 2 u ( k − 1 ) + n u m 3 u ( k − 2 ) y(k) = -den_1 y(k-1) - den_2 y(k-2) + num_2 u(k-1) + num_3 u(k-2) y(k)=den1y(k1)den2y(k2)+num2u(k1)+num3u(k2)

这个公式表示当前输出 y(k) 与前两次输出 y(k-1)y(k-2) 以及前两次输入 u(k-1)u(k-2) 之间的线性关系。

为什么不考虑更多次的输入和输出

  • 简化模型: 在大多数实际应用中,控制系统的动态行为可以通过较低阶的递推关系来描述,更多次的历史输入输出可能会带来冗余,并且计算复杂度会大大增加。
  • 系统物理特性: 大多数物理系统或控制系统的动态行为通常是局部的,即它们的响应对过去的状态有一定的衰减。超过一定数量的过去状态,系统的响应会变得微不足道,因此不需要更多次的历史输入和输出。
  • 计算效率: 考虑更多次的历史输入和输出会显著增加计算的复杂度,尤其是对于实时系统或嵌入式系统来说,过多的历史数据可能导致计算资源的浪费。

结论

  • 系统阶数决定了在递推关系中需要考虑多少次的历史输入和输出。一个二阶系统通常只需要考虑前两次的输出和输入,而三阶系统则需要考虑前三次。
  • 大多数实际控制系统是基于有限阶数设计的,通常不需要更多次的历史输入和输出来准确描述系统行为。

通过这些理由,线性递推关系通常只涉及到系统阶数所决定的有限个历史输入和输出。

增量式PID控制算法:
Δ u ( k ) = u ( k ) − u ( k − 1 ) Δ u ( k ) = k p ( e r r o r ( k ) − e r r o r ( k − 1 ) ) + k i e r r o r ( k ) + k d ( e r r o r ( k ) − 2 e r r o r ( k − 1 ) + e r r o r ( k − 2 ) ) \Delta u(k)=u(k)-u(k-1) \\ \Delta u(k)=k_p(error(k)-error(k-1))+k_ierror(k)+k_d(error(k)-2error(k-1)+error(k-2)) Δu(k)=u(k)u(k1)Δu(k)=kp(error(k)error(k1))+kierror(k)+kd(error(k)2error(k1)+error(k2))
增量式PID由于不需要累加,控制增量u(k)仅与最近k次的采样有关,所以误动作时影响小,而且比较容易通过甲醛处理获得比较好的控制效果。

根据增量式PID控制算法,设计仿真程序,被控对象如下:
G ( s ) = 400 s 2 + 5 s G(s)=\frac{400}{s^2+5s} G(s)=s2+5s400
PID控制参数:kp=8,ki=0.1,kd=10。

% incerment pid controllerclear all;
close all;ts = 0.001;
sys = tf(400,[1,50,0]);
dsys=c2d(sys, ts, 'z');
[num, den] = tfdata(dsys, 'v');u_1 = 0.0;
u_2 = 0.0;
u_3 = 0.0;y_1 = 0;
y_2 = 0;
y_3 = 0;x = [0, 0, 0]';error_1 = 0;
error_2 = 0;for k =1:1:1000time(k) = k*ts;yd(k) = 1.0;kp = 8;ki = 0.1;kd = 10;du(k) = kp*x(1) + kd*x(2) + ki*x(3);u(k) = u_1 + du(k);if u(k)>=10u(k) = 10;endif u(k)<= -10u(k) = -10;endy(k) = -den(2)*y_1 - den(3)*y_2 + num(2)*u_1 + num(3)*u_2;error = yd(k)-y(k);u_3 = u_2; u_2 = u_1; u_1 = u(k);y_3 = y_2; y_2 = y_1; y_1 = y(k);x(1) = error - error_1;                % px(2) = error - 2*error_1 + error_2;    % dx(3) = error;                          % ierror_2 = error_1; error_1 = error;
endfigure(1);
plot(time, yd, 'r', time, y, 'k', 'LineWidth', 2);
xlabel('time(s)'); ylabel('yd,y');
legend('ideal position value', 'tracking position value');

图像为:

在这里插入图片描述

3.位置式与增量式区别

比较项位置式 PID增量式 PID
控制量计算方式控制量 ( u(k) ) 是当前误差、误差积分、和误差微分的加权和。控制量增量 ( \Delta u(k) ),即当前控制量是上一时刻控制量加上增量。
公式形式( u(k) = k_p e(k) + k_i \sum_{j=0}^{k} e(j) T + k_d \frac{e(k) - e(k-1)}{T} )( \Delta u(k) = k_p e(k) + k_i e(k) T + k_d \frac{e(k) - e(k-1)}{T} ), ( u(k) = u(k-1) + \Delta u(k) )
误差依赖直接依赖于当前误差、历史误差的积累及误差变化。通过控制量的增量来调整系统,依赖于当前误差与上次误差差异。
系统初始化初始时,控制量为零或其他值,误差的历史会影响计算。初始时,控制量通常为零,系统通过增量逐渐调整。
计算复杂度需要计算误差的累积(积分项)和当前与上一时刻误差的差异(微分项)。仅计算当前误差与前一时刻误差差的增量,因此计算更简单。
控制量变化控制量直接根据所有历史误差计算,可能会导致较大的控制量变化。控制量变化平滑,由于控制量是基于增量计算的,避免了大幅度波动。
抗饱和能力如果没有适当的限制,可能出现控制量“饱和”现象(特别是积分项积累过多)。通常具有更好的抗饱和能力,因为控制量是增量形式,不会导致误差过度积累。
适应性对于系统动态变化较大的情况,可能导致调节不及时。更容易适应系统的变化,因为每次调整的是控制量的增量而非绝对控制量。
稳定性稍微不当的增益选择可能导致系统振荡或不稳定。增量控制通常更加平稳,避免了系统的不稳定。
优点1. 计算直接,适合大多数控制问题。1. 控制量变化平滑,避免了大幅波动和系统不稳定。
2. 适用于需要较大调节量的系统。2. 通常适应性较强,适合具有较高非线性和变化的系统。
缺点1. 控制量可能会过大,导致系统反应过于剧烈。1. 需要保存前一时刻的控制量,增加存储要求。
2. 积分项容易导致“积分风暴”,如果不限制,会造成饱和。2. 如果误差较大,控制效果可能较差,可能需要更精细的调节。

总结:

  1. 位置式 PID 通过绝对的控制量直接响应当前误差的情况,适用于大多数需要精确控制的系统。它的缺点是容易导致控制量的过度调节,特别是积分项可能引发“积分风暴”或饱和现象。

  2. 增量式 PID 通过增量调整控制量,避免了控制量的剧烈波动,通常具有更好的稳定性和抗饱和能力。它特别适用于对控制量变化要求平滑的系统,但由于增量控制的特性,当误差较大时,可能会需要更精细的增益调节。

在实际应用中,选择哪种方法要根据具体的系统特点和调节需求来决定。如果系统对控制量波动敏感或易于饱和,增量式PID可能更为合适。如果需要较大调整或精确的控制,位置式PID可能更具优势。

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

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

相关文章

【c++丨STL】list的使用

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 list简介 一、list的默认成员函数 构造函数(constructor) 析构函数 赋值重载 二、list的迭代器接口 迭代器的功能分类 三、list的容量…

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色&#xff0c;类似材质丢失 Addressable Play Mode Script加载模式 选择 Use Existiing Build 1.Unity 切换到 PC 平台&#xff0c;执行 Addressable Build 运行&#xff0c;加载 bundle 内的预制体 显示正常 2.Unit…

单片机学习笔记 6. 数码管动态显示

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示 目录 0、实现的功能 1、Keil工程 1-1 数码管动态显示 1-2 数组的定义与引用…

车企如何实现安全图纸外发管理

车企面临着日益增长的数据交换需求&#xff0c;尤其是设计图纸等敏感数据的外发管理。如何确保这些数据在传输过程中的安全性和效率&#xff0c;是车企急需解决的问题。我们将从几个关键性的因素上来分析一下怎么实现安全图纸外发管理。 统一管理与授权 采用专业的文件交换系统…

第7章 硬件测试-7.1 硬件调试

第7章 硬件测试 7.1 硬件调试7.1.1 电路检查7.1.2 电源调试7.1.3 时钟调试7.1.4 主芯片及外围小系统调试7.1.5 存储器件和串口外设调试7.1.6 其他功能模块调试 测试是每项成功产品的必经环节。硬件测试是评估产品质量的重要方法&#xff0c;产品质量是公司的信誉和品牌象征&…

Qt5/QPainter/画家

目录 1.绘制文字 1.1案例 1.2代码 2.画线 2.1案例 2.2代码 3.绘制矩形 3.1代码 4.绘制椭圆和圆 4.1椭圆 4.2圆 5.圆弧 5.1案例: 5.2代码 6.扇形 6.1案例 6.2代码: 7.更改绘画的颜色和粗细 7.1案例 ​编辑 7.2代码 1.绘制文字 1.1案例 通过三种不同的绘…

一篇保姆式centos/unbantu安装docker

前言&#xff1a; 本章节分别演示centos虚拟机&#xff0c;unbantu虚拟机进行安装docker。 上一篇介绍&#xff1a;docker一键部署springboot项目 一&#xff1a;centos 1.卸载旧版本 yum remove docker docker-client docker-client-latest docker-common docker-latest do…

fetch API和XHR

文章目录 一、基本写法1. XMLHttpRequest&#xff08;XHR&#xff09;2. Fetch API 二、兼容性1. XMLHttpRequest&#xff08;XHR&#xff09;2. Fetch API 三、Promise支持1. XMLHttpRequest&#xff08;XHR&#xff09;2. Fetch API 四、请求响应1. XMLHttpRequest&#xff0…

Photoshop(PS)——人像磨皮

1.新建一个文件&#xff0c;背景为白色&#xff0c;将图片素材放入文件中 2.利用CtrlJ 复制两个图层出来&#xff0c;选择第一个拷贝图层&#xff0c;选择滤镜---杂色---蒙尘与划痕 3.调整一下数值&#xff0c;大概能够模糊痘印痘坑&#xff0c;点击确定。 4.然后选择拷贝2图层…

Elasticsearch retrievers 通常与 Elasticsearch 8.16.0 一起正式发布!

作者&#xff1a;来自 Elastic Panagiotis Bailis Elasticsearch 检索器经过了重大改进&#xff0c;现在可供所有人使用。了解其架构和用例。 在这篇博文中&#xff0c;我们将再次深入探讨检索器&#xff08;retrievers&#xff09;。我们已经在之前的博文中讨论过它们&#xf…

《设计模式》创建型模式总结

目录 创建型模式概述 Factory Method: 唯一的类创建型模式 Abstract Factory Builder模式 Prototype模式 Singleton模式 最近在参与一个量化交易系统的项目&#xff0c;里面涉及到用java来重构部分vnpy的开源框架&#xff0c;因为是框架的搭建&#xff0c;所以会涉及到像…

c++类对象练习

#include <iostream> #include <cstring>using namespace std;class mystring {char* buf; public:mystring(); //构造函数mystring(const char* str); //构造函数void show(); //输出函数void setmystr(const mystring str); //设置函数const char* getmystr() co…

CH03_反射

第3章&#xff1a;反射 本章目标 掌握反射的原理 熟悉反射的基本运用 本章内容 反射是什么 C# 编译运行过程 首先我们在VS点击编译的时候&#xff0c;就会将C#源代码编译成程序集 程序集以可执行文件 (.exe) 或动态链接库文件 (.dll) 的形式实现 程序集中包含有Microsoft …

多品牌摄像机视频平台EasyCVR视频融合平台+应急布控球:打造城市安全监控新体系

在当今快速发展的智慧城市和数字化转型浪潮中&#xff0c;视频监控技术已成为提升公共安全、优化城市管理、增强应急响应能力的重要工具。EasyCVR视频监控平台以其强大的多协议接入能力和多样化的视频流格式分发功能&#xff0c;为用户提供了一个全面、灵活、高效的视频监控解决…

数据结构 (3)线性表的概念及其抽象数据类型定义

一、线性表的概念 定义&#xff1a;线性表是指具有相同数据类型的n个数据元素的有限序列。可以表示为L(a1,a2,…,ai,…,an)&#xff0c;其中a1是第一个元素&#xff0c;称为表头&#xff1b;an是最后一个元素&#xff0c;称为表尾。 特点&#xff1a; 有序性&#xff1a;线性表…

Java基础——继承和多态

目录 一、继承 继承的定义&#xff1a; 继承的基本用法&#xff1a; 如何调用父类的方法&#xff1f; 二、多态 多态性的好处 多态中的强制类型转换&#xff1a; 包的命名规则——域名倒叙 一、继承 继承的定义&#xff1a; 继承是面向对象编程中的一种机制&#xff0c…

播放器开发之ffmpeg 硬件解码方案

硬件编解码的概念 硬件编解码是⾮CPU通过烧写运⾏视频加速功能对⾼清视频流进⾏编解码&#xff0c;其中⾮CPU可包括GPU、FPGA或者 ASIC等独⽴硬件模块&#xff0c;把CPU⾼使⽤率的视频解码⼯作从CPU⾥分离出来&#xff0c;降低CPU的使⽤负荷&#xff0c;使得平台能 ⾼效且流畅…

计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

【C#】面向对象:矩形类计算周长和面积

文章目录 一、矩形类的设计与实现1.1 矩形类的属性1.2 矩形类的构造函数1.3 矩形类的方法1.4 代码实现1.4.1 运行 一、矩形类的设计与实现 题目&#xff1a;编写一个矩形类&#xff0c;私有数据成员为举行的长(Len)和宽(Wid)&#xff0c;无参构造函数将len和wid设置为0&#x…

【PyTorch][chapter 28] 揭秘 Transformer:缩放定律指南

概括 我们介绍了 LLM 的各种缩放定律&#xff0c;研究了模型损失如何随着训练数据和参数数量的增加而变化。讨论包括对用于解释 LLM 缩放定律的 IsoLoss 轮廓和 IsoFLOPs 切片的解释&#xff0c;从而为优化计算资源提供了见解。 最后&#xff0c;我们讨论了 FLOP 和 FLOPS 的概…