打印
[文档下载]

数字PID及其改进算法

[复制链接]
418|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzbf|  楼主 | 2025-6-16 09:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数字PID及其改进算法 45页 0.5M.pdf (546.15 KB)

使用特权

评论回复
沙发
星辰伴梦| | 2025-6-17 21:40 | 只看该作者
这个文件看起来是关于数字PID控制器及其改进算法的详细研究,有谁已经看过了吗?可以分享一些关键点吗?

使用特权

评论回复
板凳
backlugin| | 2025-7-2 12:32 | 只看该作者
数字PID控制及其改进算法是现代控制系统中极为重要的组成部分,尤其是在嵌入式系统、工业自动化和机器人技术等领域。

使用特权

评论回复
地板
少女诗篇| | 2025-7-3 11:53 | 只看该作者

可以看看这个 Python 代码,做个参考
class PIDController:
    def __init__(self, kp, ki, kd, setpoint, sample_time, integral_limit=None):
        # 初始化PID参数
        self.kp = kp
        self.ki = ki
        self.kd = kd
        self.setpoint = setpoint
        self.sample_time = sample_time
        self.integral_limit = integral_limit
        
        # 初始化内部状态
        self.error_sum = 0
        self.last_error = 0
        self.last_output = 0
        
    def compute(self, process_variable):
        # 计算当前误差
        error = self.setpoint - process_variable
        
        # 计算PID各项
        p_term = self.kp * error
        
        # 积分项计算与限制
        self.error_sum += error * self.sample_time
        if self.integral_limit is not None:
            self.error_sum = max(min(self.error_sum, self.integral_limit), -self.integral_limit)
        i_term = self.ki * self.error_sum
        
        # 微分项计算
        d_term = self.kd * (error - self.last_error) / self.sample_time
        self.last_error = error
        
        # 计算PID输出
        output = p_term + i_term + d_term
        self.last_output = output
        
        return output

# 积分分离PID控制器(继承自基础PID)
class SeparatedIntegralPID(PIDController):
    def __init__(self, kp, ki, kd, setpoint, sample_time, integral_threshold, integral_limit=None):
        super().__init__(kp, ki, kd, setpoint, sample_time, integral_limit)
        self.integral_threshold = integral_threshold
        
    def compute(self, process_variable):
        # 计算当前误差
        error = self.setpoint - process_variable
        
        # 积分分离逻辑:当误差较大时取消积分作用
        if abs(error) > self.integral_threshold:
            temp_ki = 0  # 暂时禁用积分
        else:
            temp_ki = self.ki
            
        # 计算PID各项
        p_term = self.kp * error
        
        # 使用临时ki计算积分项
        self.error_sum += error * self.sample_time
        if self.integral_limit is not None:
            self.error_sum = max(min(self.error_sum, self.integral_limit), -self.integral_limit)
        i_term = temp_ki * self.error_sum
        
        # 微分项计算
        d_term = self.kd * (error - self.last_error) / self.sample_time
        self.last_error = error
        
        # 计算PID输出
        output = p_term + i_term + d_term
        self.last_output = output
        
        return output

使用特权

评论回复
5
这个文件看起来很有料,数字PID及其改进算法是自动化控制领域的经典话题,不知道里面有没有提到模糊PID或者自适应PID算法?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

132

主题

5500

帖子

3

粉丝