毕业设计(论文)-基于单片机的水温控制系统(软件部分设计).doc_第1页
毕业设计(论文)-基于单片机的水温控制系统(软件部分设计).doc_第2页
毕业设计(论文)-基于单片机的水温控制系统(软件部分设计).doc_第3页
毕业设计(论文)-基于单片机的水温控制系统(软件部分设计).doc_第4页
毕业设计(论文)-基于单片机的水温控制系统(软件部分设计).doc_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

i 毕毕 业业 设设 计(论计(论 文)说文)说 明明 书书 题 目: 基于基于单单片机的水温控制系片机的水温控制系统统 ( (软软件部分件部分设计设计) ) 系 别: 专业班级: 学生姓名: xxx 指导教师: 毕业(设计)论文 ii 教 研 室: 提交时间: 基于单片机的水温控制系统 i 摘 要 本系统以单片机spce061a为核心,采用铂电阻温度传感器进行温 度的采集,利用spy0030进行语音放大。可根据提前设定的温度,自动 使用pid算法进行温度控制。通过键盘可设置一定的温度和温度变化范 围,led实时显示当前温度以便于用户观测。采用eeprom使设定的温 度控制范围掉电存储。如果有新的控温范围,则可以通过键盘改变。 关键词:关键词: 自动调节;温度控制;pid;单片机 毕业(设计)论文 ii abstrct the system considers spce061a as the core, using the platinum resistance temperature sensor.for temperature collection, and uses spy0030 for the amplification of voice. it can be set in accordance with the temperature in advance, and can be controlled automatically by using pid algorithm for temperature. keyboard can be set along with arbitrary changes of temperature and the temperature range, and the current temperature displayed by led real-time to users observationeeprom is used to make the set of temperature control and the power-off memory. if there is a new temperature control range, change the keyboard to meet its demand. keywords : automatic adjustment; temperature control; pid; singlechip 基于单片机的水温控制系统 iii 目 录 摘 要 i abstrct ii 第 1 章 引言 .1 1.1 设计背景.1 1.2 系统设计的目标、内容及意义.1 第 2 章 技术背景 .3 2.1 温度传感器.3 2.2 spce061a 单片机 3 2.3 pid 控制简介 .4 第 3 章 硬件实现 .5 3.1 系统总体电路框图.5 3.2 键盘部分设计.5 3.3 显示部分设计.6 3.4 温度采集部分设计.6 3.5 数字滤波部分设计.7 3.6 温控部分设计.7 3.7 打印部分设计.7 3.8 语音播报部分设计.8 第 4 章 软件实现 .9 4.1 软件总体部分设计.9 4.2 温度测量程序设计11 4.3 数字滤波程序设计12 4.4 温度控制程序设计13 4.5 打印控制程序设计14 4.6 pid 算法部分设计 15 第 5 章 软件调试与安装 27 5.1 软件调试27 5.2 软件安装28 第 6 章 结束语 29 致谢 .31 参考文献 .32 毕业(设计)论文 iv 附录 .33 基于单片机的水温控制系统 1 第 1 章 引言 1.1 设计背景 随着社会的进步,技术的发展,越来越多地需要实现生产工具的自 动化,不再需要人力的介入,有的环境甚至是人无法介入的,或者是人 的干预对其的控制效果是不理想或者微乎其微的,种种情况促使人们对 越来越多的设备进行自动化的开发,使其脱离人的直接干预,可以独立 工作,节省了人力,同时可以高效快捷的解决问题。在控制领域,温度 是一个永远被人们所关注的控制对象,它的控制不仅仅出现在常规的工 控领域,在生活,商业,科研,军事的方方面面,温度的控制简直是无 所不在,因此,对于温度自动调节系统的研究,不但有着很大的科研意 义,同时也有着现实的经济意义和社会意义。 目前在温度的自动控制调节的研究领域,常用的算法大致有pid算 法,史密斯预估算法,模糊控制算法等,其中pid算法以其简单易操作, 控制效果好,容易理解等特点,被广泛的应用于温度控制的领域。 1.2 系统设计的目标、内容及意义 本次系统设计的目标是对单片机控制的水温控制系统进行分块的分 析与设计,对其合理性进行探究,最终设计一个实用的,功能完善的设 计方案。 本次系统设计的内容是通过对硬件的合理选择,在一定程度上实现 该电子装置的方便性、实用性和低成本性。再编程对单片机及其外围电 路进行较为准确的控制,以实现通过键盘就可以方便的对水温进行控制。 本系统的设计实现了温度控制系统的自动调节,正常工作状态下不 需要人为控制,只有在需要改变温度控制范围时才进行人工调节,方便 毕业(设计)论文 2 了用户。采用 pid 算法进行温度的控制,有效的将温度控制在设定值附 近,led 的实时显示和打印机的输出使本系统更加的实用。本课题的研 究与实现,在工控领域有着重要的理论指导意义,同时如果将其用于实 际应用,有着广泛的社会意义和经济效益。 基于单片机的水温控制系统 3 第 2 章 技术背景 2.1 温度传感器 温度传感器有多种类型,常见的有:数字接口的温度传感器,可以 与控制器直接相连;热电偶温度传感器,一般线形度较差,需要开发人 员进行线性化调节;热电阻温度传感器,线形度略好于热电偶,测温范 围较广,应用场合较多。常见的数字接口的温度传感器如 18b20,18b20 是一线总线接口的温度传感器。一线总线具有独特而且 经济的特点。测量温度范围为 -55+125,在-10+85范围内, 精度为0.5。其硬件操作比较简单,用户只需对其进行软件编程就可 以实现控制。因此,18b20 适合硬件资源较少,测量温度要求不高的情 况。本设计拟采用铂热电阻作为温度采集装置,铂热电阻是一种精确、 灵敏、性能稳定的温度传感器。在外界温度作用下,铂电阻丝的电阻值 将随之变而变化,可用于测量-200800范围内的温度。其优点是:电 气性能稳定,温度和电阻关系近于线性,精度高。铂电阻元件可与显示 仪、记录仪、调节器、扫描仪、数据记录仪以及电脑配套进行精确的温 度测量和控制。因此,在温度控制精度要求比较高的情况,一般采用铂 热电阻作为温度采集装置。 2.2 spce061a 单片机 spce061a 作为凌阳公司推出的一款较为智能的 16 位单片机,与 51 单片机相比,最主要的一个优点就是该单片机内置 7 通道 10 位电压 模数转换器和 2 个 10 位 dac 输出通道,在外部信号传入单片机时,不 再需要外接模数转换芯片,可以简化系统电路。此外该单片机还具有丰 富的外部扩展功能,在很大程度上可以优化系统设置,使系统更加完善、 更具人性化。 毕业(设计)论文 4 2.3 pid 控制简介 目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标 志。同时,控制理论的发展也经历了古典控制理论、现代控制理论和智 能控制理论三个阶段。一个控制系统包括控制器、传感器、变送器、执 行机构、输入输出接口。控制器的输出经过输出接口、执行机构,加到 被控系统上;控制系统的被控量,经过传感器,变送器,通过输入接口 送到控制器。不同的控制系统,其传感器、变送器、执行机构是不一样 的。目前,pid 控制及其控制器或智能 pid 控制器已经很多,产品已在 工程实际中得到了广泛的应用,各大公司均开发出了具有 pid 参数自整 定功能的智能调节器,其中 pid 控制器参数的自动调整是通过智能化调 整或自校正、自适应算法来实现。目前产品有利用 pid 控制实现的压力、 温度、流量、液位控制器,能实现 pid 控制功能的可编程控制器(plc), 还有可实现 pid 控制的 pc 系统等。 基于单片机的水温控制系统 5 第 3 章 硬件实现 3.1 系统总体电路框图 spce061a 16bit cpu 数据显示 串口打印温度采集 语音播报 电热丝 继电器 键盘设定 图 3.1 系统总体电路框图 键盘设定:用于温度的设置、重新设置和语音播报。 温度采集:将电压信号转换成温度值。 继电器/电热丝:控制继电器开关来完成对电热丝的功率控制。 数据显示:显示设置温度和测量温度。 串口打印:打印预设温度值、当前温度值、超标幅度等信息。 语音播报:语音播放水温设置温度,并播报整数温度变化。 3.2 键盘部分设计 本系统通过键盘操作实现对水温的设置及控制,共有 3 个按键,其 中 key1 对应十进制数码管的十位数操作,key2 对应十进制数码管的 个位数操作,key3 按下后,系统开始测温,开关电路,并对温度变化 整数值进行语音播报。 毕业(设计)论文 6 3.3 显示部分设计 系统使用数码管作为显示单元,通过 dis_clk 提供串行移位时钟, dis_data 提供串行数据,可以方便的控制数码管显示数据。且本设计 为静态数码管显示,不需要实时更新,只是在需要改变显示内容时才刷 新一次。这有效的减少了对单片机资源的占用。 3.4 温度采集部分设计 本系统采用铂电阻作为温度传感器,铂热电阻是一种精确、灵敏、 性能稳定的温度传感器。铂热电阻元件是用陶瓷为保护管做成的内绕结 构,感温元件可制成各种微型温度传感器探头。铂热电阻元件配上金属 保护管和安装固定装置(如各种螺纹接头、法兰盘等) ,就构成装配式铂 热电阻。 在 0时, 阻值为 100 的白金感温电阻, 简称为 pt100。白金感 温电阻 pt100,一般被使用在做成标准件及较精密的工业量测与检测分 析的场合。其准确度比一般民用品的规格严谨。当待测温度的地点和测 试系统之间有相当的距离时,必须通过长线连接。而该延长线上的引线 电阻及接触电阻,都将造成不同程度的影响,因此必须设法消除引线电 阻所造成的误差。 为了配合精密量测技巧的使用,目前 pt100 依接线数的不同,可分 为 3 种: 1两线式:接线简单,但因引线电阻的变化,将造成较大误差; 2三线式:一般以定电压方式处理,适合工业运用; 3四线式:一般以定电流方式处理,适合精密测量使用。 本系统采用的是三线式的铂热电阻。 基于单片机的水温控制系统 7 铂电阻获得环境温度后,转化为电压信号,同时电压信号经过 ht9274 放大到 spce061a 的模数转换端口,并将模拟的电压信号转换 成数字电压信号,其中,ht9274 可以通过外接电阻实现放大倍数的调 整。 3.5 数字滤波部分设计 传感器采集的信息常会受到干扰,为了提高采样的可靠性,减小虚 假信息的影响,这里采用数字滤波。它与模拟滤波相比具有以下优点: 1数字滤波是用程序实现的,不需要增加任何硬件设备,也不存在 阻抗匹配问题,可以多个通道共用,提高稳定性和可靠性。 2数字滤波可以对频率很低的信号实现滤波,而模拟滤波器由于受 电容容量的影响,频率不能太低。数字滤波的灵活性好,可以有很多方 法实现,如中值滤波、算术平均值滤波、滑动平均值滤波等。本设计采 用的是去脉冲干扰滑动平均值滤波,具体做法如下: 将本次采样值和过去的若干次采样一起去除最大值和最小值后,求 平均值,得到本次测量的有效值。 3.6 温控部分设计 温度控制系统是在单片机处理完测量到的温度值之后,按照 pid 算 法,自动地通过控制可控硅或者继电器的开合来实现的。在本系统具体 实现时,选择通过继电器来控制电热丝,通过衔铁和公共端的吸合与释 放来控制电热丝的加热。如果温度偏高则通过电路控制风扇的工作来实 现降温,并且还可以控制风扇的转速以更快的将温度稳定在设定值附近。 3.7 打印部分设计 虽然本温控系统是自动调节的,基本摆脱了人工控制,但是控制的 毕业(设计)论文 8 效果等信息还是需要反馈,因此本系统扩展了打印机的接口,使其更加 实用化。本系统使用 tpup-16 微型打印机,tpup-16 微型打印机采用与 标准 centronics 兼容的并行接口,是一种超小型的通用微型打印机。用 户在键盘上按下打印按钮后,系统便会调用打印机相关函数,将预设温 度值,当前温度值,超标幅度等信息通过微型打印机打印出来。 3.8 语音播报部分设计 语音播报功能通过 spy0030 芯片实现。spy0030 作为一款语音放大 芯片,可以直接接收来自于单片机输出的模拟信号并进行放大。它可以工 作在 2.4v 到 6.0v 的范围内,输出功率可达 700mw。spce061a 单片机 自带双通道 dac 音频输出,spy0030 将其输出信号放大,经过滤波电 容后,获得比较平稳的电流信号,最后输出至喇叭,从而实现语音播报 功能。 基于单片机的水温控制系统 9 第 4 章 软件实现 4.1 软件总体部分设计 开 始 初始化 从存储器中 读取上一次 温度设定值 按键按下 重设温度值 采集温度 大于设定 温度范围 打开风扇 (降温) 显示当前温度 在设定温 度范围内 小于设定 温度范围 打开电热丝 (升温) n nn y y 图 4-1 系统主程序流程图 毕业(设计)论文 10 主程序源代码: int main(void) int ikeyvalue; status = system_temperature_set; guifgspeechplay = 0; system_initial(); turn_on_relay(); turn_off_relay(); pidinit(); while(1) ikeyvalue = sp_getch(); /取键值 key_value_process(ikeyvalue); /键值处理 if(guifgspeechplay) temperature_speech_play( ); /语音播放 if(status = system_temperature_control) display_speech_adc_temperature(); /测量温度显示、温度播报、pid 计算 clear_watchdog(); /清看门狗 system_serviceloop(); /键盘扫描 if(foutsetpoint*10 - nextpoint; / 偏差 pp-sumerror += error; / 积分 derror = pp-lasterror - pp-preverror; / 当前微分 pp-preverror = pp-lasterror; pp-lasterror = error; return (pp-proportion * error / 比例项 + pp-integral * pp-sumerror / 积分项 + pp-derivative * derror / 微分项 ); /= /函数:void display_speech_adc_temperature(void) /语法:void display_speech_adc_temperature(void) /描述:整理温度显示值、语音播放资源、pid 控制 /参数:无 /返回:无 /= void display_speech_adc_temperature(void) float ft,k; int adc_data; static int sitlast = 0; if(g_adc_flag) /判断是否有温度采样 1,有 0, 无 g_adc_flag = 0; adc_data = adc_data_cmp(); 基于单片机的水温控制系统 37 adc_data /= set_adc_time; /计算温度平均值 if(adc_data 0x0255) k = 0.079; /确定温度系数 else k = 0.076; ft = adc_data * k; /换算成温度值 guiled_value0 = (int)ft/10; /将温度值转换成十进制用 于 led 显示 guiled_value1 = (int)ft%10; guiled_value2 = (int)(ft*10)%10; if(int)ft != sitlast) /判断温度的整数值是否变化 temperature_speech_index(guiled_value); /温度整数值语 音播放 sacm_a2000_initial(0); /非自动方 式播放的初始化 sacm_a2000_initdecoder(dac2); /开始对 a2000 的语音数据以非自动方式解码 sp_int_irq6(); iaddrspeech = speech_start_address(iaspeech_index0);/语音播放 始地址 guifgspeechplay = 1; /设置语音为播放状态 sitlast = (int)ft; stpid.proportion = 1.5; / 设置 pid 比例值 stpid.integral = 0.5; / 设置 pid 积分值 stpid.derivative = 0.0; / 设置 pid 微分值 fout = pidcalc ( / pid 计算 active(); /= /函数: void active() /语法:void active() /描述:pid 输出值的处理 /参数:无 /返回:无 /= void active() if(fout30*stpid.proportion)/温度低于设定值 2 摄氏度 turn_on_relay(); /开电炉加热 else turn_on_relay();sp_int_timeb(); /初始化定时器,开 始定时加热 毕业(设计)论文 38 /= /函数: int adc_data_cmp() /语法: int adc_data_cmp() /描述: adc 采样数据的均值处理,抗干扰作用 /参数: 无 /返回: 无 /= int adc_data_cmp() int max; int min; int sum; int i; max = giadc_datasave1; for(i=1;imax) max = giadc_datasavei; /取出最大值 min = giadc_datasavei; for(i=1;i11;i+) if(giadc_datasaveimin) min = giadc_datasavei; /取出最小值 for(i=1;i11;i+) sum += giadc_datasavei; /累计值 sum = sum - max-min; /排除最大最小值 return(sum); /= /函数: void key_value_process(int key) /语法: void key_value_process(int key) /描述: 按键值的处理 /参数: 键值 /返回: 无 /= void key_value_process(int key) int iaddr; switch(key) case 0: break; case 1: if(status = system_temperature_set) /温度设置 状态下 guiled_value0+; /温度值增加 if(guiled_value0=10) guiled_value0 = 0; 基于单片机的水温控制系统 39 break; case 2: if(status = system_temperature_set) guiled_value1+; if(guiled_value1=10) guiled_value1 = 0; break; case 4: if(status = system_temperature_set) temperature_speech_index(guiled_value); status = system_temperature_control; sacm_a2000_initial(0);/非自动 方式播放的初始化 sacm_a2000_initdecoder(dac2); /开始对 a2000 的语音数据以非自动方式解码 guifgspeechplay = 1; stpid.setpoint = guiled_value0*10 + guiled_value1; iaddrspeech = speech_start_address(iaspeech_index0); else turn_off_irq5(); status = system_temperature_set; break; default: break; /= /函数: void temperature_speech_index(unsigned int * p_speech) /语法: void temperature_speech_index(unsigned int * p_speech) /描述: 排列语音播放序号 /参数: 设置或采样的温度值 /返回: 无 /= void temperature_speech_index(unsigned int * p_speech) if(*p_speech != 0) /判断设置温度的十位是否为零 iaspeech_index0 = *p_speech; /不为零则设置语音播放序号 iaspeech_index1 = 10; /设置播放语音 十 p_speech+; if(*p_speech != 0) /判断播放个位数字是否为零 毕业(设计)论文 40 iaspeech_index2 = *p_speech;/不为零,设置语音序号 iaspeech_index3 = 11; /设置摄氏度 iplay_times = 4; /设置播放语音次数 else iplay_times = 3; /如果个位数字为零,则设置播放 次数为 3 iaspeech_index2 = 11; /设置摄氏度 else p_speech+;/如果设置温度的十位为零, iaspeech_index0 = *p_speech; /设置个位数字的播放序号 iaspeech_index1 = 11; /设置摄氏度 iplay_times = 2; /设置播放次数 /= /函数: int speech_start_address(int n) /语法: int speech_start_address(int n) /描述:取语音播放的开始地址 /参数:1、语音序号 /返回: 语音地址 /= int speech_start_address(int n) int iaddress; switch(n) case 0: iaddress = res_t046_16k_sa; break; case 1: iaddress = res_t047_16k_sa; break; case 2: iaddress = res_t048_16k_sa; break; case 3: iaddress = res_t049_16k_sa; break; case 4: iaddress = res_t050_16k_sa; break; case 5: iaddress = res_t051_16k_sa; break; case 6: iaddress = res_t052_16k_sa; break; case 7: iaddress = res_t053_16k_sa; break; case 8: iaddress = res_t054_16k_sa; break; case 9: iaddress = res_t055_16k_sa; break; case 10: iaddress = res_t056_16k_sa; break; case 11: iaddress = res_t034_16k_sa; break; default: break; return(iaddress); /= /函数:speech_end_address(int m) /语法:speech_end_address(int m) 基于单片机的水温控制系统 41 /描述:取语音播放的结束地址 /参数:1、语音序号 /返回:语音地址 /= int speech_end_address(int m) int iendaddress; switch(m) case 0: iendaddress = res_t046_16k_ea; break; case 1: iendaddress = res_t047_16k_ea; break; case 2: iendaddress = res_t048_16k_ea; break; case 3: iendaddress = res_t049_16k_ea; break; case 4: iendaddres

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论