自动控制:带死区的PID控制算法

带死区的PID控制算法

在计算机控制系统中,为了避免控制动作过于频繁,消除因频繁动作所引起的振荡,可采用带死区的PID控制。带死区的PID控制通过引入一个死区,使得在误差较小的范围内不进行控制动作,从而减少控制系统的频繁调整,提高系统的稳定性。

理论基础

传统PID控制算法

传统PID控制器的控制律为:

u ( t ) = K p e ( t ) + K i ∫ e ( t )   d t + K d d e ( t ) d t u(t) = K_p e(t) + K_i \int e(t) \, dt + K_d \frac{d e(t)}{dt} u(t)=Kpe(t)+Ki∫e(t)dt+Kddtde(t)

其中:

  • u ( t ) u(t) u(t) 是控制输入
  • e ( t ) = r ( t ) − y ( t ) e(t) = r(t) - y(t) e(t)=r(t)−y(t) 是误差信号
  • K p K_p Kp 是比例增益
  • K i K_i Ki 是积分增益
  • K d K_d Kd 是微分增益

带死区的PID控制算法

带死区的PID控制器通过在误差信号上引入一个死区 δ \delta δ,使得在误差 e ( t ) e(t) e(t) 的绝对值小于死区 δ \delta δ 时,控制输入 u ( t ) u(t) u(t) 不进行调整。其控制律为:

