温度控制系统及控制方案08自动化侯伟08378094【摘要】:本设计采用51单片机与pc机相结合,使用ADC0809对温度进行采样,所得的数据使用中位值平均滤波法进行滤波,然后使用专家模糊PID控制算法对加热炉进行控制,能够进行恒温定点加热,也能够使其温度按工艺所要求的温度曲线变化,在不同时段按要求加热。
【关键字】:PC机51单片机炉温控制专家模糊PID控制滤波一、概述温度是工业生产中常见的工艺参数之一,任何物理变化和化学反应过程都与温度密切相关,因此温度控制是生产自动化的重要任务。
对于不同生产情况和工艺要求下的温度控制,所采用的加热方式,燃料,控制方式也各不相同。
系统用温度传感器将检测到的实际炉温A/D转换,51单片机把所得值与设定值进行比较,使用专家模糊PID算法进行修正,求得对应的控制量控制可控硅驱动器,调节电炉的加热功率,从而实现对炉温的控制。
因此采集的炉温数据精度至关重要。
利用51单片机实现温度智能控制,能自动完成数据采集、处理、缓冲、转换、并进行PID实施控制,包括各参数数值的修正,并把数据传输给PC机进行动态直观显示,同时也可以通过PC机设定参数。
但在控制过程中应该注意,采样周期不能太短,否则使调节过于频繁,不但执行机构不能反应,而且计算机的利用率大为降低。
采样周期太长,也是不合适,因为干扰无法及时消除,使调节品质下降。
随着单片机在各行业控制系统中的普遍采用,其构成的实时控制系统日臻完善,使该温度控制系统的总体性能大大提高,功能更趋完善,并详细介绍了该系统的软、硬件实施手段及系统特点。
二、温度控制系统的硬件组成框图与其详细功能介绍PC机:根据51单片机传输过来的值绘制T-t曲线,同时在调试过程可以给单片机传输参数,而在曲线跟踪过程中也是通过pc机给单片机传输某时刻的设定值。
51机:接收adc采样得到的数值,并进行滤波处理,根据所得到的数值进行专家模糊PID控制,得到相应的PWM值,直接通过控制继电器的通断控制温控箱加热棒和风扇的通断。
同时传输相关的数据给PC机进行显示,也接收PC机的温度设定值。
继电器盒:接受51机的通断信号,弱电控制强电,对加热棒及风扇进行控制。
分为手动和自动两种方式加热棒:对温控箱加热,可通过改变通断的占空比来调节加热的速率风扇:对温控箱降热,通过改变通断的占空比来调节降热的速率加热箱:被控对象,特点:延时大,温度在一定范围内是线性变化的。
硬件电路三、控制流程(一)程序设计●51机程序流程图如图2所示:●PC机程序流程图如图3所示。
1、MSComm控件(1)通信方式PC机和51机之间采用RS-232C串口通信,选用Visual Basic 6.0编写控制软件。
使用MSComm通信控件控制串口通信。
MSComm是微软公司提供的用于Windows下串口通信的ActiveX控件。
应用程序可以通过它简单而方便的通过串口收发数据。
MSComm控件提供了两种通信方式:事件驱动和查询。
事件驱动是串口交互通信中的一种非常有效的方法。
当串口接收缓冲区中收到数据,或者串口发送完毕之类的事件发生时,系统将事件转换为消息,在MSComm控件中体现为CommEvent属性值的变化。
利用MSComm控件的OnComm事件可以捕获并处理这些消息,从而实现串口通信的编程。
查询实质上还是属于事件驱动的范围,因为查询是通过每隔一段时间就查询一次MSComm控件的CommEvent属性的值来查询发生的事件和出现的错误。
一旦CommEvent 的值发生变化,说明有通信事件或者错误发生。
(2)MSComm控件编程A.MSComm控件的初始化对MSComm串口的初始化一般要完成以下的设置:设定端口号(CommPort)、设定传输协议(Settings)、设定其他参数、打开通信端口。
B.捕捉串口事件在窗体设计中,双击窗体中的MSComm空间,会自动弹出代码窗口,系统会自动生成OnComm子程序并定位光标在OnComm子程序。
我们可以在里边编程设定发生OnComm事件后应当执行的操作。
C.串口数据的读取在MSComm控件中,对接收缓冲区的读取有两种方式,一种是文本形式,一种是二进制形式。
对于文本形式来说,需要在初始化时设置InputMode属性为comInputModeText,读取时可以直接将接收缓冲区赋值给一个String字符串变量。
对于二进制形式的数据来说,读取数据稍微麻烦一点。
即使我们只接收到一个字节的数据,都无法用数值类型变量接收数据。
通过查阅MSDN我们知道,Input属性通过一个Variant变体变量返回一个二进制数组,所以我们既可以用Variant变量接收,接受后的变量作为二进制数组使用,也可直接用二进制数组接收。
D.串口数据的写入。
在MSComm控件中,发送数据同样有两种方式。
一种是文本方式,另一种是二进制方式。
对于文本方式,直接将一个字符串变量传递给Output属性就行了。
2、温度曲线的绘制(1)画图框首先建立一个PictureBox画图框picture1,所有的曲线绘制工作都在这个画图框中进行。
画图框有一个重要的布尔属性AutoRedraw,缺省值为False,当程序窗口被遮盖时,再切换回程序,之前绘制的图形中被挡住的部分会被擦去;设置为True后,切换回程序,系统会自动重新绘制被擦去的部分。
(2)确定绘图点的位置VB给我们提供了自己的坐标系。
即:画图框左上角为原点(0,0),往右为X方向,向下为Y方向。
为画图方便,系统设定picture1的大小为(0,0)-(1200,100),而时钟为1s,所以picture1的一个点对应1秒,总时长20min,而纵坐标即温度值。
但实验中温度范围为没有0到100,故把纵坐标设为30-80,Y 值也需由式子Y=(T-30)*2得到。
(3)绘图方法Pset 方法(点)、Line 方法(线)、Circle 方法(圆)(二)系统的算法与基本原理1、数据采集与滤波实验中采样时间为1s 采集10个数据,但是采集的数据不稳定,必须进行滤波处理,根据采集数据的特点选择了中位值平均滤波法(又称防脉冲干扰平均滤波法)连续采样N 个数据,去掉一个最大值和一个最小值,然后计算N-2 个数据的算术平均值。
但是单单该算法数据还是有不少的波动,于是再把所得的结果与上次的结果进行平均处理。
这样得到的数据就基本稳定了,但还有一个问题,就是由于变送器出错会使温度值出现坏点,于是进行了二次滤波,即根据所得的结果与上次的结果进行比较,若偏差大于2.5度则认定为坏点,同时把上次的结果赋给这次的结果。
2、控制算法对于炉温控制,其方框图为:系统框图■ 普通PID 控制算法PID 算法作为简单有效的控制方法,具有极强的通用性。
控制器的算法为 (E (t )为误差):])()()([)(0dtt de T dt t e k t e k t U dti p ++=⎰ 经数字离散化,控制器(其中T 为采样周期,我们设置为3S )为:)]1()([)()()]}1()([)()({)(0--++=--++=∑∑==k E k E TT K i E T T K k E k k E k E TT i E T Tt e k k U d p ki ip p dki i p经化简有:,,,TT K D T T k I k P d p ip p === ---------------①)]1()([)()()(0--++=∑=k E k E D i E I k PE k U ki ---------------②经PID 控制器输出U (T ),作为占空比的控制。
■ 积分分离PID 控制算法虽然PID 易于实现,但当输入的偏差太大时,容易产生因积分溢出引起振荡。
积分分离PID 算法就是判断当误差超过一定程度的时候,撤消积分影响。
数字化后的控制器为:10)],1()([)()()(0或=--++=∑=ααk E k E D i E I k PE k U ki■ 前馈校正加PID 算法由于PID 控制是一种误差消除的过程,总是会出现振荡过程,而且无论是多好的PID 参数,一旦输入量发生变化,仍然要经过同样的振荡过程。
加入一个前馈校正,根据输入变化对PID 输出值进行校正,这样可以消除振荡,使输出趋势更加准确。
其方框图为:前馈控制框图即是对于输入的现在斜率变化,和一段时间后的斜率变化作对比,出现一个差值,作为PID 控制器输出的调整量。
(三)试验过程用计算机控制一个工业生产过程时,必须先将过程中表达因与果、量与量之间的关系用数学形式描述出来,编好程序存入计算机,才能实现控制有关的生产过程。
对数学模型的建立有阶跃响应法、脉冲响应法、相关函数法等多种方法。
1、 炉子模型建立及PID 参数的初步确定采用阶跃响应方法,对炉子的数学模型K/(1+Ts )(1+τs )进行多次测试。
经分析可得以下参数:炉子时间常数T=5~8min ,K=0.6~1.2,延迟时间τ=0.5~2.5min由已得参数, 采用Matlab 仿真,根据临界比例系数法可先得出一个近似得比例系数,为实验做好准备。
Simulink仿真框图得到等幅振荡响应:临界比例系数Ku=10,振荡周期Tu大约为200s在实际实验当中,用临界比例系数法得Tu=220S基本相符。
根据经验PID参数与Ku,Tu的关系,有:Kp=10/1.67=6Ti=0.5*Tu=100STd=0.125*Tu=25代入①式,有:P=6,I=0.18(选用0.2),D=50(选用45)按此作为PID控制器初步参数。
2、实际试验过程及算法的调整1)定温算法实验中试验了该PID算法,但由于所用的炉子功率太小,导致出现超调之后温度很难降下来,也使炉温出现长时间的震荡,所用实验采用了让风扇全开,通过控制加热棒是炉子稳定到所需的温度。
根据炉子的温度曲线走向趋势,采用了专家PID算法,即编程使炉子的曲线按自己想要的方向发展。
通过不断的修改算法与试验,最终得到的算法大概如下:先让炉子全速升温,在炉子温度上升到设定温度10度误差范围内时采用带积分分离的PI控制算法,而D分量分离开来作为判断依据。
根据D分量判断炉子是升温还是在降温,在升温过程出现负偏差时,马上关掉加热棒,而在降温过程中负偏差大于两度时才关闭加热棒。
其他时候都是根据PI算法得出的结果控制加热棒的开关占空比。
积分值设了一个上限,但误差积分超过该上限则积分值为该上限值,若积分值继续增大的另一个上限则把积分值设为0,重新累计误差。
而上限值的选取在不同温度时可选不同的值,在调整过程中可以设的大一点,而在稳态时可以设小一点,从而使炉温更加稳定。
该算法得出的结果如下图:由图可见除去一两个坏点(是由于变送器引起的,虽然经过二次滤波后数值减小了,但依旧可以看到),炉子温度稳定在65度左右,误差1度。