首页 > 编程语言 >Python实现PID算法

Python实现PID算法

时间:2024-08-13 20:52:37浏览次数:15  
标签:控制器 plt temperature Python self PID 算法 dt

目录

1.PID算法简介

PID算法(Proportional-Integral-Derivative Control)是经典的控制算法之一,广泛应用于自动控制系统中。PID控制器通过调节控制对象的输入,来实现对系统输出的精确控制。PID算法由三个部分组成:

  1. 比例(Proportional, P):根据当前误差值进行调节,响应速度快,但可能产生稳态误差。
  2. 积分(Integral, I):累积过去的误差,对稳态误差进行校正,但可能引入系统振荡。
  3. 微分(Derivative, D):预测误差的变化趋势,对系统的响应进行提前修正,能够提高系统的稳定性。

2.PID控制器的数学表达式

在这里插入图片描述

3.Python实现PID算法

下面是一个简单的PID控制器实现,并用它来控制一个模拟的温度系统。

场景:温度控制

假设我们有一个系统,需要将温度控制在设定值附近。我们可以使用PID控制器来调节系统的加热器功率,使温度达到并维持在目标值。

import time
import matplotlib.pyplot as plt

class PIDController:
    def __init__(self, Kp, Ki, Kd, setpoint=0):
        self.Kp = Kp
        self.Ki = Ki
        self.Kd = Kd
        self.setpoint = setpoint
        self.last_error = 0
        self.integral = 0

    def update(self, measured_value, dt):
        error = self.setpoint - measured_value
        self.integral += error * dt
        derivative = (error - self.last_error) / dt if dt > 0 else 0
        self.last_error = error
        output = self.Kp * error + self.Ki * self.integral + self.Kd * derivative
        return output

# 模拟温度系统
def simulate_temperature_system(PID, initial_temperature, target_temperature, duration, dt):
    time_steps = int(duration / dt)
    temperatures = []
    heater_power = []

    current_temperature = initial_temperature

    for _ in range(time_steps):
        power = PID.update(current_temperature, dt)
        heater_power.append(power)

        # 模拟加热器对温度的影响
        current_temperature += power * dt
        # 模拟环境对温度的影响(例如,热量散失)
        current_temperature -= (current_temperature - 20) * dt * 0.1

        temperatures.append(current_temperature)
        time.sleep(dt)

    return temperatures, heater_power

# 参数设置
Kp = 2.0
Ki = 0.1
Kd = 1.0
initial_temperature = 25.0
target_temperature = 60.0
duration = 10  # 模拟持续时间(秒)
dt = 0.1  # 时间步长

# 创建PID控制器
PID = PIDController(Kp, Ki, Kd, setpoint=target_temperature)

# 运行温度控制模拟
temperatures, heater_power = simulate_temperature_system(PID, initial_temperature, target_temperature, duration, dt)

# 绘制结果
time_axis = [i * dt for i in range(len(temperatures))]
plt.plot(time_axis, temperatures, label='Temperature')
plt.plot(time_axis, heater_power, label='Heater Power')
plt.axhline(y=target_temperature, color='r', linestyle='--', label='Target Temperature')
plt.xlabel('Time (s)')
plt.ylabel('Temperature / Heater Power')
plt.legend()
plt.title('PID Temperature Control')
plt.show()

4.代码解释

  1. PID控制器类

    • PIDController类实现了一个基本的PID控制器。update方法根据当前的测量值measured_value、时间步长dt和目标设定值setpoint来计算控制器的输出值output,即控制信号。
  2. 温度系统模拟

    • simulate_temperature_system函数模拟了一个简单的温度系统。加热器的功率power由PID控制器的输出决定,系统温度在每个时间步长中被更新。
    • 温度变化由两个因素决定:加热器的功率和环境对温度的影响(模拟热量散失)。
  3. 参数设置与模拟运行

    • 我们设置了PID控制器的增益参数(KpKiKd)以及模拟系统的初始温度、目标温度、持续时间和时间步长。然后,运行温度控制模拟,并绘制温度变化和加热器功率的曲线。

5.场景说明

在这个例子中,我们使用PID控制器来调节加热器的功率,使温度从初始温度25℃逐步上升并稳定在目标温度60℃附近。PID控制器通过不断调整功率来减小误差,使温度尽可能接近目标值。

6.总结

