版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘要本文设计了一种自动净水器的控制系统,提供温度控制、开关量输出、数据保存、水位检测等关键部件的设计思路及方案,给出了相应的硬件电路和软件流程,实现机器的自动运行。温度控制采用了PID控制,很好的解决了温度控制系统具有非线性、纯滞后、大惯性等特点,系统实现了对温度设定值的设置和对温度升降的控制,并利用LCD液晶显示器显示温度控制过程,另外用红、绿发光二极管作为温度报警器。水位监测是利用两组开关的控制实现的,用蜂鸣器作为水位监测报警器。通过测试,证明了系统稳定可靠。关键词:自动净水器;温度控制;水位监测;PID控制ABSTRACTThis article designed an automati
2、c water purification machine control system, temperature control, switch output, data storage, water detection and so on key parts of the design ideas and solutions, gives the corresponding hardware circuit and software process, the implementation of the machine to run automatically. Temperature con
3、trol adopted PID control, which is a very good solution to the temperature control system, which has the characteristics of nonlinear, pure time-delay, large inertia. The system realized the temperature set point set up and control of the temperature rise and fall, and use the LCD display shows the
4、temperature control process, in addition the system takes red and green light-emitting diodes (leds) as the temperature alarm. The system takes the use of two sets of switch control ast the simulation of Water level monitoring, and a buzzer as the alarm of water level monitoring. Through the test, w
5、hich has proved that the system is stable and reliable.Key words: automatic purifier; Temperature control;Water level monitoring;PID control目录摘要.ABSTRACT第一章 绪论.11.1 意义.11.2 国内外现状及水平.1第二章 硬件设计.42.1 设计方案图.42.2 AT89C51芯片介绍.52.3 温度控制部分.92.4 水位监测部分.14第三章 软件设计163.1 主函数程序设计.163.2 温度控制程序设计.183.3 键盘扫描程序设计.22
6、第四章 系统测试254.1 温度控制测试.254.2 水位监测测试.30总结.31参考文献.32致谢.33第一章 绪论1.1 意义水是人类生命的源泉,人们对饮用水质的要求及相应的标准在不断提高。人类经历了由最初的简单的沉淀净水到传统的煮沸处理,发展到现在的深度净化饮用水。在发达国家饮用水净化处理工艺已经很成熟且净水机的使用也相当普及,但在我国,这种净水机目前仍不为大众消费者所熟悉。所以设计功能完善、经济实用的智能净水机具有积极的社会意义。1.2 国内外现状及水平家用净水器,是近几年来发展了一个全新的技术领域,它的发展,为人类的生活质量,提供了一个新的选择空间,也给人类的生命质量创造了新的可能。
7、因此,我们希望走近家用净水器行业,去发现它的现状与前景,为未来的健康生活提供一些帮助。当今世界上净水器最大的生产国和出口国就是中国,中国净水器产业正加速进入品牌、技术和产品的洗牌阶段。在生产制造业当中,拥有核心技术尤为重要,水家电也是如此。净水器自发展以来,净化技术多次更迭,在生活水平日益提高的今天,人们对饮水健康需求呼声甚高。品种单一、功能单一的产品以及慢慢地淘汰,净水器正向智能化、时尚化、个性化方面发展。净水器厂家也在慢慢向高端化转型。纵观全球净水行业,发达国家的净水发展市场并不大,而在发展中国家,由于经济的发展,污染处理不及时,或者是技术落后、经济的限制的原因,对于生态、水质的污染程度有
8、不同程度的提高,人类的疾病发生率大大提高,因此急需水质的处理、净化,处理以后的水质对于人类的健康,起到了非常积极的作用。以中国的家用净水器行业看,以滤材过滤水质的的居多,以粗滤,粗滤加精滤为主要方向,每天的产量不大,一般在每天2到300公斤左右,过滤以后水质,普遍称之为弱碱水、小分子团水。从技术上看,粗滤的技术过程,只是简单地过滤了自来水中的一部分杂质,如果能过滤掉水中微生物,其实是根本不可能的,同时自来水本身对于微生物含量的控制,是能够达到标准的,而对于水中的重金属、有害矿物质成份、余氯、卤类成份及富营养化物质,不管是那种过滤技术或者说是那种材料,其过滤以后,这些有害物质如何排除呢?是否积累
9、在滤材上?如果是积累在滤材上,那么是否有可能再次回到水里?事实上滤材成了一个藏污纳垢的重要场所,一般半年到一年更换一次滤材的时间长度,水质的安全程度有多高?家用净水器净水以后的标准和自来水标准一样。几乎所有的厂家采用的标准是卫生部的生活饮用水水质标准。这个标准和自来水的标准完全一致,标准偏低,产量小,无法改变水质的“病态”,是目前家用净水器行业最明显的特征,那么家用净水器的优势在那里呢?优势在于方便,多数的家用净水器可以直接安装在水龙头上直接过滤,出现的水在一部分地区的确有明显的改善。因为那些管道旧、水质差、铁锈严重的自来水,险些之外,净水似乎效果并不明显。部分家用净水器存在安全隐患。有一部分
10、家用净水器的滤材中有添加微量元素、矿物质材料,这些材料中有锌、碱性材料,事实人体不需要另外添加微量元素,只要生活中注意多样化的食物膳食方式,微量元素不存在缺乏,而如果在水里另外添加,则有中毒的可能性。弱碱性只是一个概念,非实质上的弱碱。改变水质的性质,除非能改变水的分子结构,而改变水的分子结构需要外在的能量供给,纯粹的过滤何来的外在能量供给?因此弱碱水只有二种可能,那就是添加碱性材料,要以就是纯粹,并非实质上的弱碱水。而用碱性材料添加,就算缓慢溶解,PH值的控制同样有难度,是否会对人体产生碱中毒?小分子团水,是通过能量来打开氢键与水分子间的链接,而且必须持续不间断地进行,才能使水分子变小。真正
11、的小分子团水的口感微甜,有浓厚感,不像普通水那么清淡。如果说用酒来形容,那么普通水就是刚刚酿造完成的酒,口感极差。而小分子团水就是陈年的酒,口感极醇厚,带有微甜。小分子团水是否又是另外一个新概念?家用净水器行业的突破口,在于技术的创新,未来的前景一片大好。以目前全球的自来水现状,水质都处于“病态”,水本身源于自然,而采用集中供水以后,水的流动性变弱,在自然环境下与氧气的接触少,水中的溶解氧明显不够,因此水就成了一种液体,对于人体的作用非常有限。而在自然环境下的了生态水,因为经过不断在流动、撞击,与空气中氧气亲密接触,加臭氧层自然消毒,水成了“生命之源”“百药之王”,如今这些功能基本丧失,未来是
12、否能够恢复,需要家用净水器行业的共同努力,为人类创造一片全新的、自然生态的未来,健康将不再难。国内外知名企业及机构陆续进入净水器行业,智能化已经成为企业对高端市场的一种定位。越来越多的企业注意到创新对于企业发展的必要性以及重要性。净水器行业更加趋向智能化、时尚化以及个性化。众多知名企业与国际专业机构以及企业联合,在产品技术方面进行创新,从而推进企业及行业市场拓展及品牌的强化。企业在实力与责任两种创新机制的推动下,未来几年,中国净水器行业格局将会发生重大变化。第二章 硬件设计2.1 设计方案图基于51单片机的智能净水器控制系统设计方案图如图2.1所示AT89C51数字量输出扩展高温消毒杀菌温度控
13、制加热,制冷灯报警显示故障检查水位检查按键LCD显示温度传感器滤波电 路图2.1 系统方案图本系统采用AT89C51作为设计的核心元件,利用LM016L液晶显示器作为显示器件,主要由温度控制电路、温度报警电路、水位监测电路和水位报警电路等部分组成。加热器采用proteus软件中的加热器模型(oven)进行仿真,温度报警分别采用红、绿发光二极管进行仿真,水位监测采用双列直插开关组进行模拟仿真,水位报警采用proteus软件中的蜂鸣器进行仿真。在仿真中,加热器模型输出与温度成比例的电压信号,经过ADC0831数模转换器转换后,ADC0831数模转换器可将电压信号转换成与炉温相对应的数字信号,送入5
14、1单片机中由单片机完成数据处理后送LCD显示。当水温低于或者高于设定温度值时,红色发光二极管点亮报警,加热器进行加热或者停止加热处理;当水温接近设定温度值时,绿色发光二极管点亮,表示温度正常。由于proteus中没有水位监测的传感器可仿真,在这里采用双列直插开关组进行模拟仿真,配合蜂鸣器作为水位报警装置。两个开关分别反映了水位过高和水位过低的情形,当打开开关1或者开关2时,蜂鸣器都会报警表示水位过高或者过低。2.2 AT89C51芯片介绍AT系列单片机是美国ATMEL公司在IntelMCS51单片机技术基础上开发出的一种新产品,片内带有4k E2ROM,编程擦除全部采用电实现(有5V和12V两
15、种模式),既能进行在线编程擦写,亦可采用电话线进行远程编程擦写。可重复性强,使用寿命长,可重复擦写 1000次以上,并且擦写速度快,4k编程大约需3s,擦除仅需10ms。程序保存时间长,可达100年,与IntelMCS51系列单片机完全兼容,且有超强的加密功能,能完全替代IntelMCS8751Intel MCS8752和Intel MCS87C51Intel MCS87C52,低电压,低电流,低功耗,除了有DIP、PLCC、QFP等多种封装形式,还有商用级、工业级、汽车用级、军用级等多种规格。因此,目前它在微计算机产品开发中的应用越来越“火”。AT89C51是一种带4K字节闪烁可编程可擦除只
16、读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提 供了一种灵活性高且价廉的方案。图2.2 AT89C51芯片2.2.1管脚说明VCC:供电电压。 GND:接地。 P0口:P0口为一个8位
17、漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
18、 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个
19、TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如:口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机
20、器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选
21、通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.2.2振荡器特性 XTAL1
22、和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。2.2.3芯片擦除 整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。 此外,AT89C51设有稳态逻辑,可以在低
23、到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 2.3 温度控制部分2.3.1 温度控制电路温度控制电路图如图2.3所示图2.3 温度控制电路图温度控制在科学研究和工业生产中具有重要意义,其控制系统具有非线性、纯滞后、大惯性等特点,导致传统的控制方式超调大、调节时间长、控制精度低。因此在设计温度控制系统中经常采用PID进行控制,PID控制作为自动控制系统中常用的一种控制方法,在工程中的应用非常广泛。本文设计了以AT8
24、9C51单片机为核心的加热器温度控制系统,采用PID控制方法,并结合Proteus仿真平台进行了仿真研究。在系统中,加热器模型输出与温度成比例的电压信号,经过信号调理电路转换后,与AT89C51的A/D转换通道连接,转换成与炉温相对应的数字信号,由单片机完成数据处理后送LCD显示。将测量温度与设定温度进行比较,对其差值进行PID运算得出控制量,根据控制量计算出PWM占空比,通过单片机PWM端口输出PWM波驱动三极管的导通和关闭,达到控制发热丝的导通时间,以实现对炉温的控制。加热器(OVEN)为Proteus提供的加热器模型,通过对该模型的参数设定,可改变发热丝及加热容器的参数,以接近被控对象模
25、型。本系统温度控制器的电热元件是发热丝。当容器内温度升高至设定温度时,温度控制器会发出信号停止加热。但这时发热丝的温度会高于设定温度,发热丝还将会对被加热的器件进行加热,即使温度控制器发出信号停止加热,被加热器件的温度还往往继续上升几度,然后才开始下降。当下降到设定温度的下限时,温度摔制器又开始发出加热的信号,开始加热,但发热丝要把温度传递到被加热器件需要一定的时间。通常开始重新加热时,温度继续下降几度。所以,传统的定点开关控制温度会有正负误差几度的现象,但这不是温度控制器本身的问题,而是整个热系统的结构性问题,使温度控制器控温产生一种惯性温度误差。在本系统温度控制电路中,采用三极管作控制开关
26、,其原理是利用三极管的饱和和截止特性。图2.2中,三极管为PNP型三极管,当PWM端输入为低电平时,三极管工作于饱和状态,集电极C和发射极E之间可视为短路,这时加热器开始加热;当PWM端输入为高电平时,三极管工作于截止状态,集电极C和发射极E之间可视为断路,这时加热器停止加热。在三极管与加热器之间还需要做一个比较精确的过零负脉冲电路,让脉冲发生于过零点以前,这样我们就可以在过零点以前先关闭输出,脉冲宽度越窄越好,至少这个脉冲宽度不能大于1ms,过零脉冲的识别也需要一点小小的处理,防止假脉冲混入,防止电网烦扰,这是软件上的问题。2.3.2温度值设定电路温度值设定电路如图2.4所示图2.4 温度值
27、设定电路本系统中温度值设定电路利用两个按键进行设置,图2.3中KEY2连接的是温度值增加按键,KEY3连接的是温度值减小按键,分别连接单片机的P1.5端口和P1.6端口。为了方便较大幅度改变设定的温度值,这里可将按键处理为长按和短按,长按时温度值以10度增加或减小,短按时温度以1度增加或减小。2.3.3 温度报警电路温度报警电路如图2.5所示图2.5 温度报警电路温度报警电路是利用两个发光二极管组成。发光二极管简称为LED,由镓(Ga)与砷(AS)、磷(P)的化合物制成的二极管,当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管,在电路及仪器中作为指示灯,或者组成文字或数字显示。磷砷
28、化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光。 它是半导体二极管的一种,可以把电能转化成光能,常简写为LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光。不同的半导体材料中电子和空穴所处的能量状态不同。当电子和空穴复合时释放出的能量多少不同,释放出的能量越多,则发出的光的波长越短。常用的是发红光、绿光或黄光的二极管,本电路中采用发红光和绿光二极管。当容器内温度低于设定温度值时,加热器开始加热,这时发红光二极管亮,
29、表示正在加热,直到容器内温度达到设定温度值时发绿光二极管亮;当容器内温度高于设定温度值时,加热器停止加热,容器内温度开始下降,这时发红光二极管亮,直到容器内温度达到设定温度值时发绿光二极管亮。2.3.4 显示电路显示电路如图2.6所示图2.6 显示电路我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单。在单片机系统中应用晶液显示器作为输出器件有以下几个优点
30、: 显示质量高 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。 数字式接口 液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。 体积小、重量轻 液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。功耗低 相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。液晶显示器(LCD)具有功耗低、体积小、质量
31、轻、功耗小的特点。点阵字符型液晶显示器把 LCD控制器、点阵驱动器、字符存储器集成在一块印刷电路板上,构成便于应用的液晶模块。这类液晶模块不仅可以显示数字、字符,还可以显示各种图形符号以及少量自定义符号,并且可以实现屏幕的上下左右滚动、文字的闪烁等功能;人机界面友好,使用操作也更加灵活、方便,使其日益成为各种仪器仪表等设备的首选。本设计的显示电路采用的是LM016L液晶显示器,主要用来显示当前实际温度值和设定值。在仿真中,加热器模型输出与温度成比例的电压信号,经过ADC0831数模转换器转换后,ADC0831数模转换器可将电压信号转换成与炉温相对应的数字信号,送入51单片机中由单片机完成数据处
32、理后送LCD显示。设定值一旦设定就显示不变,而实际温度值通常是变化的。当实际温度值低于设定值时,LCD上就会显示实际温度值在上升,直到实际温度值达到设定温度值;当实际温度值高于设定温度值时,LCD就会显示实际温度值在下降,直到达到设定温度值。2.4 水位监测部分2.4.1 水位监测电路水位监测电路如图2.7所示图2.7 水位监测电路由于Proteus中没有水位监测的传感器可仿真,为了实现水位监测功能,在这里采用双列直插开关组进行模拟仿真。开关1和开关2分别连接单片机的P1.4端口和P1.7端口。当按下开关1(即开关1置1)时,表示水位超过警戒线;当按下开关2(即开关2置1)时,表示水位低于警戒
33、线。2.4.2 水位报警电路在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警。蜂鸣器分为有源蜂鸣器与无源蜂鸣器,这里的“源”不是指电源,而是指震荡源,也就是说,有源蜂鸣器内部带有震荡源,所以只有一通电就会叫,而无源蜂鸣器内部不带震荡源,所以如果用直流信号无法令其鸣叫,必须用2K-5K的方波去驱动它。本系统水位报警电路如图2.8所示,水位报警电路采用Proteus中的有源蜂鸣器进行仿真。蜂鸣器的一端接地,另一端通过三极管接入单片机的P2.6端口,这里的三极管同样是作开关电路。图2.7中,三极管为PNP型三极管,当水位监测电路中的开关置1时,产生低电平信号输入单片机
34、内,经单片机处理后,由P2.6端口输出一个低电平信号,三极管工作于饱和状态,集电极C和发射极E之间可视为短路,三极管导通,蜂鸣器发声报警。当水位监测电路中的开关置0时,表示水位正常,P2.6端口输出高电平,三极管工作于截止状态,集电极C和发射极E之间可视为断路,三极管关闭,蜂鸣器停止发声。图2.8 水位报警电路第三章 软件设计3.1 主函数程序设计整个软件架构采用状态机的方法,系统节拍为200us,温度采集部分精度1度,温控部分采用PID控制。超调量14%,误差在正负1度。3.1.1 主流程图图3.1 主流程图如图3.1是系统主流程图。主函数是软件部分的核心,程序的运行首先是从主函数开始执行的
35、。主函数的开始时系统的初始化,主要有定时器0的初始化、LCD1602的初始化和PID参数的初始化。然后开中断,判断定时中断技术标志为多少。当定时中断计数标志为30时获取按键值;当定时中断计数标志为35时处理按键值;当定时中断计数标志为70时显示设定的温度;当定时中断计数标志为80时进行AD采样;当定时中断计数标志为82时显示实时温度;当定时中断计数标志为98时温度控制处理函数。判断定时中断计数标志处理完后系统进入空虚状态,这时候系统又返回之前的判断定时中断计数标志。3.1.2 主函数程序uint8 SetTemp = 50; /复位设置温度值uint8 KeyValue = 0; /复位按键值
36、uint8 InterTime = 0; /中断计数标志uint8 PWM_Level = 0; /PWM占空比 sbit PWM = P25; /设置P25口为PWM输出口sbit SPEEK = P26; /配置P26口为喇叭输出口/测试程序运行时间sbit FLAG1 = P30;sbit FLAG2 = P31;sbit FLAG3 = P32;sbit FLAG4 = P33;/测试程序运行时间 */void TimeInit0(void);void CMPTemper(int sample);void KeyHandl(uint8 *KeyData);void Display(ui
37、nt8 StartXPos, uint8 StartYPos, uint8 Tvalue);void main() uint8 KeyValue,Temp; /按键临时值TimeInit0();/定时器0初始化 LCD1602_Init();/LCD1602初始化LCD1602_Write_String(0,1,"real T: C");/显示界面设置LCD1602_Write_String(1,1,"set T: C");PID_Paga_Init();/PID参数初始化OPEN_INTER();/开中断while(1) switch(InterTim
38、e) case 30: GetKey(&KeyValue); /获取按键值 break;case 35: FLAG2 = 1; KeyHandl(&KeyValue); /处理按键值 FLAG2 = 0; break;case 70: Display(1,7,SetTemp); /显示设定的温度 break;case 80: Temp = Adc0831_C(); Temp = Temp>>1; / Temp * 5 * 25 /255 break;case 82: Display(0,8,Temp); /显示温度 break;case 98: FLAG4 = 1;
39、 CMPTemper(PIDCalc(Temp); /温度控制 FLAG4 = 0; break;default: break; PCON = 0x01; /进入空闲模式 3.2 温度控制程序设计在系统中,加热器模型输出与温度成比例的电压信号,经过信号调理电路转换后,与AT89C51的A/D转换通道连接,转换成与炉温相对应的数字信号,由单片机完成数据处理后送LCD显示。将测量温度与设定温度进行比较,对其差值进行PID运算得出控制量,根据控制量计算出PWM占空比,通过单片机PWM端口输出PWM波驱动三极管的导通和关闭,达到控制发热丝的导通时间,以实现对炉温的控制3.2.1 PID算法设计及实现在
40、自动控制系统中,PID控制是应用非常广泛的一种控制方法。由于加热器温升与电压接通时间基本成正比,这就构成了PID调节的基础。设t为采样时间(ti×T,其中T为采样周期,i为正整数),模拟PID控制器调节规律的数学模型可以用微分方程来表示u(t)Kpe(t)+T式中:Kp为比例系数;T1为积分时间;T为微分时间。由于单片机不能对连续的控制算式直接进行运算,在单片机控制系统中就必须对控制规律进行离散化的算法设计。加热器控制系统为一时间离散控制系统,可以采用数字式的差分方程来取代连续系统的微分方程,从而将PID算式离散化。数字PID控制算法的差分方程为u(t)Kpe(t)+e(n)e(n1
41、)+u=Kpe(n)+KI+KDe(n)e(n1) +u式中:Kp为比例系数;KI为积分系数;KD为微分系数。根据差分方程并结合温控系统的具体情况,可以编写出PID算法子程序,图4是PID算法程序模块的流程图。PID运算过程中所有参数和计算值均以多字节浮数表示。系统运行过程中,通过定时器间隔50ms中断1次,完成1次PID控制运算,根据运算结果对PWM波的占空比进行修改。在一般情况下,输出控制增量会在一个相对较小的范围内波动,最后达到平滑控制。在程序中输出量大小设定了上下限值,可以防止在突发情况下温控系统控制的崩溃现象。3.2.2 温度控制流程图图3.2 温度控制流程图如图3.2是温度控制流程
42、图。由于温度控制系统具有非线性、纯滞后、大惯性等特点,导致传统的控制方式超调大、调节时间长、控制精度低。因此在设计温度控制系统中经常采用PID进行控制,PID算法及实现已经在前面进行了介绍。3.2.3 温度控制程序int SetIntegral = 0;PID spid;uint8 ConstantTemperatuer = 1; /设定一个恒温范围的绝对值,方便CPU对恒温情况下的处理sbit LED_GREEN = P21; /绿灯表示系统是否处在恒温的状态 sbit LED_RED = P20;/红灯表示系统是否处在加热的状态void PID_Paga_Init(void);/* 功能
43、: *PID清零初始化 入口参数 : 出口参数 :*/void PIDInit (struct PID *spid) memset( spid,0,sizeof(struct PID); /* 功能 : *PID算法函数,及误差的处理函数 入口参数 :NextPoint = 当前采集到的温度值 出口参数 :*/ int PIDCalc(int NextPoint ) int dError,Error,PIDIntegral = 0,PIDDerivative = 0; Error = spid.SetPoint - NextPoint; / 偏差 if(abs(Error) < SetI
44、ntegral) /设定一个积分门限,防止积分饱和,同时也是为了分段PID方便spid.Proportion = 40; / Set PID Coefficients spid.Integral = 1; spid.Derivative =100; spid.SumError += Error; / 积分spid.SumError = 6; PIDIntegral = spid.Integral * spid.SumError; / 积分项 elsespid.Proportion = 65; / Set PID Coefficients spid.Integral = 0; spid.Deri
45、vative =100;if(abs(Error) <= ConstantTemperatuer)/如果温度误差在设定值的+-1度左右恒温,绿灯亮,红灯灭 LED_GREEN = 0;LED_RED = 1;else/否则绿灯灭,红灯亮LED_GREEN = 1;LED_RED = 0;dError = Error - spid.PrevError; / 当前微分PIDDerivative = spid.Derivative * dError; spid.PrevError = spid.LastError; spid.LastError = Error; return (spid.Pr
46、oportion * Error / 比例项 + PIDIntegral + PIDDerivative); / 微分项 /* 功能 : *PID参数初始化 入口参数 : 出口参数 :*/void PID_Paga_Init(void)PIDInit(&spid); / Initialize Structure spid.Proportion = 100; / Set PID Coefficients spid.Integral = 0; spid.Derivative =0; spid.SetPoint = 50; / Set PID Setpoint3.3 键盘扫描程序设计3.3.
47、1 键盘扫描函数流程图图3.3 键盘扫描函数流程图系统的键盘扫描函数流程图如图3.3所示。程序的开始首先是判断是否有键按下,没有就直接转到结束,有则进行下一轮判断按键的状态。这时按键有四个状态,当按键为消抖、按下和长按状态时系统分别进行置按下、置长按、置连接状态,然后继续判断按键是否松开,若是则置松开状态,若否则返回键值;当按键为松开状态时系统将置消抖状态,然后返回键值结束。3.3.2 键盘函数程序uint8 KeyScanf(void)if(io_Key_1 = 0)return KEY_VALUE_1;if(io_Key_2 = 0)return KEY_VALUE_2;if(io_Key
48、_3 = 0)return KEY_VALUE_3;if(io_Key_4 = 0)return KEY_VALUE_4;else return KEY_NULL; /键盘处理函数void GetKey(uint8 *KeyValue) static uint8 s_u8KeyStatue = KEY_STATUE_INIT,s_u8LastValue = KEY_NULL,s_u8KeyTimeCount = 0;uint8 KeyTemp;KeyTemp = KeyScanf();switch(s_u8KeyStatue)case KEY_STATUE_INIT: if(KEY_NULL
49、!= KeyTemp) s_u8KeyStatue= KEY_STATUE_WOBBLE; s_u8LastValue = KeyTemp; break;case KEY_STATUE_WOBBLE: s_u8KeyStatue = KEY_STATUE_PRESS; break;case KEY_STATUE_PRESS: if(s_u8LastValue = KeyTemp) s_u8KeyStatue = KEY_STATUE_LONG; KeyTemp = KeyTemp & KEY_DOWN ; else s_u8KeyStatue = KEY_STATUE_INIT; br
50、eak;case KEY_STATUE_LONG :if(s_u8LastValue = KeyTemp) s_u8KeyTimeCount+;if(s_u8KeyTimeCount=KEY_LONG_COUNT) s_u8KeyTimeCount = 0; KeyTemp &= KEY_LONG; s_u8KeyStatue = KEY_STATUE_CONTINUE; else s_u8KeyStatue= KEY_STATUE_RELEASE; break; case KEY_STATUE_CONTINUE:if(s_u8LastValue = KeyTemp) s_u8KeyT
51、imeCount+;if(s_u8KeyTimeCount= KEY_CONTINUE_COUNT) s_u8KeyTimeCount = 0; KeyTemp &= KEY_CONTINUE; else s_u8KeyStatue= KEY_STATUE_RELEASE; break; case KEY_STATUE_RELEASE: s_u8LastValue &= KEY_UP; KeyTemp = s_u8LastValue; s_u8KeyStatue = KEY_STATUE_INIT; break; default :break; *KeyValue = KeyTemp;第四章 系统测试4.1 温度控制测试对系统温度控制的测试主要是测试:加热器加热时,温度是否上升,液晶显示器显示是否正常,红绿发光二极管发光是否正常;温度达到设定值时,液晶显示器是否正常显示,红绿发光二极管是否正常发光;加热器停止工作时,温度是否下降,液晶显示器是否正常显示,红绿发光二极管是否正常发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论