当前位置: 首页 > wzjs >正文

莒县网站制作上海网站推广服务公司

莒县网站制作,上海网站推广服务公司,网站名和域名能一样吗,网站建设书籍推荐目录 1. 前言 2. 增量式PID控制的基本原理 2.1 PID控制的基本概念 2.2 增量式PID控制的特点 3. 增量式PID控制的Python实现:温控系统 3.1 构建增量式PID控制器 3.2 使用增量式PID控制器 3.3 运行模拟 3.4 完整代码 4. 参数调整与优化 4.1 参数选择 4.2…

目录

1. 前言

2. 增量式PID控制的基本原理

2.1 PID控制的基本概念

2.2 增量式PID控制的特点

3. 增量式PID控制的Python实现:温控系统

3.1 构建增量式PID控制器

3.2 使用增量式PID控制器

3.3 运行模拟

3.4 完整代码 

4. 参数调整与优化

4.1 参数选择

4.2 参数调整方法

5. 总结


1. 前言

在工业控制和自动化领域,PID控制是一种非常经典的控制算法,广泛应用于温度、压力、速度等参数的调节。传统的PID控制算法直接计算控制量,而增量式PID控制则通过计算增量来调整控制量,具有计算简单、易于实现和适合数字控制等优点。本文将详细介绍增量式PID控制的原理,并通过Python代码实现一个完整的增量式PID控制器,帮助大家理解和应用这一技术。

传统PID可以去看:

《最最最基础常用的控制:PID【基础+代码实例:温控系统】》

2. 增量式PID控制的基本原理

2.1 PID控制的基本概念

PID控制是一种基于比例(Proportional)、积分(Integral)和微分(Derivative)的控制算法。它的基本思想是通过测量系统的当前值与目标值之间的误差,计算出控制量来调整系统,使误差趋近于零。

2.2 增量式PID控制的特点

增量式PID控制的核心在于计算控制量的增量,而不是直接计算控制量。其公式如下:

其实就是对PID公式求了个导,但是这样计算量更小。 

其中:

  • Δu(k) 是当前时刻的控制增量

  • e(k) 是当前时刻的误差

  • Kp​ 是比例系数

  • Ki​ 是积分系数

  • Kd​ 是微分系数

增量式PID控制的优点包括:

  1. 计算简单:只需要当前和前几次的误差值。

  2. 易于实现:适合数字控制系统。

  3. 抗积分饱和:通过增量调整,可以避免积分项过大导致的系统不稳定。

3. 增量式PID控制的Python实现:温控系统

还是用我们熟悉的温控系统

3.1 构建增量式PID控制器

下面是增量式PID控制器的Python实现代码:

class IncrementalPID:def __init__(self, kp, ki, kd):"""初始化增量式PID控制器:param kp: 比例系数:param ki: 积分系数:param kd: 微分系数"""self.kp = kpself.ki = kiself.kd = kdself.e_prev = [0, 0, 0]  # 保存最近三次的误差值def compute(self, target, current):"""计算控制增量:param target: 目标值:param current: 当前值:return: 控制增量"""# 计算误差e = target - current# 更新误差历史self.e_prev[2] = self.e_prev[1]self.e_prev[1] = self.e_prev[0]self.e_prev[0] = e# 计算增量控制量delta_u = (self.kp * (self.e_prev[0] - self.e_prev[1]) +self.ki * self.e_prev[0] +self.kd * (self.e_prev[0] - 2 * self.e_prev[1] + self.e_prev[2]))return delta_u

3.2 使用增量式PID控制器

为了验证增量式PID控制器的效果,我们构建一个简单的模拟环境,例如温度控制系统:

import matplotlib.pyplot as plt
import numpy as np# 模拟环境:温度控制系统
class TemperatureSystem:def __init__(self, initial_temp=20):self.temperature = initial_temp  # 初始温度self.max_temp = 100  # 最大温度限制def update(self, control_signal, dt=1,K=0.1, alpha=0.05):"""更新温度:param control_signal: 控制信号:param dt: 时间步长"""# 模拟温度变化:控制信号越大,温度上升越快self.temperature = self.temperature + K * (control_signal - alpha * self.temperature)# 限制温度不超过最大值self.temperature = min(self.temperature, self.max_temp)def get_temperature(self):return self.temperature

3.3 运行模拟

# 初始化PID控制器和温度系统
pid = IncrementalPID(kp=0.5, ki=0.1, kd=0.05)
system = TemperatureSystem(initial_temp=20)
target_temp = 60  # 目标温度
total_time = 100  # 总时间步长
dt = 1  # 时间步长# 记录温度变化
time_steps = []
temperatures = []
control_signals = []# 模拟控制过程
current_temp = system.get_temperature()
for t in range(total_time):# 计算控制增量delta_u = pid.compute(target_temp, current_temp)# 计算当前控制信号(假设初始控制信号为0)if t == 0:control_signal = delta_uelse:control_signal += delta_u# 更新系统状态system.update(control_signal, dt)current_temp = system.get_temperature()# 记录数据time_steps.append(t)temperatures.append(current_temp)control_signals.append(control_signal)# 绘制结果
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(time_steps, temperatures)
plt.axhline(y=target_temp, color='r', linestyle='--', label='目标温度')
plt.xlabel('时间步长')
plt.ylabel('温度')
plt.title('温度变化')
plt.legend()plt.subplot(2, 1, 2)
plt.plot(time_steps, control_signals)
plt.xlabel('时间步长')
plt.ylabel('控制信号')
plt.title('控制信号变化')
plt.tight_layout()
plt.show()

