基于PID算法的房间温度控制及Python程序

自动化控制 同时被 2 个专栏收录
6 篇文章 0 订阅
54 篇文章 7 订阅

房间温度模糊PID控制研究
PID算法的基础知识

VAV 空调系统

VAV 空调系统主要由新风管、回风管、送风管等风管系统,空气处理及输送系统,压力传感器、变频器、温湿度传感器等自动控制系统,以及变风量末端装置等部件组成。其中,末端装置是本系统中十分重要的组成部分。房间温控器与变风量末端控制器共同构成串级自动控制回路,主控量为室内温度辅控量为气流量
首先,变风量末端控制器通过无线传感器网络采集房间温度与设定的温度比较得出偏差输出风量调整信号,调节风阀开度以改变送风量,保持室内温度在设定值附近。同时,通过风管内的压力传感器检测管道压力变化,通过变频器调整送风机转速,消除管道压力的波动对实际送风量的影响。因此,末端装置是变风量空调系统的关键设备之一。其基本构成图,如图 2.1 所示。
在这里插入图片描述
综上所述,中央空调主要通过变风量末端装置来实现室内温度调节,而风阀又是末端装置中控制空调房间温度的关键环节。因此,本文旨在基于嵌入式系统和无线传感器网络,选用合适的控制策略,提出便捷的监控方式,设计一套高效智能的 VAV 空调系统末端控制器,实现对变风量空调系统末端装置的风阀高效控制。

VAV 系统末端控制器总体设计方案

中央空调末端控制器是中央空调系统热交换的最后一个环节,更是中央空调系统中最重要的装置之一。特别是对变风量空调系统而言,其对空调系统节能有重要意义。此外,无线、多点的数据采集方式可提高空调房间环境表征的灵活性和准确性,对于保持空调房间舒适度也有十分重要的意义。因此,设计一个能灵活、准确地表征空间环境特征,并在不同送风条件和负荷下达到节能、高效控制效果的末端控制器,是节能和保持舒适度的关键。结合现有 VAV 系统末端控制器结构,本文设计的 VAV系统末端控制器结构示意图,如图 3.1 所示。
在这里插入图片描述
上图借助 Tiny OS 系统组建无线传感器网络,在嵌入式系统硬件平台上实现模糊 PID 控制策略,设计了一种基于无线传感器网络,并结合嵌入式系统和模糊 PID控制策略的 VAV 中央空调末端控制器。该控制器可对网络覆盖区域内多点进行无线实时检测,替代以往单点、有线的数据采集方式,提高系统数据采集的灵活性和环境信息表征的准确性;基于 ARM9 处理器以及 Linux 嵌入式操作系统,替代以往低端裸机,提高系统数据处理能力和控制效率;采用模糊 PID 控制策略,实现了智能控制策略在硬件系统平台上的应用,改善了控制器的实际控制效果;基于 TCP/IP 协议,应用 Wi-Fi无线网络和智能手机 APP,改进以往显示屏和按键,提高了空调房间温湿度显示与设定的便捷性。

VAV 系统模糊 PID 控制策略

虽然常规 PID 控制使用可靠,结构简单,控制精度高,但其 PID 参数难以在线调整,难以控制强时变非线性等复杂工业过程。此外,当外部环境改变时,其抗干扰能力差,不能自动调整其参数。而模糊控制恰巧可以解决具有非线性不确定性等复杂系统的控制问题。
VAV 空调系统有着时变性、非线性、大滞后、对象模型不精准等特点,因此用传统的 PID 很难达到很好的控制效果。若在常规 PID 的基础上采用模糊控制自动调整 PID 参数,则可使其不断适应外部环境的变化。
因此,将模糊控制与 PID 控制相结合构成模糊 PID 控制策略,其既具有模糊控制能够解决非线性、不确定性和有较强鲁棒性的优点,又延续了传统 PID 其较高的控制精度。采用模糊 PID 控制策略可以很好的克服上述缺陷,提高抗干扰能力和响应速度。模糊 PID 控制系统结构图,如图 4.2 所示。
在这里插入图片描述
上图中的模糊控制器选用二维控制器,以室内温度设定温度的偏差 e 及其变化率ec 作输入,乘以各自的量化因子后进行模糊化处理,输出为 PID 控制器比例因子、积分与微分时间的变化量,用于调整控制器的 P、I、D 三个参量,最终在线校正得到三个参数Kp ,Ki,Kd。随后 PID 控制器采用增量式的离散算法,得到控制量的值。

