水温自动控制系统.doc

上传人:laozhun 文档编号:2931152 上传时间:2023-03-03 格式:DOC 页数:59 大小:164KB
返回 下载 相关 举报
水温自动控制系统.doc_第1页
第1页 / 共59页
水温自动控制系统.doc_第2页
第2页 / 共59页
水温自动控制系统.doc_第3页
第3页 / 共59页
水温自动控制系统.doc_第4页
第4页 / 共59页
水温自动控制系统.doc_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《水温自动控制系统.doc》由会员分享,可在线阅读,更多相关《水温自动控制系统.doc(59页珍藏版)》请在三一办公上搜索。

1、自动化工程学院创新实验室 水温自动控制系统 参与人: 指导老师: 水温自动控制系统摘要:水温自动控制系统在工业及日常生活中应用广泛,在生产和生活中都发挥着重要作用,如一些现代化车间里,生产特殊产品加工需要在一定的温度才能进行,水产养殖中也要对水的温度进行严格的控制,才能确保达到最好的效果。在居家生活中,我们同样也离不开水温的控制,如电热水器,自动饮水机等,都要用到水温控制。实现水温控制的方法很多,如单片机控制、PLC控制等等。而其中用单片机实现的水温控制系统,具有可靠性高、价格低、简单易实现等众多优点。单片机用于工业控制是近年来发展非常迅速的领域,现在许多自动化的生产车间里,都是靠单片机来实现

2、的。温度是工业控制对象主要被控参数之一,在温度控制中,由于受到温度被控对象特性(如惯性大、滞后大、非线性等)的影响,使得控制性能难以提高,有些工艺过程其温度控制的好坏直接影响着产品的质量,因而设计一种较为理想的温度控制系统是非常有价值的。为了实现高精度的水温测量和控制,本文介绍了一种以stm32 32位单片机为核心,以PID算法控制以及PID参数整定相结合的控制方法来实现的水温控制系统,其硬件电路还包括温度采集、温度控制、温度显示、键盘输入以及RS232接口等电路。该系统可实现对温度的测量,并能根据设定值对温度进行调节,实现控温的目的。关键词:stm32;温度控制;PT100;PIDDesig

3、n of Temperature Automatic Control SystemAbstract:The temperature is one of the mainly charged parameters which are industrial control targets. It is difficult to enhance the control performance due to the characteristics of the temperature charged object. Such as inertia, hysteresis and non-linear,

4、 etcIts temperature control process will have a direct impact on the quality of the product in some technological process. Therefore it is absolute valuable to design a ideal temperature control system.In order to realize the high accuracy survey and control of water temperature. Systematic core is

5、stm32, which is high-performance 32-bit MCU of Atmel Company. The system unifies PID control algorithm and PID parameter tuning to control the water temperature. Its hardware circuit also includes temperature gathering, temperature control and temperature display, keyboard input and RS232 interfaces

6、. The system can realize to survey the water temperature, and it can adjust the temperature according to the setting value.Keywords:stm32; temperature control; PT100; PID一、引言1.1 课题背景一些价格比较昂贵的观赏鱼,如蝴蝶鱼,银龙鱼等对于温度的要求比较苛刻。随着人们生活水平的提高,这些鱼类在我国的饲养开始兴盛,因此,对饲养环境温度进行恒温控制十分必要。现有的一些温度控制设备,如HAl68型的温度控制棒,结构比较简单,一般采

7、取的是开关式的控制,即当测量温度低于设定温度时进行加热,其结果是饲养水域内温度不均,控温效果不理想。1.2 国内外研究现状目前,国外温度控制系统及仪表正朝着高精度智能化、小型化等方面快速发展。 温度控制系统在国内各行各业的应用虽然已经十分广泛,但从国内生产的温度控制器来讲,总体发展水平仍然不高,同国外的日本、美国、德国等先进国家相比,仍然有着较大的差距。目前,我国在这方面总体技术水平处于20世纪80年代中后期水平。成熟产品主要以“点位”控制及常规的PID控制器为主,它只能适应一般温度系统控制,难于控制滞后复杂时变温度系统控制,而且适应于较高控制场合的智能化、自适应控制仪表国内技术还不十分成熟,

