PID控制(带代码),验证和调度

PID控制器都是控制领域的主力。PID控制器的目标是在系统中出现一些错误并将其减少到0.虽然还有许多其他控制策略,PID可能是最常见的(除非你计算人工控制),只是设置一个设定值。有许多先进的控制策略,但在大多数情况下,它们会比PID更相似或更差,并且要复杂得多。当其他方法做得更好时,通常只会少量。一个例外是如果你有一个设备模型及其操作条件,你可以创建一个前馈控制器(对博士生有好处),表现更好。然而,在许多情况下,使用带PID的反应控制是最简单,最快速的实现方法。
当我们谈论PID控制时,您应该记住每个字母代表控制器的不同模式。P表示比例元素,I表示积分元素,D表示微分元素。每个元素都有一个“term”,它与这些元素相乘。我们使用k是一个通用的恒定值,所以常数项(或收益)为K P,K ,和K d分别。根据您的申请,您可能会或可能不会拥有所有这三个条款。在许多应用程序中,您将只有PD或PI术语。
所以基本的问题是:如何在系统中转换错误以形成更好的新命令?
PID方程单击图像可查看更清晰/更大版本的方程式。
PID控制器有很多种形式。但这是大多数人都会关心的两个:
注意:e和e(t)是误差项,定义如下:e = desired_value - actual_value。通常,actual_value来自某个传感器,您必须检测当前值。
第一个是连续时间:


output(t)= \\(K_ {P} * e(t))+(K_ {I} * \ int_ {0} ^ {t} e(t)d_ {t})+(K_ {D} * \ frac {\ mathrm {d}} {\ mathrm {d} t} e(t))+偏见

第二个是离散时间,这是计算机控制应用中更常用的:

output = \\(K_ {P} * e)+(K_ {I} *(K_ {I} \ _ _ previous + e * iteration \ _time))+(K_ {D} * \ frac {e  -  e \ _prior} {iteration \ _time})+偏见

以下是PID控制器的离散版本的一些伪代码:
error_prior = 0 
integral = 0 
P =你需要出现的一些值(见下面的调整部分)
I =你需要出现的一些值(参见下面的调整部分)
D =你需要出现一些值(见下面的调整部分)
while(1){ 
    error = desired_value - actual_value 
    integral = integral +(error * iteration_time)
    derivative =(error - error_prior)/ iteration_time 
    output = K P * error + K I * integral + K D * derivative + bias 
    error_prior = error 
    sleep (iteration_time)
}
从实现的角度来看,离散方法更有用。在理解和调整控制器时,持续的方法对您来说很重要。
另外,虽然你通常没有看到偏置项被添加到过滤器中,但我喜欢把它放在以防万一其他总和为0我将不会有0作为输出。这不是严格需要的,但在很多情况下都很好。偏差项通常是一个小值(<1)。

条款

所以现在我们知道这个控制器的形式,我们可以看看每个术语的作用。