VAV 系统模糊 PID 输入输出变量的模糊化设计

由于模糊控制算法本身变量是模糊量,而模糊控制器的输入、输出都要求是精确量。因此,需将 VAV 空调系统中的偏差 e 及偏差变化率 ec 精确量进行模糊化处理:一方面,是模糊的划分,主要确定论域中模糊量的个数;另一方面,是确定隶属度函数,主要是选择合适的隶属度函数。这样,便可以在模糊量和精确量之间随意转换。

VAV 系统模糊规则和推理算法设计

VAV 系统嵌入式末端控制器的输出控制量主要由 PID 控制的kp 、ki 、kd 三个参数决定,而 PID 的这三个参数是由模糊控制的模糊规则在线整定的。因此,模糊规则设计的好坏与否直接影响末端控制器的控制性能。
kp 用于提高精度,加快响应速度;ki 用于消除稳态误差;kd 用于改善动态特性。故对同 e 和 ec,被控过程对pk 、ik 、dk 的自整定应符合如下规律:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将模糊变量 E、EC 分为 7 个等级,模糊子集均取为:{NB,NM,NS,ZO,PS,PM,PB},对应的语言描述分别为:负大、负中、负小、零、正小、正中、正大。
上述已经制定了模糊控制的模糊规则,输入系统的精确量可以转换为对应的模糊集合。接着,需要精确化输出的控制量。模糊推理的过程实际就是根据已知条件,按照给出的模糊规则表求解控制输出量的过程。而对于 VAV 空调温度控制系统来说,按照表 4.1、4.2 和 4.3 给出的控制规则,推导出△kp 、△ki 和△kd 就是模糊推理的过程。
在这里插入图片描述

PID算法Python代码

位置式PID算法

PID的Python实现

#位置式PID
import matplotlib.pyplot as plt

class PID():
    def __init__(self, dt, max, min, Kp, Ki, Kd):
        self.dt = dt  # 循环时长
        self.max = max  # 操作变量最大值
        self.min = min  # 操作变量最小值
        self.Kp = Kp  # 比例增益
        self.Ki = Ki  # 微分增益
        self.Kd = Kd  # 积分增益
        self.integral = 0  # 直到上一次的误差值
        self.pre_error = 0  # 上一次的误差值

    def calculate(self, setPoint, pv):
        # 其中 pv:process value 即过程值,
        error = setPoint - pv  # 误差(设定值与实际值的差值)
        Pout = self.Kp * error  # 比例项 Kp * e(t)
        self.integral += error * self.dt  #∑e(t)*△t
        Iout = self.Ki * self.integral  # 积分项 Ki * ∑e(t)*△t
        derivative = (error - self.pre_error) / self.dt  #(e(t)-e(t-1))/△t
        Dout = self.Kd * derivative  # 微分项 Kd * (e(t)-e(t-1))/△t

        output = Pout + Iout + Dout  # 新的目标值  位置式PID:u(t) = Kp*e(t) + Ki * ∑e(t)*△t + Kd * (e(t)-e(t-1))/△t

        if (output > self.max):
            output = self.max
        elif (output < self.min):
            output = self.min

        self.pre_error = error  # 保存本次误差,以供下次计算  e(k-1) = e(k)
        return output


t = range(160)
pid = PID(0.1, 100, -100, 0.1, 0.5, 0.01)
val = 0
setpoint = 15
z = []
for i in t:
    inc = pid.calculate(setpoint, val)    #新的目标值
    print("val:%f inc:%f" % (val, inc))
    z.append(val)  
    val += inc
#设置绘图风格
plt.style.use('ggplot')
plt.figure(figsize=(8, 6), dpi=80)
plt.plot(t, z, color="blue", linewidth=1.0, linestyle="-")
plt.xlabel('time (s)')
plt.ylabel('PID (PV)')
plt.show()

结果:

