md_files/科研/PID控制器.md

123 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PID控制器
PID控制器是一种常用的反馈控制系统广泛应用于工业控制系统和各种控制系统中用来持续调整一个过程的控制输入以减小系统当前位置和期望位置之间的误差。PID代表比例Proportional、积分Integral、微分Derivative
## 控制系统概述
**开环控制系统**
![image-20240324175333458](https://pic.bitday.top/i/2025/03/19/u81bty-2.png)
前馈控制系统尝试预先计算扰动对系统的影响,并在扰动影响系统输出之前调整输入以抵消它。
**闭环控制系统**
控制器接收误差信号。该系统通过反馈回路来自动调节其输出
![image-20240324175424762](https://pic.bitday.top/i/2025/03/19/u80vqi-2.png)
![image-20240324175627295](https://pic.bitday.top/i/2025/03/19/u81xpc-2.png)
**复合控制系统**
![image-20240324175704820](https://pic.bitday.top/i/2025/03/19/u829qe-2.png)
## 连续与离散信号
![image-20240324180342885](https://pic.bitday.top/i/2025/03/19/u81rj3-2.png)
从连续信号到离散信号的转换过程涉及以下步骤:
1. **采样**:在连续信号上每隔一定时间间隔取一个值。
2. **量化**:将每个采样值映射到最接近的量化级上。
积分可以通过**求和**来近似,微分可以通过相邻样本之间的**差分**来近似。
## PID公式
![image-20240324181124423](https://pic.bitday.top/i/2025/03/19/u82vaz-2.png)
控制系统中的传感器会**连续**监测被控制对象的状态例如温度、压力、位置等而PID控制器通过在固定的**采样间隔**收集输入信号,将其转换为**离散信号**计算控制动作然后输出到控制对象。离散PID控制的优势在于其灵活性和适应性它可以轻松地与软件算法集成。
## 直观例子
![image-20240324182805939](https://pic.bitday.top/i/2025/03/19/u82f7p-2.png)
![image-20240324184041843](https://pic.bitday.top/i/2025/03/19/u80pbo-2.png)
**仅使用比例P控制无法消除稳态误差。**稳态误差是指当系统达到平衡状态时,控制系统的实际输出与期望输出之间的差异。
原因:当系统接近其期望点时,误差减小,进而控制器输出也减小。如果控制器输出减小到无法克服系统内部阻力(如摩擦力)或外部扰动的程度时,系统就无法进一步接近设定点,从而留下稳态误差。
![image-20240324184057164](https://pic.bitday.top/i/2025/03/19/u81lr6-2.png)
为了解决稳态误差问题通常会在P控制基础上加入积分I控制。积分控制能够累积误差即使是很小的误差也会随时间积累最终产生足够的控制作用以调整系统输出直到误差为零。
![image-20240324184110766](https://pic.bitday.top/i/2025/03/19/u814hg-2.png)
微分控制在PID控制器中的作用主要是提高系统的瞬态响应和稳定性。
$$
{k}_{d}({e}_{i}-{e}_{i-1})
$$
它通过对误差信号的变化率(即误差的微分)进行响应,来预测系统未来的行为。如果误差在快速变化,微分项会产生一个相对较大的控制作用来尝试减缓这种变化。
## 相关控制知识
![image-20240325101541488](https://pic.bitday.top/i/2025/03/19/u835sv-2.png)
当系统启动时或者遇到大的扰动,会产生大的初始误差。若系统调整缓慢,积分项会在达到目标状态之前累积很大的值。这可导致控制器输出超出了实际的执行器(比如电机、阀门等)可以处理的范围。当这种情况发生时,即使误差减少,由于积分项累积的值太大,控制器的输出可能仍然处于饱和状态。
**积分限幅**
积分限幅可防止积分项超过预设的上限和下限。
$$
{I}_{clamped}(t)=clamp({I}_{updated(t)},{I}_{max},{I}_{min})
$$
**积分分离**
当误差超过某个预定阈值时禁用积分作用仅使用比例P和微分D控制来快速减小误差避免因积分作用导致的控制器输出过度响应。
```text
if (abs(error) > threshold) {
// 积分作用被分离,即暂时禁用积分作用
integral = 0;
} else {
// 正常积分累积
integral += error * dt;
}
```
PID控制器
```python
def update(self, current_value):
error = self.set_point - current_value
# 实现积分分离逻辑
if abs(error) < self.error_threshold:
self.integral += error * self.dt
# 应用积分限幅
self.integral = max(min(self.integral, self.integral_limit), -self.integral_limit)
else:
# 误差过大时重置积分累积
self.integral = 0
derivative = (error - self.prev_error) / self.dt
# PID 输出
output = self.Kp * error + self.Ki * self.integral + self.Kd * derivative
self.prev_error = error
return output
```