u ( t ) = { K p e ( t ) + K i ∫ e ( t )   d t + K d d e ( t ) d t if ∣ e ( t ) ∣ > δ 0 if ∣ e ( t ) ∣ ≤ δ u(t) = \begin{cases} K_p e(t) + K_i \int e(t) \, dt + K_d \frac{d e(t)}{dt} & \text{if } |e(t)| > \delta \\ 0 & \text{if } |e(t)| \leq \delta \end{cases} u(t)={Kpe(t)+Ki∫e(t)dt+Kddtde(t)0if ∣e(t)∣>δif ∣e(t)∣≤δ

其中:

  • δ \delta δ 是死区的阈值

公式推导

带死区的PID控制算法可以通过以下步骤推导得到:

  1. 定义误差信号:

e ( t ) = r ( t ) − y ( t ) e(t) = r(t) - y(t) e(t)=r(t)−y(t)

  1. 判断误差是否在死区范围内:

∣ e ( t ) ∣ ≤ δ |e(t)| \leq \delta ∣e(t)∣≤δ

  1. 根据误差范围计算控制输入:

u ( t ) = { K p e ( t ) + K i ∫ e ( t )   d t + K d d e ( t ) d t if ∣ e ( t ) ∣ > δ 0 if ∣ e ( t ) ∣ ≤ δ u(t) = \begin{cases} K_p e(t) + K_i \int e(t) \, dt + K_d \frac{d e(t)}{dt} & \text{if } |e(t)| > \delta \\ 0 & \text{if } |e(t)| \leq \delta \end{cases} u(t)={Kpe(t)+Ki∫e(t)dt+Kddtde(t)0if ∣e(t)∣>δif ∣e(t)∣≤δ

Python代码示例

下面是一个实现带死区的PID控制器的Python代码示例。假设我们有一个简单的温度控制系统,通过带死区的PID控制器保持系统温度在期望值。

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

# 定义系统参数
dt = 0.1  # 时间步长
t = np.arange(0, 20, dt)  # 时间数组
n = len(t)

# 初始化状态变量
temperature = np.zeros(n)  # 系统温度
desired_temperature = np.zeros(n)  # 期望温度
desired_temperature[100:] = 50  # 期望温度从时间t=10s开始为50
external_disturbance = np.sin(t) * 5  # 外界扰动

# 控制器参数
Kp = 2.0  # 比例增益
Ki = 1.0  # 积分增益
Kd = 0.5  # 微分增益
delta = 1.0  # 死区阈值

# 初始化误差变量
e_prev = 0  # 上一时刻的误差
integral = 0  # 误差积分

# 模拟系统
for i in range(1, n):
    # 计算误差
    e = desired_temperature[i] - temperature[i-1]
    
    # 判断误差是否在死区范围内
    if abs(e) > delta:
        # 误差积分
        integral += e * dt
        
        # 误差微分
        derivative = (e - e_prev) / dt
        
        # PID控制器
        u = Kp * e + Ki * integral + Kd * derivative
    else:
        u = 0  # 在死区范围内,控制输入为0
    
    # 更新系统温度
    temperature[i] = temperature[i-1] + (u + external_disturbance[i]) * dt
    
    # 更新上一时刻的误差
    e_prev = e

# 绘制结果
plt.figure(figsize=(10, 4))
plt.plot(t, desired_temperature, label='Desired Temperature')
plt.plot(t, temperature, label='Actual Temperature')
plt.plot(t, external_disturbance, label='External Disturbance')
plt.xlabel('Time [s]')
plt.ylabel('Temperature')
plt.legend()
plt.title('Dead Zone PID Control for Temperature System')
plt.grid(True)
plt.show()

代码解释

  1. 系统参数和时间数组 :定义了时间步长 dt 和时间数组 t,用来模拟系统在一段时间内的行为。
  2. 状态变量初始化 :初始化了系统温度 temperature、期望温度 desired_temperature 和外界扰动 external_disturbance
  3. 控制器参数 :定义了带死区的PID控制器的比例增益 Kp、积分增益 Ki、微分增益 Kd 和死区阈值 delta
  4. 误差变量初始化 :初始化了上一时刻的误差 e_prev 和误差积分 integral
  5. 系统模拟:通过迭代计算,在每个时间步长内根据带死区的PID控制律计算控制输入,并更新系统温度。
  6. 结果绘制 :使用 matplotlib 绘制系统温度、期望温度和外界扰动的变化曲线。

结论

带死区的PID控制器通过在误差信号上引入一个死区,有效减少了控制系统的频繁调整,避免了因频繁动作所引起的系统振荡,从而提高了系统的稳定性。在实际应用中,带死区的PID控制器适用于控制量需要频繁调整的场合,能够显著改善系统的动态特性。结合Python代码示例,可以更直观地理解带死区的PID控制器的基本原理和实现方法。

相关推荐
CeshirenTester8 小时前
Playwright元素定位详解:8种定位策略实战指南
人工智能·功能测试·程序人生·单元测试·自动化
世岩清上8 小时前
AI驱动的智能运维:从自动化到自主化的技术演进与架构革新
运维·人工智能·自动化
守城小轩10 小时前
基于Chrome140的Quora账号自动化——运行脚本(三)
运维·自动化·chrome devtools·指纹浏览器·浏览器开发
流形填表11 小时前
AI如何做SEO?
运维·人工智能·自动化·seo
[J] 一坚11 小时前
Shell 脚本解锁 curl/iptables/Nginx 日志分析等实战用法
linux·服务器·正则表达式·系统架构·自动化
CodeCraft Studio12 小时前
用“录制宏”轻松实现文档自动化:ONLYOFFICE 宏功能实践解析
运维·自动化·onlyoffice·录制宏·创建宏·文档自动化·文档协同
北京耐用通信13 小时前
耐达讯自动化网关:用Profinet唤醒沉睡的DeviceNet流量计,省下60%改造费!
人工智能·科技·物联网·网络协议·自动化·信息与通信
少年白char14 小时前
【AI漫剧】开源自动化AI漫剧生成工具 - 从文字到影像:AI故事视频创作的全新可能
运维·人工智能·自动化
搞科研的小刘选手14 小时前
【IEEE出版】第九届智能制造与自动化国际学术会议(IMA 2026)
自动化·智能制造·学术会议·发动机制造·自动控制与信息技术
容智信息15 小时前
容智Report Agent智能体驱动财务自动化,从核算迈向价值创造
大数据·运维·人工智能·自然语言处理·自动化·政务