一段增量式PID控制程序

class IncrementalPID:  
    def __init__(self, Kp, Ki, Kd, setpoint, min_output=20, max_output=360):  
        self.Kp = Kp  
        self.Ki = Ki  
        self.Kd = Kd  
        self.setpoint = setpoint  
        self.min_output = min_output  
        self.max_output = max_output  
        self.last_error = 0  
        self.integral = 0  
  
    def update(self, measured_value):  
        error = self.setpoint - measured_value  
        P = self.Kp * error  
        I = self.Ki * self.integral  
        D = self.Kd * (error - self.last_error)  
  
        # 增量计算  
        delta_u = P + I + D  
  
        # 积分项更新  
        self.integral += error  
  
        # 控制量更新  
        control_output = self.last_error + delta_u  
  
        # 控制量限制  
        control_output = max(min(control_output, self.max_output), self.min_output)  
  
        # 更新误差供下次使用  
        self.last_error = control_output  
  
        return control_output  
    
pid = IncrementalPID(Kp=2, Ki=4, Kd=3, setpoint=40)

# 初始设定值为40,纯比例控制稳定时的控制量为37  
initial_setpoint = 40  
initial_control_value = 37  
  
# t0时刻,设定值由40变化到65,并做PID控制运行  
t0_setpoint = 65  
pid.setpoint = t0_setpoint  
t0_measured_value = None  # t0时刻的测量值未知,但不影响控制量的计算  
t0_control_value = pid.update(measured_value=t0_measured_value if t0_measured_value is not None else initial_control_value)  
  
# t1时刻,测量值为38  
t1_measured_value = 38  
t1_control_value = pid.update(measured_value=t1_measured_value)  
  
# t2时刻,测量值为43  
t2_measured_value = 43  
t2_control_value = pid.update(measured_value=t2_measured_value)  
  
# 结果  
print(f"t0时刻对应的控制量: {t0_control_value}")  
print(f"t1时刻对应的控制量: {t1_control_value}")  
print(f"t2时刻对应的控制量: {t2_control_value}")

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值