比例期限(K P

比例项是控制错误的主要术语。这会直接缩放您的错误,因此使用较小的K P时,控制器将进行较小的尝试以最小化错误,并且使用较大的K P,控制器将进行较大的尝试。如果K P太小,您可能永远不会最小化错误(除非您使用D和I术语)并且无法响应影响系统的更改,并且如果K P太大,您可能会出现不稳定(即。奇怪的振荡)过滤器严重超过所需的值。

积分项(K I

积分项使控制器能够处理随时间累积的错误。当您需要处理错误稳态错误时,这很好。问题是,如果你有一个大的K 我,你试图纠正错误随着时间的推移,所以它可能会干扰你的响应,以处理当前的变化。该术语通常是PID控制器不稳定的原因。

衍生术语(K D

衍生术语是关注系统在时间间隔之间的表现。这有助于抑制系统以提高稳定性。许多电机控制器只允许您配置PI控制器。

我需要哪种P,I和D的排列?

在许多应用程序中,您不会使用所有3个术语。那么为什么不总是使用所有3个术语呢?您使用的术语越少,控制器就越容易理解和实现。此外,您很快就会看到一些模式可能会导致控件不稳定(例如极端振动)。
几乎每个过滤器都有P项。所以我们假设K P在我们的过滤器中。现在问题是我想在我的过滤器中添加I,D,或两者。
如果你想要,你只能有一个P项。这是最简单的控制器类型,因为您只使用一个值。缺点是您的控制器不会因突然和持续的错误而平稳地纠正自己。
如果添加D项,您将更容易受到噪声和随机值的影响。因此,如果您有非常嘈杂的数据或传感器测量的随机脉冲,您可能希望将D项保留。将D术语排除在外的缺点是您没有响应那些可能合法的随机值,因此您的响应时间会变慢。这方面的一个例子是,如果您的电机撞到岩石,则需要更长的时间才能增加您的指令值,因为您没有看到错误随时间变化的情况。但是,如果您正在使用机器人手臂,则可能需要D术语,以便您可以快速响应不断变化的力量。
我的术语变得棘手。在许多情况下,您将需要I term,以便您可以从缓慢累积的错误中恢复。缺点是I术语的反应很慢。这种缓慢可能导致您的控制不稳定。

如何调整过滤器?

调整滤波器可能很困难,因为设备(比如电机)可能需要响应不同的条件。例如,如果您在没有负载的情况下调整电机,它可能无法在负载下达到最佳性能; 如果更改负载,则可能需要一组不同的值才能获得最佳控制。因此,您经常尝试找到一组在所有情况下都最佳的参数,并且对于任何给定的情况都不一定是最佳的。还有另一种方法,您可以在过滤器中使用不同的常量(K值),并根据系统中的实际值选择要使用的集合。
调整PID控制器的方法有很多种。我所知道的两种最好的方法是手动(我知道人们不喜欢依赖专家的手工制品)和Ziegler-Nichols方法。据说我发现通过手动调整系统可以获得更好的结果,但是你可以使用Ziegler-Nichols方法作为起点。(接下来的两个小节主要来自维基百科)。

手动调整

如果系统在线,则一种调整方法是首先将K I和K D值设置为零。增加K P直到环路输出振荡(或只是表现良好),然后K P应该设置为“四分之一振幅衰减”类型响应的该值的大约一半。然后增加K I,直到在足够的时间内校正任何偏移量。然而,过多的ķ 就会导致不稳定。最后,如果需要,增加K D,直到过冲最小化。但是,K D太多了将导致缓慢的反应和迟缓。快速PID回路调谐通常会略微超调以更快地达到设定点; 然而,一些系统不能接受过冲,在这种情况下需要过阻尼闭环系统,这将要求K P设置显着小于引起振荡的K P设置的一半。
PID手动调整

齐格勒 - 尼科尔斯

另一种启发式调整方法正式称为Ziegler-Nichols方法,由John G. Ziegler和Nathaniel B. Nichols在20世纪40年代引入。如在上面的方法中,首先将K I和K D增益设置为零。比例增益增加,直到达到最终增益K U,环路输出开始振荡。K U和振荡周期P U用于设置增益,如图所示:
PID Ziegler Nichols的价值观

验证控制参数

通过在应用步进命令时查看输出波形,可以验证所选增益是否良好。如果在运动开始时有很多初始振铃(不断变化)或过冲,那么你的增益可能会很高。如果初始命令慢慢达到所需输出,则可能需要增加增益。
电机调谐图图显示常见的调整问题,然后是良好的响应曲线。蓝线是命令,红线是实际的电机输出。
在上面的图像中,从左侧开始,我们可以看到:
1。输出运动过冲,当信号稳定到命令时会发出一点信号振铃。稍微超调通常很好,但我们确实尽量减少过冲,同时仍然有一个响应系统。
2.输出响应慢。我们可能希望更快的响应,因此系统将不那么迟缓。当您使系统变得迟钝时,通常会增加过冲和不稳定的可能性。
3.非常不稳定。从一堆振荡开始,接着是命令输出的大量尖峰。我们想避免这个!
最后这个最右边的情节看起来不错。电机输出直接位于指令运动的顶部,具有非常轻微的过冲(如果你看得很近)。
检查刚刚调整的系统稳定性的下一步可以是波德绘图。点击这里了解它

增益调度

简而言之,增益调度允许您根据系统的性能选择不同的术语集。因此,您可以说如果速度小于或等于某个值,则使用一组PID项,如果速度大于该值,则使用一组不同的PID项。这通常用于非线性系统,因此您可以将其简化为几个(几乎)线性部分。如果控制器的某个区域需要更具侵略性,这也很好。

我希望这是有用的,快乐的调整!

用户喜欢...

stm32 PID调速控制直流无刷电机+ 源码

笔记 具备知识,stm32基础,了解无刷直流电机原理,pid控制原理 工具: 无刷直流电机:12v电源驱动,50HZ,占空比为5%的pwm波2秒以上解锁电调,再将占空比改为6%,则电机正常运行,改变占空比...


阿斯顿·马丁则将会在明年率先开卖155台纯电动RapidE

百公里加速1.9秒、号称最快量产车,特斯拉下一代Roadster去年11月已经推出就引起了一阵骚动,甚至抢去了本该是主角的电动卡车的风头。这下特斯拉的竞争对手们可就坐不住了。 比如阿斯顿马...


当AI取代双眼:NEC用机器学习挑产线不良品,提高产能效率

透过AI协助作业人员以肉眼检查,可大幅减少一半的工作量,也能使产品质量更为均一,进一步往物联网迈进。...


Zynq—Linux移植学习笔记(十四):RapidIO驱动开发

在对zynq进行Linux驱动开发时,除了需要针对zynq内ARM自带的控制器适配驱动外,还需要对zynq PL部分的IP核进行驱动开发。对于ARM来说,zynq PL部分的IP核就是一段地址空间,这段地址空间包含了...


利用串行RapidIO连接功能增强DSP协处理能力

作者:Xilinx公司平台解决方案部技术营销经理 Navneet 目前,对高速通信与超快计算的需求正与日俱增。有线和无线通信标准的应用随处可见,数据处理架构每天都在扩展。较为普遍的有线通信...


基于FPGA的RapidIO节点设计和实现

在传统的嵌入式多处理器系统中,处理器之间的互连是通过分时共享总线来实现的,所有通信争用总线带宽,由此就造成处理器越多,每个处理器可用带宽就越少, 从而带来严重的系统信息...


在FPGA基础上的神经元自适应PID控制器设计

随着4C 技术的迅猛发展,以及近十多年来智能控制技术的成就,智能控制在工业用仪器仪表和信息电器( IA)产业中得到了广泛应用,其实现手段也趋于多样化。采用FPGA 实现控制器与使用冯...


基于Xilinx System Generator的PID算法快速硬件实现

1 Xilinx System Generator简介 Xilinx System Generator 是专门为数字信号算法处理而推出的模型化设计平台,可以快速、简单地将DSP系统的抽象算法转换成可综合的、可靠的硬件系统,弥补了大部分对...


Vivado HLS 简化浮点PID控制器设计

作者:Daniele Bagni 赛灵思公司DsP 专家 电子邮箱:[email protected] Giulio Corradi 赛灵思公司IsM 高级系统架构师 电子邮箱:[email protected] 这种全新的赛灵思综合工具可将手动流程实现自动...


PID理论详解

PID控制是业内最常见的控制算法,在工业控制领域有很高的接受度。 PID控制器的广泛应用,得益于其在多种操作条件下稳定的性能,以及易操作的特性。工程师可以用简单直观的方式实现P...


RapidIO协议(二)

2.RapidIO互连协议Part I:输入/输出逻辑协议 2.1系统模型 这一章介绍RapidIO系统可能的设备单元。 2.1.1处理单元模型 图1-1描述了可能的基于RapidIO的计算机系统,处理元素是一个计算机设备,比...


RapidIO协议(一)

1.概述 1.1介绍 RapidIO是基于包交换互联协议,主要作为系统内部接口使用,如:芯片间、板间的通讯,速度能在GB/S数量级。如连接处理器、内存、内存映射的I/O设备。这些设备可能是网络设...


ADI为RapID Platform网络接口添加POWERLINK协议以提高设计灵活性和可靠性

ADI今日宣布为RapID Platform网络接口添加POWERLINK实时工业以太网协议,该接口由ADI公司的确定性以太网技术部门开发。...


在Zynq 7000平台上使用Linux spidev.c驱动

在上一篇博客中,介绍了如何配置Vivado下的硬件工程、例化SPI硬件接口和如何使用petalinux加载Xilinx提供的SPI总线驱动,如果要通过SPI控制外部器件,还需要添加SPI的设备驱动以实现SPI的对外控...


ARM, AMD加入RapidIO,共同开发64位处理器开发高速、多套接字相关互联标准

作者:Steve Leibson, 赛灵思战略营销与业务规划总监 ARM和AMD宣布,他们加入RapidIO.org,跟标准组织的现有成员一起为多个64位ARM处理器相连开发开源规范。RapidIO是一个开放标准的基于数据包交换...


FPGA图像处理项目(四)--二维FFT RapidIO

今天把RapidIO核已经加上,相应的target user代码也已经完成,最后把VxWorks上的代码也进行了相应的调整,整个项目算是大功告成了。最后写一个简要的文档把RapidIO与Vxworks中关键的地方进行下描...