val:0.000000 inc:3.750000
val:3.750000 inc:2.062500
val:5.812500 inc:2.484375
val:8.296875 inc:2.528906
val:10.825781 inc:2.480273
val:13.306055 inc:2.321807
val:15.627861 inc:2.074080
val:17.701941 inc:1.756347
val:19.458288 inc:1.389571
val:20.847860 inc:0.994899
val:21.842758 inc:0.592738
val:22.435497 inc:0.201906
val:22.637402 inc:-0.161072
val:22.476331 inc:-0.482483
val:21.993847 inc:-0.751786
val:21.242061 inc:-0.961780
val:20.280281 inc:-1.108617
val:19.171664 inc:-1.191655
val:17.980009 inc:-1.213186
val:16.766823 inc:-1.178055
val:15.588768 inc:-1.093201
val:14.495566 inc:-0.967145
val:13.528421 inc:-0.809457
val:12.718964 inc:-0.630228
val:12.088736 inc:-0.439565
val:11.649171 inc:-0.247134
val:11.402037 inc:-0.061765
val:11.340272 inc:0.108861
val:11.449133 inc:0.258456
val:11.707588 inc:0.382271
val:12.089859 inc:0.477169
val:12.567029 inc:0.541611
val:13.108640 inc:0.575574
val:13.684214 inc:0.580410
val:14.264624 inc:0.558654
val:14.823277 inc:0.513800
val:15.337078 inc:0.450052
val:15.787129 inc:0.372065
val:16.159194 inc:0.284697
val:16.443892 inc:0.192770
val:16.636661 inc:0.100853
val:16.737514 inc:0.013083
val:16.750597 inc:-0.066978
val:16.683619 inc:-0.136455
val:16.547164 inc:-0.193220
val:16.353944 inc:-0.235919
val:16.118025 inc:-0.263958
val:15.854067 inc:-0.277462
val:15.576605 inc:-0.277196
val:15.299410 inc:-0.264473
val:15.034937 inc:-0.241045
val:14.793892 inc:-0.208978
val:14.584914 inc:-0.170532
val:14.414382 inc:-0.128043
val:14.286339 inc:-0.083804
val:14.202534 inc:-0.039975
val:14.162560 inc:0.001512
val:14.164072 inc:0.039009
val:14.203080 inc:0.071204
val:14.274284 inc:0.097150
val:14.371434 inc:0.116269
val:14.487703 inc:0.128345
val:14.616047 inc:0.133500
val:14.749548 inc:0.132157
val:14.881705 inc:0.124991
val:15.006695 inc:0.112873
val:15.119569 inc:0.096819
val:15.216388 inc:0.077923
val:15.294312 inc:0.057305
val:15.351617 inc:0.036056
val:15.387672 inc:0.015191
val:15.402864 inc:-0.004385
val:15.398479 inc:-0.021912
val:15.376567 inc:-0.036797
val:15.339770 inc:-0.048617
val:15.291153 inc:-0.057131
val:15.234022 inc:-0.062268
val:15.171754 inc:-0.064115
val:15.107639 inc:-0.062901
val:15.044739 inc:-0.058969
val:14.985770 inc:-0.052754
val:14.933016 inc:-0.044751
val:14.888265 inc:-0.035489
val:14.852776 inc:-0.025505
val:14.827271 inc:-0.015317
val:14.811954 inc:-0.005402
val:14.806553 inc:0.003819
val:14.810372 inc:0.011997
val:14.822369 inc:0.018861
val:14.841230 inc:0.024227
val:14.865457 inc:0.027995
val:14.893452 inc:0.030146
val:14.923598 inc:0.030736
val:14.954334 inc:0.029887
val:14.984221 inc:0.027772
val:15.011993 inc:0.024607
val:15.036600 inc:0.020633
val:15.057233 inc:0.016105
val:15.073338 inc:0.011280
val:15.084618 inc:0.006404
val:15.091022 inc:0.001700
val:15.092722 inc:-0.002636
val:15.090087 inc:-0.006443
val:15.083644 inc:-0.009600
val:15.074044 inc:-0.012026
val:15.062017 inc:-0.013682
val:15.048335 inc:-0.014565
val:15.033770 inc:-0.014709
val:15.019062 inc:-0.014177
val:15.004885 inc:-0.013056
val:14.991829 inc:-0.011454
val:14.980374 inc:-0.009488
val:14.970887 inc:-0.007280
val:14.963607 inc:-0.004953
val:14.958654 inc:-0.002623
val:14.956030 inc:-0.000395
val:14.955635 inc:0.001640
val:14.957275 inc:0.003408
val:14.960683 inc:0.004857
val:14.965540 inc:0.005949
val:14.971489 inc:0.006670
val:14.978159 inc:0.007023
val:14.985183 inc:0.007027
val:14.992209 inc:0.006713
val:14.998923 inc:0.006127
val:15.005050 inc:0.005320
val:15.010370 inc:0.004351
val:15.014721 inc:0.003276
val:15.017997 inc:0.002156
val:15.020153 inc:0.001045
val:15.021199 inc:-0.000008
val:15.021190 inc:-0.000962
val:15.020229 inc:-0.001782
val:15.018447 inc:-0.002444
val:15.016003 inc:-0.002933
val:15.013070 inc:-0.003245
val:15.009826 inc:-0.003380
val:15.006445 inc:-0.003351
val:15.003094 inc:-0.003173
val:14.999921 inc:-0.002870
val:14.997051 inc:-0.002466
val:14.994585 inc:-0.001989
val:14.992596 inc:-0.001468
val:14.991129 inc:-0.000929
val:14.990199 inc:-0.000400
val:14.989799 inc:0.000097
val:14.989896 inc:0.000543
val:14.990439 inc:0.000922
val:14.991361 inc:0.001224
val:14.992585 inc:0.001442
val:14.994027 inc:0.001575
val:14.995601 inc:0.001624
val:14.997225 inc:0.001595
val:14.998820 inc:0.001498
val:15.000318 inc:0.001342
val:15.001660 inc:0.001140
val:15.002800 inc:0.000906
val:15.003706 inc:0.000654
val:15.004360 inc:0.000396
val:15.004755 inc:0.000144