8、形成商品化并广泛应用的控制仪表较少。现在,我国在温度等控制仪表业与国外还有着一定的差距。随着嵌入式系统开发技术的快速发展及其在各个领域的广泛应用,人们对电子产品的小型化和智能化要求越来越高,作为高新技术之一的单片机以其体积小、价格低、可靠性高、适用范围大以及本身的指令系统等诸多优势,在各个领域、各个行业都得到了广泛应用。1.3研究方法本文主要介绍单片机温度控制系统的设计过程,其中涉及系统结构设计、元器件的选取和控制算法的选择、程序的调试和系统参数的整定。以stm32为CPU,温度信号由Pt1000和电压放大电路提供。电压放大电路用超低温漂移高精度运算放大器OP07将温度-电压信号进行放大,用单

9、片机控制SSR固态继电器的通断时间以控制水温,系统控制对象为1升净水,容器为高性能塑料水杯。水温可以在环境温度降低时实现自动控制,以保持设定的温度基本不变,具有较好的快速性与较小的超调。 二、 系统框架2.1 水温控制系统设计任务和要求该系统为一实验系统,系统设计任务:设计一个水温自动控制系统,控制对象为1升净水,容器为搪瓷器皿。水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动调整,以保持设定的温度基本不变。系统设计具体要求:温度设定范围为2090;环境温度降低时(例如用电风扇降温)温度控制的静态误差0.5;采用适当的控制方法,当设定温度突变(由40提高到60)时,减小系统的调节时

10、间和超调量;用12864 显示水温曲线和设定值|、测量值。2.2 水温控制系统部分水温控制系统是一个过程控制系统,组成框图如图1所示,由控制器、执行器、被控对象其反馈作用的测量变送组成。控制系统框图除了以上的组成元件以外,还要选择合适的算法以实现所要求的控制精度,以下我会对关键的元件以及电路的确定进行详细的分析。因为它们选取的好坏将直接影响着整个系统实现效果的优劣。2.2.1 CPU(Computer processing Unit)中央处理器方案一:此方案采用89S52单片机实现,89c52单片机的AD是采用外置的,单片机处理速度比较低,而且单片机编程软件自由度小,端口较少。方案二,stm3

11、2核心,stm32有自带的AD数模转换模块,此方案简易可行,器件的性价比很高宜采用。此单片机软件编程自由度大,可用编程实现各种控制算法和逻辑控制。进行数据转换,控制电路部分采用SSR固态继电器控制电炉丝的通断此方案电路简单并且可以满足题目中的各项要求的精度。总体框图如图2所示。 按键设置12864液晶显示PT100前置放大 AD采集Stm32SSR固态继电器热电阻制器设计总体框图温度控制采用改进的PID数字控制算法,显示采用电脑上位机串口静态显示pid调节的占空比,这样更能直观的看到调节程度及调节过程。2.2.2 温度控制系统算法分析系统算法控制采用工业上常用的增量型PID数字控制,并且结合特

12、定的系统加以算法的改进,形成了变速积分PID积分分离PID控制相结合的自动识别的控制算法。该方法不仅大大减小了超调量,而且有效地克服了积分饱和的影响,使控制精度大大提高。长期以来国内外科技工作者对温度控制器进行了广泛深入的研究,产生了大批温度控制器,如性能成熟应用广泛的PID调节器、智能控制PID调节器、自适应控制等。此处主要对一些控制器特性进行分析以便选择适合的控制方法应用于改造。常用的控制算法有以下几种: 经典的比例积分微分控制算法; 根据动态系统的优化理论得到的自适应控制和最优控制方法;根据模糊集合理论得到模糊控制算法。自适应控制、最优控制方法以及模糊控制算法是建立在精确的数学模型基础上

