PID控制器

PID控制器（比例-积分-微分控制器），由比例单元（Proportional）、积分单元（Integral）和微分单元（Derivative）组成。可以透过调整这三个单元的增益formula_1，formula_2和formula_3来调定其特性。PID控制器主要适用于基本上线性，且动态特性不随时间变化的系统。
PID控制器是一个在工业控制应用中常见的回授回路部件。这个控制器把收集到的数据和一个参考值进行比较，然后把这个差别用于计算新的输入值，这个新的输入值的目的是可以让系统的数据达到或者保持在参考值。PID控制器可以根据历史数据和差别的出现率来调整输入值，使系统更加准确而稳定。
PID控制器的比例单元（P）、积分单元（I）和微分单元（D）分别对应目前误差、过去累计误差及未来误差。若是不知道受控系统的特性，一般认为PID控制器是最适用的控制器。借由调整PID控制器的三个参数，可以调整控制系统，设法满足设计需求。控制器的响应可以用控制器对误差的反应快慢、控制器过冲的程度及系统震荡的程度来表示。不过使用PID控制器不一定保证可达到系统的最佳控制，也不保证系统稳定性。
有些应用只需要PID控制器的部份单元，可以将不需要单元的参数设为零即可。因此PID控制器可以变成PI控制器、PD控制器、P控制器或I控制器。其中又以PI控制器比较常用，因为D控制器对回授杂讯十分敏感，而若没有I控制器的话，系统不会回到参考值，会存在一个误差量。
反馈回路基础.
PID回路是要自动实现一个操作人员用量具和控制旋钮进行的工作，这个操作人员会用量具测系统输出的结果，然后用控制旋钮来调整这个系统的输入，直到系统的输出在量具上显示稳定的需求的结果，在旧的控制文档里，这个过程叫做“复位”行为，量具被称为“测量”，需要的结果被称为“设定值”而设定值和测量之间的差别被称为“误差”。
一个控制回路包括三个部分：
控制器从传感器得到测量结果，然后用需求结果减去测量结果来得到误差。然后用误差来计算出一个对系统的纠正值来作为输入结果，这样系统就可以从它的输出结果中消除误差。
在一个PID回路中，这个纠正值有三种算法，消除目前的误差，平均过去的误差，和透过误差的改变来预测将来的误差。
比如说，假如利用水箱在为植物提供水，水箱的水需要保持在一定的高度。可以用传感器来检查水箱里水的高度，这样就得到了测量结果。控制器会有一个固定的用户输入值来表示水箱需要的水面高度，假设这个值是保持65％的水量。控制器的输出设备会连在由马达控制的水阀门上。打开阀门就会给水箱注水，关上阀门就会让水箱里的水量下降。这个阀门的控制信号就是控制变量。
PID控制器可以用来控制任何可被测量及可被控制变量。比如，它可以用来控制温度、压强、流量、化学成分、速度等等。汽车上的巡航定速功能就是一个例子。
一些控制系统把数个PID控制器串联起来，或是连成网络。这样的话，一个主控制器可能会为其他控制输出结果。一个常见的例子是马达的控制。控制系统会需要马达有一个受控的速度，最后停在一个确定的位置。可由一个子控制器用来管理速度，但是这个子控制器的速度是由控制马达位置的主控制器来管理的。
连合和串联控制在化学过程控制系统中相当常见。
历史及应用.
PID控制器可以追溯到1890年代的设计。PID控制器是在船舶自动操作系统中渐渐发展。1911年开发的控制器是最早期PID型控制器的其中之一，而第一个发表PID控制器理论分析论文的是俄裔美国工程师。米诺尔斯基当时在设计美国海军的自动操作系统，他的设计是基于对舵手的观察，控制船舶不只是依目前的误差，也考虑过去的误差以及误差的变化趋势，后来米诺尔斯基也用数学的方式加以推导。他的目的是在于稳定性，而不是泛用的控制，因此大幅的简化了问题。比例控制可以在小的扰动下有稳定性，但无法消除稳态误差，因此加入了积分项，后来也加入了微分项。
当时在新墨西哥号战舰上进行测试，利用控制器控制舵的角速度，利用PI控制器可以角度误差维持在±2°以内，若加上D控制，角度误差维持在±1/6°，比最好的舵手还要好。
不过因为海军人员的抗拒，海军那时候未使用这套系统，在1930年代也有其他人作出类似的研究。
在自动控制发展的早期，用机械设备来实现PID控制，是由杠杆、弹簧、阻尼及质量组成，多半会用压缩气体驱动。气动控制器还一度是工业上的标准。
电子的类比控制器可以用电晶体、真空管、电容器及电阻器组成。许多复杂的电子系统中常会包括PID控制，例如磁碟的读写头定位、电源供应器的电源条件、甚至是现代地震仪的运动侦测线路。现代电子控制器已大幅的被这些利用单晶片或FPGA来实现的数位控制器所取代。
现代工业使用的PID控制器多半会用PLC或有安装面板的数位控制器来实现。软体实现的好处是相对低廉，配合PID实现方式调整的灵敏度很大。在工业锅炉、塑胶射出机械、烫金机及包装行业中都会用到PID控制。
变化的电压输出可以用PWM来实现，也就是固定周期，依要输出的量去调整周期中输出高电位的时间。对于数位系统，其时间比例有可能是离散的，例如周期是二秒，高电位时间设定单位为0.1秒，表示可以分为20格，精度5%，因此存在一量化误差，但只要时间解析度够高，就会有不错的效果。
理论.
PID是以它的三种纠正算法而命名。受控变数是三种算法（比例、积分、微分）相加后的结果，即为其输出，其输入为误差值（设定值减去测量值后的结果）或是由误差值衍生的信号。若定义formula_4为控制输出，PID演算法可以用下式表示：
其中
用更专业的话来讲，PID控制器可以视为是频域系统的滤波器。在计算控制器最终是否会达到稳定结果时，此性质很有用。如果数值挑选不当，控制系统的输入值会反复振荡，这导致系统可能永远无法达到预设值。
PID控制器的一般转移函数是：
其中"C"是一个取决于系统带宽的常数。
比例控制项.
比例控制考虑当前误差，误差值和一个正值的常数Kp（表示比例）相乘。Kp只是在控制器的输出和系统的误差成比例的时候成立。比如说，一个电热器控制器是在目标温度和实际温度差10°C时有100%的输出，而其目标值是25°C。那么它在15°C的时候会输出100%，在20°C的时候会输出50%，在24°C的时候输出10％，注意在误差是0的时候，控制器的输出也是0。
比例控制的输出如下：
若比例增益大，在相同误差量下，会有较大的输出，但若比例增益太大，会使系统不稳定。相反的，若比例增益小，若在相同误差量下，其输出较小，因此控制器会较不敏感的。若比例增益太小，当有干扰出现时，其控制信号可能不够大，无法修正干扰的影响。
稳态误差.
比例控制在误差为0时，其输出也会为0。若要让受控输出为非零的数值，就需要产生一个稳态误差或偏移量。
积分控制项.
积分控制考虑过去误差，将误差值过去一段时间和（误差和）乘以一个正值的常数Ki。Ki从过去的平均误差值来找到系统的输出结果和预定值的平均误差。一个简单的比例系统会震荡，会在预定值的附近来回变化，因为系统无法消除多余的纠正。通过加上负的平均误差值，平均系统误差值就会渐渐减少。所以，最终这个PID回路系统会在设定值稳定下来。
积分控制的输出如下：
积分控制会加速系统趋近设定值的过程，并且消除纯比例控制器会出现的稳态误差。积分增益越大，趋近设定值的速度越快，不过因为积分控制会累计过去所有的误差，可能会使回授值出现过冲的情形。
微分控制项.
微分控制考虑将来误差，计算误差的一阶导，并和一个正值的常数Kd相乘。这个导数的控制会对系统的改变作出反应。导数的结果越大，那么控制系统就对输出结果作出更快速的反应。这个Kd参数也是PID被称为可预测的控制器的原因。Kd参数对减少控制器短期的改变很有帮助。一些实际中的速度缓慢的系统可以不需要Kd参数。
微分控制的输出如下：
微分控制可以提升整定时间及系统稳定性。不过因为纯微分器不是因果系统，因此在PID系统实现时，一般会为微分控制加上一个低通滤波器以限制高频增益及杂讯。实际上较少用到微分控制，估计PID控制器中只有约20%有用到微分控制。
参数调试.
PID的参数调试是指透过调整控制参数（比例增益、积分增益/时间、微分增益/时间）让系统达到最佳的控制效果。稳定性（不会有发散性的震荡）是首要条件，此外，不同系统有不同的行为，不同的应用其需求也不同，而且这些需求还可能会互相冲突。
PID只有三个参数，在原理上容易说明，但PID参数调试是一个困难的工作，因为要符合一些特别的准则，而且PID控制有其限制存在。历史上有许多不同的PID参数调试方式，包括齐格勒－尼科尔斯方法等，其中也有一些已申请专利。
PID控制器的设计及调试在概念上很直觉，但若有多个（且互相冲突）的目标（例如高稳定性及快速的暂态时间）都要达到的话，在实际上很难完成。PID控制器的参数若仔细的调试，会有很好的效果，相反的，若调适不当，效果会很差。一般初始设计常需要不断的电脑模拟，并且修改参数，一直达到理想的性能或是可接受的妥协为止。
有些系统有非线性的特性，若在无载下调试的参数可能无法在满载下动作，可以利用增益规划的方式进行修正（在不同的条件下选用不同的数值）。
稳定性.
若PID控制器的参数未挑选妥当，其控制器输出可能是不稳定的，也就是其输出发散，过程中可能有震荡，也可能没有震荡，且其输出只受饱和或是机械损坏等原因所限制。不稳定一般是因为过大增益造成，特别是针对延迟时间很长的系统。
一般而言，PID控制器会要求响应的稳定，不论程序条件及设定值如何组合，都不能出现大幅振荡的情形，不过有时可以接受临界稳定的情形。
最佳性能.
PID控制器的最佳性能可能和针对过程变化或是设定值变化有关，也会随应用而不同。
两个基本的需求是调整能力（regulation，干扰拒绝，使系统维持在设定值）及命令追随 （设定值变化下，控制器输出追随设定值的反应速度）。有关命令追随的一些准则包括有上升时间及整定时间。有些应用可能因为安全考量，不允许输出超过设定值，也有些应用要求在到达设定值过程中的能量可以最小化。
各方法的简介.
有许多种调试PID控制器参数的方法，最有效的方式多半是建立某种程序，再依不同参数下的动态特性来调试参数。相对而言人工调试其效率较差，若是系统的响应时间到数分钟以上，更可以看出人工调试效率的不佳。
调试方法的选择和是否可以暂时将控制回路「离线」有关，也和系统的响应时间有关。离线是指一个和实际使用有些不同的条件（例如不加负载），而且控制器的输出只需考虑理论情况，不需考虑实际应用。在线调试是在实际应用的条件，控制器的输出需考虑实际的系统
。若控制回路可以离线，最好的调试方法是对系统给一个步阶输入，量测其输出对时间的关系，再用其响应来决定参数。
人工调整.
若需在系统仍有负载的情形进行调试（线上调试），有一种作法是先将formula_2及formula_3设为零，增加formula_1一直到回路输出震荡为止，之后再将formula_1设定为「1/4振幅衰减」（使系统第二次过冲量是第一次的1/4）增益的一半，然后增加formula_2直到一定时间后的稳态误差可被修正为止。不过若formula_2可能会造成不稳定，最后若有需要，可以增加formula_3，并确认在负载变动后回路可以够快的回到其设定值，不过若formula_3太大会造成响应太快及过冲。一般而言快速反应的PID应该会有轻微的过冲，只是有些系统不允许过冲。因此需要将回授系统调整为过阻尼系统，而formula_1比造成震荡formula_1的一半还要小很多。
调整PID参数对系统的影响如下
齐格勒－尼科尔斯方法.
齐格勒－尼科尔斯方法是另一种启发式的调试方式，由John G. Ziegler和Nathaniel B. Nichols在1940年代导入，一开始也是将formula_2及formula_3设定为零，增加比例增益直到系统开始等振幅振荡为止，当时的增益称为formula_29，而振荡周期为formula_30，即可用以下的方式计算增益：
PID调试软体.
大部份现代的工业设备不再用上述人工计算的方式调试，而是用PID调试及最佳化软体来达到一致的效果。软体会收集资料，建立模型，并提供最佳的调试结果，有些软体甚至可以用参考命令的变化来进行调试。
数学的PID调试会将脉冲加入系统，再用受控系统的频率响应来设计PID的参数。若是响应时间要数分钟的系统，建议用数学PID调试，因为用试误法可能要花上几天才能找到可让系统稳定的参数。最佳解不太容易找到，有些数位的回路控制器有自我调试的程序，利用微小的参考命令来计算最佳的调试值。
也有其他调试的公式，是依不同的性能准则所产生。许多有专利的公式已嵌入在PID调试软体及硬体模组中。
一些先进的PID调试软体也可以在动态的情况下用演算法调整PID回路，这类软体会先将程序建模，给微扰量，再根据响应计算参数。
PID控制的限制.
PID控制可以应用在许多控制问题，多半在大略调整参数后就有不错的效果，不过有些应用下可能反而会有差的效果，而且一般无法提供最佳控制。PID控制的主要问题是在于其为回授控制，系数为定值，不知道受控系统的资讯，因此其整体性能常常是妥协下的结果。在没有受控系统模型的条件下，PID控制最佳的控制器，但若配合系统模型，可以有进一步的提升。
当PID控制器单独使用时，若因应用需求，需调整PID回路增益使控制系统不会过冲，其效果有可能很差。PID控制器的缺点还包括无法处理受控系统的非线性、需在反应时间及调整率之间妥协、无法针对参数的变动而反应（例如系统在暖机后特性会改变）、以及大扰动下的波形落后。
PID控制器最显著的提升是配合前馈控制，加入有关系统的资讯，只用PID控制器来控制误差。另外，PID控制器也有一些小幅的改善方式，例如调整参数（增益规划或是依性能进行适应性的调整）、提升性能（提高取样率、精度及准度，若有需要加入低波滤波器），或是用多个串接的PID控制器。
线性.
PID控制器常见的问题是在于其线性且对称的特性，若应用在一些非线性的系统，其效果可能会有变化。以暖通空调中常见的温度控制，可能是采用主动加热（用加热器加热），但冷却是使用被动冷却（不加热，自然冷却），其冷却速度比加热速度慢很多，输出若有过冲，下降速度很慢，因此PID控制需调整为不会过冲的过阻尼，以减少或避免过冲，但这也延长了整定时间，使性能变差。
杂讯对微分器的影响.
微分器的问题在于对量测或程序产生的高频杂讯会有放大效果，因此会对输出造成大幅的变动。因此真实的控制器不会有理想的微分器，只有一个有限频宽的微分器或高通滤波器。一般为了移除高频的杂讯，会在量测时加入低通滤波器，若低通滤波器和微分器对消，滤波效果也就受限了，因此低杂讯的量测设备相当重要。实务上可以使用中值滤波器，调升滤波效率及实际上的性能。有时可以将微分器关闭，对控制性能的影响不大，此时称为PI控制器。
PID演算法的修改.
基本的PID演算法在一些控制应用的条件下有些不足，需进行小幅的修改。
积分饱和.
积分饱和是理想PID演算法实现时常见的问题。若设定值有大的变动，其积分量会有大幅的变化，大到输出值被上下限限制而饱和，因此系统会有过冲，而且即使误差量符号改变，积分量变小，但输出值仍被上下限限制，维持在上限（或下限），因此输出看似没有变化，系统仍会持续的过冲，一直要到输出值落在上下限的范围内，系统的回授量才会开始下降。此问题可以用以下方式处理：
PI控制器.
PI控制器（比例-积分控制器）是不用微分单元的PID控制器。
控制器的输出为
其中formula_32为设定值SP和量测值PV的误差：
PI控制器可以用Simulink或Xcos之类的软体进行建模，方式是使用「flow chart」图框，其中用以下的拉氏运算子：
其中
formula_37值的选择需在减少过冲以及增加安定时间之间取舍。
微分单元对输入中的高频信号格外敏感，PI控制器因为没有微分单元，在讯号杂讯大时，在稳态时会更加稳定。但对状态快速变化的反应较慢，因此相较于调适到最佳值的PID控制器，PI控制器会较慢到达设定值，受干扰后也比较慢恢复到正常值。
PDF控制（pseudo-derivative feedback control）可以视为是PI控制器的变体，比例控制器的输入由误差值改为回授值。
不动作区.
许多PID回路是控制机械元件（例如阀）。机械保养是一笔可观的费用，磨损会使得机械在有输入信号时出现静摩擦或是不动作区，都会导致控制性能的下降。机械损耗的速度主要和设备多常改变其状态有关。若磨损是主要考量的话，PID回路可以有输出的迟滞现象以减少输出状态的改变。若变化小，仍在不动作区内，让控制器的输出维持上一次的值。变化要大到超过不动作区，实际的状态才会随之变化。
设定值的步阶变化.
若系统的设定值有步阶变化，比例单元和微分单元也会有对应的变化，特别是微分单元对于步阶变化的输出特别的大，因此有些PID演算法会配合以下的修改来处理设定值的变化。
前馈控制.
PID控制器若再配合前馈控制（开回路控制），可以再提升其控制性能。在前馈控制中考虑系统的已知资讯（例如理想加速度或是惯量），再将输出加到PID控制器的控制输出，以提升整体的系统性能。前馈量可能是控制输出主要的部份，而PID控制器只用来补偿目标值和开回路控制器输出之间的误差。因为前馈输出不会受到回授的影响，因此也不会造成系统的振荡，可以在不影响稳定性的条件下提升系统的响应。前馈可以依目标值及其他量测到的干扰量来产生，目标值加权是一种简单的前馈控制方式。
例如，在大部份的运动控制系统中，为了要使机械负载加速，致动器要产生更大的力。若用速度环的PID控制器来控制负载速度，比较理想的方式是先得到理想的瞬间加速度值，适量调整加权后再加到PID的输出中。因此控制器输出中有一部份是不随机械速度而改变的输出，再用PID根据实际输出和目标的差异去增加或是减少输出。这类有前馈控制的PID控制器可以加快控制系统的反应速度。
无冲击运转.
有时PID控制器会规划为无冲击（bumpless）的特性，在参数变化时重新计算适当的积分累计值，使输出不会因参数变化有不连续的改变。
串级PID控制器.
二个PID控制器可以组合在一起，得到较佳的效果，这称为串级PID控制。以两个PID控制器组成的串级PID控制为例，其中一个PID控制器在外回路，控制像液面高度或是速度等主要的物理量，另一个PID控制器是内回路，以外回路PID控制器的输出做为其目标值，一般是控制较快速变化的参数，例如流量或加速度等。若利用串级PID控制，可以增加控制器的工作频率，并降低其时间常数。
例如一个温控的循环水浴设备有二个串级的PID控制器，分别有各自的热电偶温度感测器。外回路的控制器控制水温，其感测器距加热器很远，直接量测整体水温，其误差量是理想水温及整体水温的差值。外回路PID控制器的输出即为内回路控制器的目标值，内回路控制器控制加热器，其感测器是在加热器上，其误差量是加热器的理想温度及量测到温度的差值，其输出会使加热器维持在设定值附近。
内外回路控制器的参数可能会差很多，外回路的PID控制器有较长的时间常数，对应所有的水加热或是冷却需要的时间。内回路的PID控制器反应会比较快。每个控制器可以调整到符合其真正控制的系统，例如水槽中所有的水，或是加热器本身。
其他PID的形式及其表示法.
理想的PID及标准形PID.
工业上常看到PID控制器，而许多工业相关资料中看到的都是「标准形」的PID，其中比例增益formula_1也作用在formula_39及formula_40两项，和上述「理论」段落看到的形式不同。「标准形」的PID为：
其中
在标准形中，每一个参数有其明确的物理意义，输出是根据现在误差、过去误差及未来误差而决定，加上微分项可以预测若控制系统不改变的话，formula_43时间后的误差，而积分项是用过去所有误差的和来调整输出，希望在formula_42时间后可以完全消除误差，而输出的值会再乘以单一的增益formula_1。
在理想的平行式PID中，其方程如下：
其中的增益和标准形PID系数的关系是：formula_48及formula_49。平行式PID中的参数都视为单纯的增益，最泛用，灵活性也最高，但较没有物理意义，因此只用在PID的理论处理中，标准形PID虽在数学上比较复杂，在工业中较常使用。
倒数增益.
许多情形下，PID控制器处理的变数是无因次的量，是某个最大值的比例，介于0到100%之间，而转换为实际物理量（如泵浦速率或是水加热的功率）是在PID控制器外，而这些控制变数是有因次的物理量（例如温度）。此时formula_1增益多半不会表示为「每变化一度的输出」，而会以温度的形式formula_51表示，代表「100%输出下的温度（变化）」，代表输出由0变到1（0%变为100%）下的温度变化。
只针对过程变数进行微分控制.
在大部份的商业控制系统中，是用过程变数取代误差作为微分项的输入，其原因是当目标值有不连续变化时，微分控制会产生很大的突波，若目标值不变，改变过程变数的效果和改变误差相同，因此有些PID控制器会用过程变数作为微分项的输入，不会影响控制器控制过程变数，抗杂讯的能力。
只针对过程变数进行微分及比例控制.
大部份的商业控制系统也提供选择，让过程变数作为微分控制及比例控制的输入，因此误差只作为积分控制的输入，这也不会影响控制器控制过程变数，抗杂讯的能力。
上述的修改可以避免目标值有不连续变化时，输出值有对应不连续的变化，若目标值有步阶变化，这项调整就相当重要。
也有些双自由度（2-DoF）PID控制架构除了一般的PID控制外，再加上只针对过程变数进行的微分及比例控制，再分别用增益进行调整，目标是同时对目标步阶响应以及杂讯抑制都有良好的性能。
PID控制器的拉氏转换.
有关会将PID控制器进行拉氏转换：
PID控制器的拉氏转换也代表著控制器的传递函数，因此可以确认整体系统的传递函数。
PID的极零点对消.
PID控制器可以写成以下的形式
若受控设备的传递函数如下：
又令
则
因此若受控设备有不稳定的极点，看似可以用此方式消除，不过实际上有些差异，由干扰到输出的闭回路传递函数中仍有不稳定的极点，因此仍可能会发散。
串级型或交互型.
另一种PID控制器的表示法为串级型（series）或称为交互型（interacting）
其中参数和标准型的参数有以下的关系
而
上述作法可表示为二个串级的PD控制器及PI控制器，在早期类比电路的时代较容易实现，虽然控制器已经数位化，不过仍有些维持此形式。
离散化的控制器.
若要在微处理机（MCU）或是FPGA中实现PID控制或是分析其性能，就需要将控制器离散化。一阶微分可以用后向有限差分表示，积分项也离散化，若取样时间为formula_65，积分项可以用下式近似
微分项可近似为
因此PID控制器的离散化可以将formula_4微分，再用一阶导数及二阶导数的定义求得formula_69，可以得到
其中formula_71
伪代码.
以下是一段实现PID演算法的伪代码： 
 previous_error = 0
 integral = 0 
 start:
 error = setpoint - measured_value
 integral = integral + error*dt
 derivative = (error - previous_error)/dt
 output = Kp*error + Ki*integral + Kd*derivative
 previous_error = error
 wait(dt)
 goto start
此例中有两个变数在回圈前需初始化为0，然后开始回圈。目前的误差（error）是用目前目标值（setpoint）减去系统反馈值（measured_value）而得，然后再进行积分和微分运算，比例项、积分项及微分项乘以各自参数后得到输出（output）。在实际系统中，这会透过数位类比转换器转换为类比讯号，作为受控系统的控制量。目前的误差量及积分会储存，以便下次计算微分及积分时使用，程式会等待dt秒后开始，回圈继续进行，透过类比数位转换器读取新的系统反馈值及目标值，再计算误差量及输出。