在这里插入图片描述

增量式PID算法

PID算法之增量式控制温度

#增量式PID
import matplotlib.pyplot as plt

class PID():
    def __init__(self, dt, max, min, Kp, Ki, Kd):
        self.dt = dt  # 循环时长
        self.max = max  # 操作变量最大值
        self.min = min  # 操作变量最小值
        self.Kp = Kp  # 比例增益
        self.Ki = Ki  # 微分增益
        self.Kd = Kd  # 积分增益
        self.error = 0  # 当前误差
        self.error_1 = 0  #上次误差
        self.error_2 = 0  # 上上次误差
        self.pre_output = 0  #上次的输出值

    def calculate(self, setPoint, pv):
        # 其中 pv:process value 即过程值,
        error = setPoint - pv  # 误差(设定值与实际值的差值)
        Pout = self.Kp * (error - self.error_1)  # 比例项 Kp * (e(t)-e(t-1))
        Iout = self.Ki * error  # 积分项 Ki * e(t)
        Dout = self.Kd * (error - 2*self.error_1 + self.error_2)  # 微分项 Kd * (e(t)-2*e(t-1)+e(t-2))
        output = Pout + Iout + Dout + self.pre_output  # 新的目标值  位置式PID:u(t) = Kp*(e(t)-e(t-1)) + Ki*e(t) + Kd*(e(t)-2*e(t-1)+e(t-2)) + u(t-1

        if (output > self.max):
            output = self.max
        elif (output < self.min):
            output = self.min

        self.pre_output = output
        self.error_2 = self.error_1  #e(k-2) = e(k) ,进入下一次计算使用
        self.error_1 = error  # e(k-1) = e(k)
        return output


t = range(100)
pid = PID(0.1, 100, -100, 0.2, 0.5, 0.05)
val = 0
setpoint = 15
z = []
for i in t:
    inc = pid.calculate(setpoint, val)    #新的目标值
    print("val:%f inc:%f" % (val, inc))
    z.append(val)
    val += inc
#设置绘图风格
plt.style.use('ggplot')
plt.figure(figsize=(8, 6), dpi=80)
plt.plot(t, z, color="blue", linewidth=1.0, linestyle="-")
plt.xlabel('time (s)')
plt.ylabel('PID (PV)')
plt.show()