13、的,在实时过程控制中,由于控制对象的精确数学模型难于建立,系统参数经常发生变化,运用控制理论进行综合分析要花很大代价,主要是时间。同时由于所得到的数学模型过于复杂难于实现。在实时控制系统中要求信号的控制信号的给出要及时,所以在目前的过程控制系统中较少采用自适应控制、最优控制方法和模糊控制算法。目前在过程控制中应用较多的还是PI控制算法、PD控制算法和PID控制算法。水温控制系统的控制对象具有热储存能力大,惯性也较大的特点,水在容器内的流动或热量传递都存在一定的阻力,因而可以归于具有纯滞后的一阶大惯性环节。对于大惯性系统的过渡过程控制,一般可采用以下控制方案:开关量控制 这种方法通过比较给定值与

14、被控参数的偏差来控制输出的状态,开通或关断,因此控制过程十分简单,也容易实现;但由于输出控制量只有两种状态,使被控参数在两个方向上变化的速率均为最大,因此容易引起反馈回路振荡,控制精度不高;这种控制方案一般在大惯性系统对控制精度和动态特性要求不高的情况下采用。我们采用的是比例微分控制加比例积分微分控制,由于在温度上升的过程中为了减少超调量,我们先采用比例积分微分控制,当温度到一定范围的时候:例如当温度偏差到0.5的时候就加上积分控制,这样既能减少超调量,又能积分累加,保持温度调节。 ty 图4 比例控制ty ty 比例积分控制 图6 比例积分微分控制方案选择:结合本设计任务与要求,由于水温系统

15、的传递函数事先难以精确获得,因而很难判断哪一种控制方法能够满足系统对控制品质的要求;但从以上对控制方法的分析来看,PID控制方法最适合本例采用:一方面,由于可以采用单片机实现控制过程,无论哪一种控制方法都不会增加系统硬件成本,而只需对软件作相应改变即可实现不同的控制方案;另一方面,采用PID的控制方式可以最大限度地满足系统对诸如控制精度、调节时间和超调量等控制品质的要求。由图7可知PID调节器是一种线性调节器,这种调节器是将设定值与实际输出值进行比较构成偏差,下面是pid调节控制过程算法。Set_wendu=chuan_wendu; Measure_wendu=wendu; Ek=Set_we

16、ndu-Measure_wendu;/这两个温度值,Set_wendu来自于键盘的设定值,Measure_wendu来自于ADC if(Measure_wendu40.0) if(Ek50.0) if(Set_wendu-Measure_wendu)1.5|(Set_wendu-Measure_wendu)=-1.5&(Set_wendu-Measure_wendu)=1.5) Dpk=Kp*Pk+Ki*Ik+Kd*Dk; else if(Measure_wendu0.2|(Set_wendu-Measure_wendu)=-0.2&(Set_wendu-Measure_wendu)=0.2)

17、 Dpk=Kp*Pk+Ki*Ik+Kd*Dk; Pout=Pout+Dpk;if(Pout=0) Pout=0; TIM4_Configuration(Pout); Ek2=Ek1;Ek1=Ek 模拟PID控制可见温度PID调节器有三个可设定参数,即比例放大系数、积分时间常数、微分时间常数。比例调节的作用是使调节过程趋于稳定,但会产生稳态误差;积分作用可消除被调量的稳态误差,但可能会使系统振荡甚至使系统不稳定;微分作用能有效的减小动态偏差。Pid采样周期一定要设定一个恰当的值,多测量几组数据调一下Kp、Ki、Kd的系数找到一个恰当的值。温度控制曲线图控制方式:该控制系统是把输出量检测出来,经过

18、物理量的转换,再反馈到输入端去与给定量进行比较(综合),并利用控制器形成的控制信号通过执行机构SSR对控制对象进行控制,抑制内部或外部扰动对输出量的影响,减小输出量的误差,达到控制目的。自动控制框图下图所示,在此控制系统中单片机就相当于常规控制系统中的运算器控制器,它对过程变量的实测值和设定位之间的误差信号进行运算然后给出控制信息。单片机的运算规则称为控制法则或控制算法。 Stm32热电阻 自动控制框图三、系统硬件模块单片机系统是整个控制系统的核心,stm32单片机需的I/O口、中断、定时及存放中间结果的RAM电路;前向通道是信息采集的通道,主要包括传感器、信号放大、A/D转换等电路;由于水温

