课程设计(论文)-单片机PWM温度闭环控制系统设计.doc_第1页
课程设计(论文)-单片机PWM温度闭环控制系统设计.doc_第2页
课程设计(论文)-单片机PWM温度闭环控制系统设计.doc_第3页
课程设计(论文)-单片机PWM温度闭环控制系统设计.doc_第4页
课程设计(论文)-单片机PWM温度闭环控制系统设计.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

沈阳理工大学课程设计专用纸 课 程 设 计 任 务 书分 院(系)信息学院专 业测控技术与仪器学 生 姓 名学 号设 计 题 目单片机pwm温度闭环控制系统设计内容及要求:1)利用数字温度传感器ds18b20采集和转换温度;2)利用传感器得到的数据通过单片机编程实现温度的闭环控制;3)了解和使用pid算法在闭环控制中的应用;4)完成单片机外围电路的设计以及温度显示等程序工作;要求在课程设计报告中给出:1)装置的结构和电路原理图。2)调试过程,说明发现的向题及处理过程。3)分析存在的问题。4)收获与改进方案。进度安排:2011年12月26日2011年12月30日根据设计要求和内容查阅参考文献或资料,提出设计方案,进行原理设计。2012年1月10日2012年1月12日根据设计方案,进行调试,测试,撰写课程设计报告,答辩。指导教师(签字): 年 月 日分院院长(签字): 年 月 日目录1摘要 32 引言43 设计内容与要求4 3.1设计内容4 3.2设计要求44 系统总体设计方案5 4.1 方案提出5 4.2 总体框图55 系统工作原理6 5.1 pid算法6 5.2 ds18b20 传感器工作原理86 系统硬件设计97 系统软件设计117.1程序设计组成117.2程序代码118 系统调试与测试结果.219 测试结果分析.2110 结论和体会2111 参考文献22摘要:以温度控制系统为例研究嵌入式系统,实现了对工业现场的温度实时监测和控制。以at89c51单片机为控制核心,采用典型大惯性环节的pid闭环控制装置,可自动控制恶劣环境下的温度,使被控对象温度保持在恒定范围内。本系统温度信号由数字温度传感器ds18b20采集,送at89c51单片机进行处理,并通过数码管显示。当温度超过设定值范围后,单片机将发出控制信号启动升温装置或降温装置,使温度保持在一定的范围。实验测试证明,设计的样机系统测温控温精度均为01,测温控温的范围可达-55+125。关键词: 单片机;pid;工业控制;温度;ds18b202 引言 温度的测量和控制在日常生活和工业领域中具有广泛的应用,随着人们生活水平的大幅提高,对温度测量控制的精度和范围也有着更高的要求。在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题,这类控制对象惯性大,滞后现象严重,存在很多不确定的因素,难以建立精确的数学模型,从而导致控制系统性能不佳,甚至出现控制不稳定、失控等现象。pid控制方式控制稳定且精度高,但是控制对象的模型难以建立,并且当扰动因素不明确时,参数调整较复杂。本文采用ds18b20数字温度传感器,该传感器具有微型化、封装简单、低功耗、高性能抗干扰能力、测量范围广、强易配处理器等优点,可使系统测量更加精确,电路更加简单。实验测试证明,设计的样机系统测温控温精度均为01,测温控温的范围可达-55+125,可应用于家用电器、汽车、冷库等领域。3内容及要求:3.1 设计内容1)利用数字温度传感器ds18b20采集和转换温度;2)利用传感器得到的数据通过单片机编程实现温度的闭环控制;3)了解和使用pid算法在闭环控制中的应用;4)完成单片机外围电路的设计以及温度显示等程序工作;3.2设计要求1)装置的结构和电路原理图。2)调试过程,说明发现的向题及处理过程。3)分析存在的问题。4)收获与改进方案。4总体计设计方案 4.1方案提出考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器ds18b20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。同时本系统采用at89c52作为温度控制系统主控单元。at89c51是一种带4 kb闪存可编程可擦除只读存储器的低电压、高性能cmos的8位微处理器。指令系统和引脚与典型的mcs-51系列完全兼容,方便软件的编写。系统整体电路包括:主控电路、数码管显示、控制输出、控制对象、双向可控硅模块。4.2总体设计框图温度控制电路设计总体设计方框图如图所示,控制器采用单片机at89c52,温度传感器采用ds18b20,用4位led数码管实现温度显示。数码管显示ds18b20温度传感器信号调理控制对象双向控制控制输出输入电源at89c52单片机5 系统工作基本原理5.1 pid算法在模拟控制系统中,控制器最常用的控制规律是pid控制。工业控制算法常用位置型pid算法,经离散化后的算式为 式中,u(n)为第n个采样时刻控制器的输出量,e(n)第n个采样时刻的偏差值,kp为比例系数,ki为积分作用系数,kd为微分作用系数。由于位置式算法每次输出与整个过去状态有关,算式中用到过去偏差的累加值,容易产生较大的累计误差。而增量式中只需计算增量,算式中不需要累加,控制增量的确定仅与几次偏差采样值有关,当存在计算误差或精度不足时,对控制量计算的影响较小,且容易通过加权处理获得较好的控制效果。由于计算机只输出控制增量,所以误动作时影响较小,且必要时可用逻辑判断的方法去掉,对系统安全运行有利。 由于上述优点,所以增量式pid控制算法得到广泛的应用。其控制算法表达式为 式(3)是pid位置式的递推形式,是编程时常用的形式之一。按增量式pid控制算法编程时,a0,a1,a2可预先算出存入固定单元。pid算法流程图如图5所示。 5.2 ds18b20 传感器工作原理ds18b20温度传感器是美国dallas半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式。ds18b20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器的脉冲输入。器件中还有一个计数门,当计数门打开时,ds18b20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器、温度寄存器中,计数器和温度寄存器被预置在55所对应的一个基数值。减法计数器对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到时,温度寄存器的值将加,减法计数器的预置将重新被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。表2一部分温度对应值表温度/二进制表示十六进制表示+1250000 0111 1101 000007d0h+850000 0101 0101 00000550h+25.06250000 0001 1001 00000191h+10.1250000 0000 1010 000100a2h+0.50000 0000 0000 00100008h00000 0000 0000 10000000h-0.51111 1111 1111 0000fff8h-10.1251111 1111 0101 1110ff5eh-25.06251111 1110 0110 1111fe6fh-551111 1100 1001 0000fc90h 另外,由于ds18b20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对ds18b20的各种操作按协议进行。操作协议为:初使化ds18b20(发复位脉冲)发rom功能命令发存储器操作命令处理数据6系统整体硬件电路(原理图)系统整体硬件电路包括:传感器数据采集电路,温度显示电路,单片机主板电路,外围温度控制电路等,如图所示。7系统软件设计7.1程序设计组成:系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,pid闭环控制算法程序,pwm波产生程序等。7.2程序代码:#include #include #include #define uint unsigned int#define uchar unsigned char /宏定义#define c8255_a xbyte0x7f00#define c8255_b xbyte0x7f01#define c8255_c xbyte0x7f02#define c8255_con xbyte0x7f03void pid(void)/pid算法子程序void init(void)/初始化子程序void display(void)/延时子程序void clear()/清零子程序int mmul(int x,int y) /16位乘法,溢出赋极值int madd(int x,int y) /16位加法,溢出赋极值int change32_16(int x,int t) /3216char change16_8(int wd) /168 uchar presence;uchar code leddata = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;uchar data temp_data2= 0x00,0x00;uchar data display5 = 0x00,0x00,0x00,0x00,0x00;uchar code ditab16 = 0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;char ts=0x64;/采样周期int x=0x80;char spec=0x28; /给定:要求达到的温度值char iband=0x60; /积分分离值:pid算法中积分分离值int kp=12; /比例系数:pid算法中比例项系数char ki=20; /积分系数char kd=32; /微分系数int ck; /控制量:pid算法产生用于控制的量int tc; /采样周期变量char fpwm; /pwm脉冲中间标识位int ck_1; /控制量变量,用于记录上次控制的值int aaaa; / pwm高电平脉冲时间计算int vaa; /aaaa变量int bbb; /pwm低电平脉冲时间计算int vbb; /bbb变量int tkmark; /采样标志值int ek;/温度误差int ek_1;int aek;int bek;unsigned char dis; /bcd码显示bit flash=0; /显示开关标记sbit dq = p33; /定义ds18b20端口dqsbit din = p07; /小数点sbit p17=p17;/pwm的驱动 /*延时子程序*/void delay(unsigned int time) unsigned int i; for(i=0;i 0; i-) dq = 0; / 给脉冲信号 dat = 1; dq = 1; / 给脉冲信号 if(dq) dat |= 0x80; delay(4); return (dat);writeonechar(uchar dat) /写一个字节uchar i = 0;for (i = 8; i 0; i-) dq = 0; dq = dat&0x01; delay(5); dq = 1; dat=1; read_temperature(void) /读取温度 init_ds18b20(); if(presence=1) flash=1; else flash=0; writeonechar(0xcc); /跳过读序号列号的操作 writeonechar(0x44); /启动温度转换 init_ds18b20(); writeonechar(0xcc); /跳过读序号列号的操作 writeonechar(0xbe); /读取温度寄存器 temp_data0 = readonechar();/温度低8位 temp_data1 = readonechar();/温度高8位 /*显示子程序*/disp_temperature() /显示温度 uchar n=0; display4=temp_data0&0x0f; display0=ditabdisplay4; /查表得小数位的值 display4=(temp_data0&0xf0)4)|(temp_data1&0x0f)4); display3=display4/100; display1=display4%100; display2=display1/10; display1=display1%10; if(!display3) /高位为0,不显示 display3=0x0a; if(!display2) /次高位为0,不显示 display2=0x0a; p0 =leddatadisplay0; /显示小数位p2 = 0xf7;delay(250);p0 =leddatadisplay1; /显示个位din = 0; /小数点p2 = 0xfb;delay(250);p0 =leddatadisplay2; /显示十位p2 = 0xfd;delay(250);p0 =leddatadisplay3; /显示百位p2 = 0xfe;delay(250);p2 = 0xff; /关闭显示void myint2(void) interrupt 1 th0=0xd8; tl0=0xef; et0=1; /启动定时器0 if(tcabs(iband) i=0; /判积分分离 else i=(ek*ts)/ki; /计算积分项 p=aek; d=(kd/ts)*bek)/10000; /计算微分项 /与书上对照,忽略kp k=madd(i,p); k=madd(d,k); k=mmul(k,kp); k=k/10; ck=k+ck_1; ck=change16_8(ck); ck_1=ck; ek_1=ek; ck=ck+x; int mmul(int x,int y) int t,z; long s; s=x*y; z=(int)(s&0x0ffff); t=(int)(s16)&0x0ffff); s=change32_16(z,t); return(s);int change32_16(int z,int t) /t=高字节,z=低字节 int s; if(t=0) if(z&0x8000)=0) s=z; else s=0x7fff; else if(t&0xffff)=0xffff) if(z&0x8000)=0) s=0x8000; else s=z; else if(t&0x8000)=0) s=0x7fff; else s=0x8000; return(s);int mmad(int x,int y) int t; t=x+y; if(x=0&y=0) /同号相乘,符号位变反说明溢出 if(t&0x8000)!=0) t=0x7fff; else if(x=0&y8)&0x0ff; if(t=0x00) if(z&0x80)=0) s=z; else s=0x7f; else if(t&0xff)=0xff) if(z&0x80)=0) s=0x80; else s=z; else if(t&0x80)=0) s=0x7f; else s=0x80; return(s);void clear() c8255_b=0x00; /*主程序*/void main() init();while(1) read_temperature(); if(flash=0) disp_temperature(); else p2 = 0xff ; /ds18b20不正常,关闭显示 while(1); while(1) if(trmark=0x01) break; /采样周期到否 trmark=0x00;pid(); /pid算法 if(ck

温馨提示

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

评论

0/150

提交评论