结果:

val:0.000000 inc:11.250000
val:11.250000 inc:9.562500
val:20.812500 inc:4.828125
val:25.640625 inc:-1.221094
val:24.419531 inc:-5.384180
val:19.035352 inc:-6.116865
val:12.918486 inc:-3.816101
val:9.102385 inc:-0.219112
val:8.883274 inc:2.703224
val:11.586498 inc:3.723214
val:15.309712 inc:2.772716
val:18.082427 inc:0.724484
val:18.806911 inc:-1.221457
val:17.585454 inc:-2.172596
val:15.412859 inc:-1.896949
val:13.515910 inc:-0.789296
val:12.726613 inc:0.449874
val:13.176487 inc:1.209697
val:14.386184 inc:1.236674
val:15.622858 inc:0.676561
val:16.299420 inc:-0.080455
val:16.218965 inc:-0.635996
val:15.582969 inc:-0.772504
val:14.810465 inc:-0.516410
val:14.294055 inc:-0.072960
val:14.221094 inc:0.308912
val:14.530006 inc:0.463033
val:14.993039 inc:0.366201
val:15.359240 inc:0.118182
val:15.477422 inc:-0.131764
val:15.345658 inc:-0.265743
val:15.079915 inc:-0.245853
val:14.834062 inc:-0.114708
val:14.719354 inc:0.041999
val:14.761354 inc:0.145087
val:14.906441 inc:0.157695
val:15.064136 inc:0.093458
val:15.157594 inc:-0.000819
val:15.156775 inc:-0.074329
val:15.082446 inc:-0.097010
val:14.985436 inc:-0.069192
val:14.916244 inc:-0.014866
val:14.901377 inc:0.034702
val:14.936079 inc:0.057244
val:14.993323 inc:0.048006
val:15.041329 inc:0.018202
val:15.059532 inc:-0.013714
val:15.045818 inc:-0.032284
val:15.013534 inc:-0.031666
val:14.981868 inc:-0.016298
val:14.965571 inc:0.003408
val:14.968979 inc:0.017252
val:14.986231 inc:0.019994
val:15.006225 inc:0.012746
val:15.018970 inc:0.001074
val:15.020044 inc:-0.008579
val:15.011465 inc:-0.012113
val:14.999351 inc:-0.009190
val:14.990162 inc:-0.002579
val:14.987583 inc:0.003815
val:14.991398 inc:0.007033
val:14.998431 inc:0.006250
val:15.004681 inc:0.002699
val:15.007380 inc:-0.001354
val:15.006026 inc:-0.003893
val:15.002133 inc:-0.004054
val:14.998079 inc:-0.002275
val:14.995804 inc:0.000189
val:14.995993 inc:0.002032
val:14.998025 inc:0.002521
val:15.000546 inc:0.001719
val:15.002265 inc:0.000283
val:15.002548 inc:-0.000976
val:15.001572 inc:-0.001504
val:15.000069 inc:-0.001211
val:14.998858 inc:-0.000412
val:14.998445 inc:0.000408
val:14.998853 inc:0.000859
val:14.999712 inc:0.000808
val:15.000520 inc:0.000389
val:15.000909 inc:-0.000122
val:15.000787 inc:-0.000466
val:15.000321 inc:-0.000516
val:14.999805 inc:-0.000313
val:14.999492 inc:-0.000007
val:14.999486 inc:0.000237
val:14.999722 inc:0.000316
val:15.000038 inc:0.000230
val:15.000268 inc:0.000054
val:15.000322 inc:-0.000109
val:15.000213 inc:-0.000186
val:15.000028 inc:-0.000158

在这里插入图片描述
PID参数调节口诀:
参数整定找最佳,从小到大顺序查
先是比例后积分,最后再把微分加
曲线振荡很频繁,比例度盘要放大
曲线漂浮绕大湾,比例度盘往小扳
曲线偏离回复慢,积分时间往下降
曲线波动周期长,积分时间再加长
曲线振荡频率快,先把微分降下来
动差大来波动慢。微分时间应加长
理想曲线两个波,前高后低4比1
一看二调多分析,调节质量不会低

  • 0
    点赞
  • 0
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值