19、变化是一个相对缓慢的过程,因此前向通道中没有使用采样保持电路;信号的滤波可由软件实现,以简化硬件、降低硬件成本。键盘设定:用于温度设定,用的是4*4矩阵键盘。数据采样:将由传感器及相关电路采集到的温度转为电压信号,经A/D转换后,送入stm32AD采集接口并把电压值转换温度值。数据显示:采用了12864显示温度与测量温度并显示温度曲线。串行口传输:将pwm输出的占空比用上位机显示在电脑上,以供观察调节的正确性。继电器/热电阻;通过光耦控制晶体管,让晶体管来控制继电器,通过光耦来控制输入和输出的隔离。 3.2 外部电路设计3.2.1 温度采集电路本系统运放采用OP07,OP07是一种高精度单片运

20、算放大器,具有很低的输入失调电压和漂移。OP07的优良特性使它特别适合作前级放大器,放大微弱信号。使用OP07一般不用考虑调零和频率问题就能满足要求。 OP07典型应用图Multimeter 8模拟图采用温度传感器铂电阻Pt100,对于温度的精密测量而言,温度测量部分是整个系统设计的第一步。温度传感器的选择是这块电路的关键,它是直接影响整个系统的性能与效果的关键因素之一。这里采用的是精密级铂电阻温度传感器Pt100,它的金属铂含量达99. 9999%,因为铂电阻的物理和化学性能在高温和氧化介质中很稳定、价格又便宜,常用作工业测量元件,以铂电阻温度计作基准器线性好,温度系数分散性小,在0100摄

21、氏度时,最大非线性偏差小于0.5摄氏度,性能稳定,广泛用于精密温度测量和标定。铂热电阻与温度关系式,其中:-温度为t摄氏度时的电阻; -温度为0摄氏度时的电阻;A、B-温度系数 A=3.94*102/;其中B=-/;T-任意温度。3.2.2 温度控制电路此部分通过控制继电器的通断从而控制热电阻(俗称“热得快”),采用对加在热电阻两端的电压进行通断的方法进行控制,以实现对水加热功率的调整,从而达到对水温控制的目的,即在闭环控制系统中对被控对象实施控制。此部分的继电器采用的是SSR(Solid State Relays,缩写SSR)继电器,即固态继电器。工作原理:固态继电器是一种无触点电子开关,由

22、分立元器件、膜固定电阻网络和芯片,主要由输入(控制)电路,驱动电路和输出(负载)电路三部分组成。固态继电器的输入电路是为输入控制信号提供一个回路,使之成为固态继电器的触发信号源。固态继电器的输入电路多为直流输入,个别的为交流输入。固态继电器的输出电路是在触发信号的控制下,实现固态继电器的通断切换。输出电路主要由输出器件(芯片)和起瞬态抑制作用的吸收回路组成,固态继电器(SSR)是一种全电子电路组合的元件,它依靠半导体器件和电子元件的电、磁和光特性来完成其隔离和继电切换功能。固态继电器与传统的电磁继电器(EMR)相比,是一种没有机械、不含运动零部件的继电器,但具有与电磁继电器本质上相同功能。工作

23、原理:下图是继电器的工作原理,stm32端口通过端口控制光耦,然后光耦控制晶体管,让晶体管来控制继电器的开关。SSR工作原理图注意:光耦的 输入端与输出端一定要隔离开。 四、 系统软件设计4.1 程序框架结构一个整体的系统软件设计是由各个在系统里起着不同作用的模块整合在一起,从而实现系统的所要实现的功能。本系统硬件接口如下:GPIOA_Pin8,AD采集;GPIOC_Pin0GPIOC_Pin712864显示;GPIOB_Pin8控制继电器;GPIOA_Pin0GPIOA_Pin7矩阵键盘扫描;此系统包括主控制程序,A/D采样数据处理程序,PID算法程序,12864显示及按键处理程序。结构框架

24、图如下图所示。12864显示程序结构图主程序模块相当于调度室,对子程序模块的调用进行管理,它主要负责初始化IO口;等待键盘的被按下,并调用相应的模块进行处理;在适当的时候接受A/D采样的数据,并与所设定的值进行比较,然后通过调用PID算法处理数据,处理后来控制继电器的通断,从而控制热电管达到控制水温的目的。4.2 程序流程图及部分程序4.2.1 主程序模块由于模块化程序的设计,通过调用程序即可实现所用功能,主程序流程图如图25所示。 主程序流程图五、设计总结 针对现在一些人想养一些名贵的鱼,以及在一些工业中对温度要求很严格的场合,都要求用到温度控制体系,所以温度控制显得尤为重要。本项目的设计满