PID控制器是一种常见的反馈控制算法,广泛应用于工业自动化、过程控制等领域。它通过结合比例、积分和微分三种控制策略,实现对系统输出的精确控制。虽然简单,但PID控制器非常有效,适用于各种线性系统的控制问题。通过调整PID参数,可以优化系统的响应速度、稳定性和精度。

标签:控制器,plt,temperature,Python,self,PID,算法,dt
From: https://blog.csdn.net/qq_42568323/article/details/141173597

相关文章

  • Python实现基因遗传算法
    目录基因遗传算法简介基因遗传算法的基本步骤Python实现基因遗传算法场景:优化二次函数Python代码实现代码解释场景说明总结基因遗传算法简介基因遗传算法(GeneticAlgorithm,GA)是一种基于自然选择和遗传学原理的优化算法,适用于求解复杂的组合优化问题。它通过模拟......
  • TIOBE 8月编程排行榜出炉!Python 正在追赶 Java 的 TIOBE 指数记录
    2024年8月的TIOBE编程语言排行榜出炉了!对于开发者而言,这份排行榜不仅仅是编程语言的简单排序,更是行业趋势的风向标。而今年,Python的表现格外引人注目,它正在一步步逼近Java的TIOBE指数记录。让我们一起看看这两大编程巨头在本月的激烈角逐吧。为什么Python在这几年的排行榜中节节......
  • 【Python使用】嘿马python基础入门全体系教程第1篇:目标,计算机组成【附代码文档】
    本教程的知识点为:计算机组成什么是计算机?计算机是由什么组成的?1.硬件系统:2.软件系统:目标运算符的分类1.算数运算符2.赋值运算符3.复合赋值运算符判断语句和循环语句if嵌套1.if嵌套的格式2.if嵌套的应用if嵌套执行流程容器:字符串、列表、元组、字典字符串......
  • centos7配置yum源 安装 docker 安装Docker Compose 安装Python 3.7并汉化 (python可不
    安装一个软件确认无误就执行备份,在关键步骤之前一定做好备份以防止重来,造成时间的大量浪费注意有时因各自网络环境原因,wget显示拒绝连接,要么等五分钟再试要么就把网址粘贴到百度去下载相对应的安装包,通过ftp,xftp等拷贝到虚拟机中。若有问题欢迎评论留言,我会尝试解决。现......
  • STL heap 算法库 堆操作
    算法库-堆操作基本操作make_heap()(1)从一个元素范围创建出一个最大堆(2)将区间内的元素转化为heap.--传比较器push_heap()对heap增加一个元素.将一个元素加入到一个最大堆pop_heap()对heap取出下一个元素.从最大堆中移除最大元素sort_heap()对heap转化为一......
  • 【视频讲解】滚动回归Rolling Regression、ARIMAX时间序列预测Python、R实现应用
    原文链接: https://tecdat.cn/?p=37338原文出处:拓端数据部落公众号分析师:JixinZhong  本文将通过视频讲解,展示如何用滚动回归预测,并结合一个R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析实例的代码数据,为读者提供一套完整的实践数据分析流程。滚动回归估计是于一......
  • 25.python模块(加密,os,re,json)
    一.加密讲解加密算法:md5\rsa\AES\des\base(一)base64加解密importbase64a=base64.b64encode(b"123456")print(a)#加密#b'MTIzNDU2'b=base64.b64decode(b'MTIzNDU2')print(b)#b'123456'http://encode.chahuo.com/在线加解密hashlib......
  • 小白怎样理解AI大模型与传统算法?
    面对当前的AI大模型技术大潮的冲击,任何事情不提一提AI大模型,都会觉得自己落伍了,被时代所抛弃了。那AI大模型与传统算法到底有什么不同,是否会完全取代传统技术?我们有一个形象的类比,可以帮助大家更容易理解。这个类比的对象就是中医和西医。首先,我们来看看AI大模型与传统算法......
  • ChatGPT 大模型核心算法深度分析 2024
    在分析核心算法之前,我们先了解chatGPT相关技术发展进程首先介绍自然语言处理、大规模预训练语言模型以及ChatGPT技术的发展历程,接着就ChatGPT的技术优点和不足进行分析,然后讨论核心算法。1.1自然语言处理的发展历史人类语言(又称自然语言)具有无处不在的歧义性、高度......
  • 【算法】求1+2+3+...+n
    1.概述地址:JZ64求1+2+3+…+n描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。数据范围:0<n≤2000<n\le2000<n......