3.4 完整代码 

完整代码如下方便调试:

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("font",family='YouYuan')class IncrementalPID:def __init__(self, kp, ki, kd):"""初始化增量式PID控制器:param kp: 比例系数:param ki: 积分系数:param kd: 微分系数"""self.kp = kpself.ki = kiself.kd = kdself.e_prev = [0, 0, 0]  # 保存最近三次的误差值def compute(self, target, current):"""计算控制增量:param target: 目标值:param current: 当前值:return: 控制增量"""# 计算误差e = target - current# 更新误差历史self.e_prev[2] = self.e_prev[1]self.e_prev[1] = self.e_prev[0]self.e_prev[0] = e# 计算增量控制量delta_u = (self.kp * (self.e_prev[0] - self.e_prev[1]) +self.ki * self.e_prev[0] +self.kd * (self.e_prev[0] - 2 * self.e_prev[1] + self.e_prev[2]))return delta_u# 模拟环境:温度控制系统
class TemperatureSystem:def __init__(self, initial_temp=20):self.temperature = initial_temp  # 初始温度self.max_temp = 100  # 最大温度限制def update(self, control_signal, dt=1,K=0.1, alpha=0.05):"""更新温度:param control_signal: 控制信号:param dt: 时间步长"""# 模拟温度变化:控制信号越大,温度上升越快self.temperature = self.temperature + K * (control_signal - alpha * self.temperature)# 限制温度不超过最大值self.temperature = min(self.temperature, self.max_temp)def get_temperature(self):return self.temperature# 初始化PID控制器和温度系统
pid = IncrementalPID(kp=0.5, ki=0.1, kd=0.05)
system = TemperatureSystem(initial_temp=20)
target_temp = 70  # 目标温度
total_time = 200  # 总时间步长
dt = 1  # 时间步长# 记录温度变化
time_steps = []
temperatures = []
control_signals = []# 模拟控制过程
current_temp = system.get_temperature()
for t in range(total_time):# 计算控制增量delta_u = pid.compute(target_temp, current_temp)# 计算当前控制信号(假设初始控制信号为0)if t == 0:control_signal = delta_uelse:control_signal += delta_u# 更新系统状态system.update(control_signal, dt)current_temp = system.get_temperature()# 记录数据time_steps.append(t)temperatures.append(current_temp)control_signals.append(control_signal)# 绘制结果
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(time_steps, temperatures)
plt.axhline(y=target_temp, color='r', linestyle='--', label='目标温度')
plt.xlabel('时间步长')
plt.ylabel('温度')
plt.title('温度变化')
plt.legend()plt.subplot(2, 1, 2)
plt.plot(time_steps, control_signals)
plt.axhline(y=0, color='r', linestyle='--', label='0值')
plt.xlabel('时间步长')
plt.ylabel('控制信号')
plt.title('控制信号变化')
plt.tight_layout()
plt.legend()
plt.show()

4. 参数调整与优化

4.1 参数选择

  • 比例系数 Kp​:增大比例系数可以加快系统响应,但过大可能导致振荡。

  • 积分系数 Ki​:积分系数用于消除稳态误差,但过大可能导致系统不稳定。

  • 微分系数 Kd​:微分系数用于抑制超调,但过大可能导致系统响应变慢。

4.2 参数调整方法

  1. 试凑法:通过不断调整参数,观察系统响应,找到合适的参数组合。

  2. Ziegler-Nichols法:一种经典的经验公式,用于快速确定PID参数。

  3. 自适应调整:根据系统运行状态动态调整PID参数。

5. 总结

增量式PID控制是一种简单而有效的控制算法,特别适合数字控制系统。通过本文的介绍和代码实现,大家可以快速理解和应用增量式PID控制来应用这个同等效果计算量小的方法。在实际应用中,根据具体需求调整PID参数,可以实现更好的控制效果。我是橙色小博,关注我,一起在人工智能领域学习进步!

http://www.dtcms.com/wzjs/495090.html

相关文章:

  • asp网站没有数据库连接上海最新发布
  • 和wordpress类似seo优化标题 关键词
  • 满洲里做网站电商软文广告经典案例
  • 网站怎么做留言的查排名的软件有哪些
  • cms代码做网站深圳网站优化排名
  • 2个女人做暧暧网站推广公众号的9种方法
  • 聊城做网站济南百度推广代理商
  • 做网站需要的技术成品视频直播软件推荐哪个好一点
  • 重庆做网站建设公司哪家好百度升级最新版本
  • 西安哪家网站建设好网络推广的渠道
  • 建设企业网站所遵循的一般原则网站首页的优化
  • 使用net域名的大网站竞价排名深度解析
  • 制作公司网站要多少费用呢流量推广app
  • 建设银行人才招聘网站打开百度首页
  • 南山网站建设公司竞价排名适合百度吗
  • asp.net个人网站怎么做凡科建站网站
  • 美团推广平台百度优化教程
  • 中英文网站多少钱怎么做网址
  • 建设项目一次公示网站优质网站
  • wordpress教程pdf手机清理优化软件排名
  • 平谷网站建设服务搜索软件
  • 青海网站 建设优化推广方案
  • 深圳flash网站建设百度服务平台
  • 国外服务器推荐前端seo搜索引擎优化
  • 品牌企业网站建设公司价格免费seo诊断
  • 桂林旅游自由行攻略网站seo优化包括哪些方面
  • 织梦下载网站模板松松软文
  • 商城网站 不易优化推广方式有哪几种
  • 做瑜伽网站常德网站优化公司
  • 建设银行网站能买手机专业网店推广