25、足一部分基本要求。总之,温度控制技术在现在要求的越来越重要。六、心得体会在本次课程设计制作过程中,我们收获颇多。首先,自学能力大大提高。由一开始的一无所知到最终设计成功,我们所需要的知识除了来自课堂,更多的是课外通过上网查询、向老师和师兄请教等多种渠道获得。其次,在制作过程中遇到很多硬件和软件等各方面的问题,多次修改无果失去耐心时,团队的力量使我们重新振作,并最终将困难一一解决,由此我们体会到合作的重要性。团队分工明确、成员互相鼓励以及个人的责任感都起了至关重要的作用。第三,我们切身感受到了理论与实践的巨大差距,课本上的知识是不能照搬的,需要结合自己的创造力才能实现其作用。附录1参考程序如下:

26、主程序#include stm32f10x_lib.h#include stdio.hTIM_OCInitTypeDef TIM_OCInitStructure;void RCC_Configuration(void);void GPIO_Configuration(void);void Systick_Configuration(void);void USART_Configuration(void);void ds_in(void);void ds_out(void);void Delay_1us(u16 m);void Delay_Ms(u16 time);void shuchu_128

27、64(void);void shuru_12864(void);void drawPoint(unsigned char x,unsigned char y); void write_com(u16 com); void write_data(u16 data);unsigned char read_data(void);void init(void);void clear(void); void display(u8 *a); void ds(u8 dz,u16 shu); void TIM4_Configuration(u16 chu); void TIM2_Configuration(v

28、oid);void NVIC_Configuration(void);void ADC_Configuration(void); void filter(void);void guan_bi(void); double dat;u8table2=1,2,3,A,4,5,6,B,7,8,9,C,*,0,#,D; double AD_get;double table480=0;double Kp,Ki,Kd; double wendu=0.0;double Set_wendu=80.0;double Measure_wendu=0.0;double Ek1=0.0;double Ek2=0.0;d

29、oubleEk=0.0;double chushi=1000;doublechuan_wendu=80.0;int flag2;u32 Pout; u8g=0; u32 f=0;/18b20的程序 void ds_init(void) ds_in(); GPIO_ResetBits(GPIOB,GPIO_Pin_6); Delay_1us(480); GPIO_SetBits(GPIOB,GPIO_Pin_6);Delay_1us(25); ds_out(); while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6); /等待18b20的应答脉冲 Delay_

30、1us(300); ds_in(); void ds_write(u8 dat) u16 i,teep; for(i=1;i=1; ds_in(); GPIO_ResetBits(GPIOB,GPIO_Pin_6); Delay_1us(2); if(teep) GPIO_SetBits(GPIOB,GPIO_Pin_6); /写Delay_1us(60); else Delay_1us(60); GPIO_SetBits(GPIOB,GPIO_Pin_6); /写0 Delay_1us(20); u8 ds_read(void) u16 i; u8 dat=0; for(i=1;i=1; d

31、s_in(); GPIO_ResetBits(GPIOB,GPIO_Pin_6); Delay_1us(2); ds_out();Delay_1us(12); if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6) /读1 dat|=0x80;elsedat&=0x7f; /读0 Delay_1us(50); return dat;void ds_change(void)ds_init();ds_write(0xCC);ds_write(0x44);u16 ds_get()u8 a,b;u16 temp;ds_init(); ds_write(0xCC); ds_

32、write(0xBE);a=ds_read();b=ds_read(); temp=(u16)b8|a;return temp; void ds_in(void) GPIO_InitTypeDef ds18b20_in; /输出模式 ds18b20_in.GPIO_Pin = GPIO_Pin_6; ds18b20_in.GPIO_Speed = GPIO_Speed_50MHz; ds18b20_in.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &ds18b20_in); void ds_out(void) GPIO_InitTypeDef

33、ds18b20_out; /输入模式 /* 设置 GPIOA.4 为推挽输出,最大翻转频率为50MHz*/ ds18b20_out.GPIO_Pin = GPIO_Pin_6; ds18b20_out.GPIO_Speed = GPIO_Speed_50MHz; ds18b20_out.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &ds18b20_out);void delayms(vu32 m) u32 i; for(; m != 0; m-) for (i=0; i5000; i+);void Delay_Ms(u16 time)

34、 /延时函数 u16 i,j;for(i=0;itime;i+) for(j=0;jODR&0xff00)|com); GPIOC-ODR =com; Delay_Ms(1); GPIO_SetBits(GPIOB,GPIO_Pin_10); Delay_Ms(1); GPIO_ResetBits(GPIOB,GPIO_Pin_10);void write_data(u16 data) GPIO_SetBits(GPIOB,GPIO_Pin_7);/RS GPIO_ResetBits(GPIOB,GPIO_Pin_9);/RW GPIO_ResetBits(GPIOB,GPIO_Pin_10)

35、;/E shuchu_12864(); data=(GPIOC-ODR&0xff00)|data); GPIOC-ODR=data; Delay_Ms(1); GPIO_SetBits(GPIOB,GPIO_Pin_10); Delay_Ms(1); GPIO_ResetBits(GPIOB,GPIO_Pin_10); void init(void) GPIO_SetBits(GPIOB,GPIO_Pin_11); write_com(0x30); Delay_Ms(1); write_com(0x02); Delay_Ms(1); write_com(0x06); Delay_Ms(1);

36、write_com(0x0c); Delay_Ms(1);write_com(0x01);Delay_Ms(1); void clear(void) u16 i,j,m;u8 h=0x80; u8 l=0x80; write_com(0x34); for(i=0;i2;i+) for(j=0;j32;j+) write_com(l+j); /清屏函数write_com(h);for(m=0;m16;m+) write_data(0x00); Delay_Ms(1); h=0x88; write_com(0x36); write_com(0x30); void display(u8 *a) u8

37、 j,m;u8 h=0x80;u8 l=0x80; write_com(0x34); for(j=16;j32;j+) write_com(l+j); write_com(h); for(m=0;m16;m+) write_data(*a+); h=0x88; for(j=0;j32;j+) write_com(l+j); write_com(h); for(m=0;mODR=0xff;shuru_12864();GPIO_ResetBits(GPIOB,GPIO_Pin_10); Delay_Ms(1);GPIO_SetBits(GPIOB,GPIO_Pin_10); Delay_Ms(1)

38、;readvalue=GPIOC-IDR;/ Delay_Ms(1);GPIO_ResetBits(GPIOB,GPIO_Pin_10);/shuchu_12864();return readvalue;/&0xff00;void drawPoint(unsigned char x,unsigned char y)/x是每行的第几个像素(实际上是列的位置),y是每列的第几个像素(实际上是行的位置)unsigned char row,collum,cbite; /color=0写白点,color=1写点unsigned char tempH,tempL;u8 m3;write_com(0x34)

39、;/关闭绘图显示 collum=(x4); /在哪一个字节,正确cbite=x&0x0f; /那个字节的第几个点if(y32) /上半屏row=y;elserow=y-32; /下半屏 collum+=8;write_com(0x80+row); /设定读的位置 (列)write_com(0x80+collum);/设定读的位置(行)m3=read_data();tempH=read_data();tempL=read_data();write_com(0x80+row); /写的位置write_com(0x80+collum);/写的位置if(cbite8) write_data(tempH

40、|=(1(7-cbite);/ write_data(tempL);else if(8=cbite16) write_data(tempH); write_data(tempL|=(1(15-cbite); write_com(0x36);write_com(0x30);void ds(u8 dz,u16 shu) u8 bai,ge,shi,s;bai=shu/100;s=shu%100;shi=s/10;ge=s%10; write_com(dz+0x80); write_data(0x30+bai); write_data(0x30+shi); write_data(.); write_data(0x30+ge); Delay_Ms(5); void ds_1(u8 dz,u16 shu) u8 qia

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号