




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、电子工程设计报告题目:闭环温度控制系统设计单片机、显示和键盘电路及系统软件专 业:小 组:姓名学号:指导教师:张辉完成日期:摘要随着现代工业技术的迅猛发展,工业上的各种技术指标精度的要求也越来越高,在众 多指标中,温度的测量与控制是一个永恒的话题,只有了精确地温度测量,才能把加热和 散热的工作做得更好。本课题是小型温度测量与控制系统设计,以单片机AT89C51芯片为核心,和LED数码管显示,数模、模数转换和辅以稳压电源及变送器的测量控制系统,另 配有键盘输入控制。本设计详细介绍了 LED显示与键盘控制电路的工作原理,硬件电路组成的思路和相应 的C语言闭环程序。本设计主要包括以下几个模块:LED
2、显示模块、键盘控制模块。能够对环境温度随时随地检测与显示,并可以在模板上设定相应温度值使系统达到设定温度。【关键词】:LED显示、键盘控制、闭环程序、模板测试。目录一、功能指标要求 1二、D/A模块调试1三、A/D 模块调试 2四、显示电路模块 31. 显示电路设计 32. 显示电路原理分析 4五、键盘控制电路模块 41. 键盘控制电路设计 42. 键盘控制电路原理分析 4六、系统调试及程序设计 4七、出现的问题分析及解决方法 14八、创新性 1 4九、体会与建议 1415【附录I】、功能指标要求1) 显示模块: 4 位 7 段数码显示,前 3 位含小数点2) 键盘模块: 09数字输入键及若干
3、功能设置按键控制 ;第 10数字键作为允许控制开关3) 独立电路板安装结构、D/A 模块调试调试方法 :数据为从 00FF 顺序递增并不断循环的数值。 输出端波形如图二( 1):图二( 1) 调试程序 :#include #include #include #define C3 XBYTE0x4000#define TIMER 0x8000#include void delay(void);void main(void)unsigned char x;Init_Device();while(1) +x; C3=x; delay(); void delay(void)int i; for(i=0
4、;iTIMER;+i) ;、A/D 模块调试调试方法:输入信号范围: 0V+5V改变设置温度,运行A/D测试程序,检查模/数转换结果;在调试台上通过+10按键不断改变温度数值,调试台 LED会显示相应温度。调试程序:#include #include #include #define C2 XBYTE0x2000#define TIMER 0x8000#include void delay(void);void main(void)unsigned char x;Init_Device();while(1) C2=x; delay(); x=C2; delay(); void delay(vo
5、id)unsigned char i; for(i=0;iTIMER;+i);四、显示电路模块1. 显示电路设计: 这次我们用的均为两位共阳极七段数码管,管脚见图四( 1)图四( 1)显示模块电路图见图四( 2):图四( 2)2.显示电路原理分析:我们选用静态显示控制电路,八位数据位作为 74LS273数据锁存器的输入信号,273的 输出信号作为七段数码管的输入信号, 控制七个LED的亮灭。地址数据A和A作为74LS138 三八译码器的输入信号,138输出信号为锁存器时钟信号,VCc接 G端恒高有效,械和C1分 别接译码器Ga和Gb端,恒低有效。丫。控制选通锁存器1 (即设定值高位),Yi控制
6、选通锁存 器2 (即设定值低位),丫2控制选通锁存器3 (即显示值高位),丫3控制选通锁存器4 (即显 示值低位)。A和A按照程序设定的变化脉冲依次令 Y。、Yi、Y、W输出高脉冲,分别选通四 个数码管,当8051芯片数据位输入信号时,四位数码管可以依照事先译好的数据表显示出 相应的数值。五、键盘控制电路模块1. 键盘控制电路设计:见图五(1)图五(1)2. 键盘控制电路原理分析:我们采用阵列键盘读取方案,C4和“均输入低电平到74LS32或门,32输出到译码器选 通。同时32也输出到74LS244数据锁存器选通。编写程序使138译码器依次输出低电平, 扫描是否有键按下,当键盘上有键按下时,M
7、为低电平,对应的Sn也为低电平(即对应的D也为低电平)。六、系统调试及程序设计系统调试:第一步:我们首先用调试台调试,测试开环,编写程序烧录进8051,使我们自己设计的显示模块显示位跟随调试台上 LED显示模块的变化。第二步:编写PID闭环程序,编写程序烧录进8051,使系统能够从键盘上输入一个设定温 度值并显示在系统显示模块设定位上。随后按下调试台“Manual”按键,使系统能够将现在温度值与设定值做差,以确定需要升温还是降温,系统显示模块显示值会逐渐接近设定 值并最终稳定在一个与设定值误差非常小的数值上。第三步:将完整系统(包括电源模块、系统模块、A/D模块和变送器、D/A模块、显示模块和
8、键盘控制模块)移植到实验室真实模板上,先将模板设定为手动调节,设定一个值看系 统显示位是否随动;再将模板还原为自动调节,从键盘输入一个设定值,打开调节按钮, 观察系统显示位是否逐渐靠近设定位并最终稳定在一个非常相近的数值上,模板上加热(或制冷)提示灯是否点亮。如果上述答案是肯定的,系统成功,能够满足教学要求,实现小 型温度控制系统。调试程序:(自定义头函数见附录I)#i nclude #in clude #include #include #include / 设备地址列表#include / 键盘的键值表#include / 数码管的编码表static unsigned int DataT=
9、0; static int DataTO=0;static unsigned int DataTI=0; static unsigned int TargetT=0; static char tp=0;static unsigned int sign=0; static unsigned char Switch=0;static unsigned int Input=0;16进制的A/D数据/10 进制的温度数据/10 进制的目标温度(临时)/10 进制的目标温度/ 目标温度和当前温度的差值/表示tp的正负号/ 开关键是否按下的标志/ 输入void delay(void);void delay
10、1(void);void Display(const unsigned int,const unsigned int); unsigned int Convert(const unsigned int); unsigned int ReadT(void);unsigned int ReadKey(void);unsigned int ReadKeyS(void);unsigned int Decode(unsigned int);unsigned int ReadInput(void);void Task(void);void main(void)Init_Device();while(1)/
11、 读取键盘/ 对温度进行调整(主任务)ReadInput();Task();unsigned int Convert(const unsigned int a) return (int) 95*a/0xff;/ 返回值=输入数据*95/255 (取整数) 返回值范围( 095)unsigned int ReadT(void) C2=0; delay();return C2;/向A/D转换器发出指令/等待采样完成/ 返回采样数据数据void Display(const unsigned int x,const unsigned int z)C13=DT3z/10;C14=DT4z%10;C11=
12、DT1x/10;C12=DT2x%10;/ 第三个数码管,显示第二个数字的个位 / 第四个数码管,显示第二个数字的十位 / 第一个数码管,显示第一个数字的个位 / 第二个数码管,显示第一个数字的十位void delay(void)long int i; for(i=0;i0x1f0;+i) ;void delay1(void)long int i;for(i=0;i0x81f0;+i) ; / 延时子程序unsigned int ReadKeyS(void) unsigned char temp=0; unsigned char temp1=0; unsigned char i=0;temp=
13、C43; temp=0x1f&C43;/ 读取键盘第三行/ 屏蔽高 3位/ 如有按下,则延时后再读一次,看看是不/ 两次读取值不同,说明是抖动,退出if(temp=0x1f) return 0xff;temp1=temp; 是抖动delay(); temp=0x1f&C43; if(temp!=temp1)/ 如果没有按下,退出return 0xff;if(temp=0x1e)keytable 定义)return K11;if(temp=0x1d)作,则返回K12 (在keytable定义)Switch=Switch;return K12;unsigned int ReadKey(void)u
14、nsigned int temp=0;unsigned int i=0;while(1) temp=0x1f&C41; if(temp!=0x1f)i=0x0;break; temp=0x1f&C42; if(temp!=0x1f)i=0x40;break; temp=0x1f&C43; if(temp!=0x1f)i=0x80;break; temp=0x1f&C44; if(temp!=0x1f)/是第三行第一列的键,则返回K11 (在/是第三行第二列的键,对 Switch 做求反操/ 扫描第一行,看有无按下/ 第一行如有有按下,则跳出 while 循环/ 扫描第二行,看有无按下/ 第二行
15、如有有按下,则跳出 while 循环/ 扫描第三行,看有无按下/ 第三行如有有按下,则跳出 while 循环/ 扫描第四行,看有无按下/ 第四行如有有按下,则跳出 while 循环i=0xC0;break;/ 都没有按下,返回 0xff/ 将高三位和低五位合并/ 对键值解码 return 0xff;return i|temp;unsigned int Decode(unsigned int a) switch(a)case K1: return 1;case K2: return 2;case K3: return 3;case K4: return 4;case K5: return 5;c
16、ase K6: return 6;case K7: return 7;case K8: return 8;case K9: return 9;case K10: return 0;case K11: return 10; default: return 0xff;unsigned int ReadInput(void)unsigned int key=0; unsigned int i=0;/ 读取开关键是否按下unsigned int temp=0; key=ReadKeyS();if(i!=10) 值),则不读数据,退出return 0xff;Display(0,DataTO);/dela
17、y1();while(1) key=ReadKey(); i=Decode(key); if(i10) 时的输入数据)DataTI=i;Display(DataTI,DataTO); break;Task();输入数据的时候单片机失去控温能力while(1)key=ReadKey(); if(key=0xff) break;Task();while(1)key=ReadKey(); i=Decode(key);if(i95)时温度变送器为 5V)DataTI=95;tp=TargetT-DataTO;if(tp0)tp=tp+1; sign=1;elsesign=0;if(DataTO31);
18、 while(1) if(tp1)C3=0x80; break; if(tp4&sign=0) (但不是满载)/ 返回输入的数据/读取A/D的数据/把A/D数据转化为10进制的温度数据/ 如果温度大于 95度,就修正为 96度( 95度/ 目标温度和目标温度的差值/ 如果为负/ 求差值绝对值/ 符号位标记为 1 (1 为负数, 0为正数)/ 符号位标记为 0(1 为负数, 0为正数)/ 分三段控制, 030度,3170度,7195度/ 第一段/ 如果差值为 0,则令驱动器空载( 0V)/ 如果差值小于 4且为正数,令驱动器加热C3=170;break;if(tp4&sign=1)但不是满载)C
19、3=30;break;if(sign=1)满载)C3=0;break;if(sign=0)满载)C3=255;break;break; if(DataTO30);while(1)if(tp1)C3=0x80;break;if(tp4&sign=0)但不是满载)C3=220;break;/ 如果差值小于 4且为负数,令驱动器冷却/ 如果差值大于 4且为负数,令驱动器冷却/ 如果差值大于 4且为正数,令驱动器加热/ 第二段/ 如果差值为 0,则令驱动器空载( 0V)/ 如果差值小于 4且为正数,令驱动器加热if(tp4&sign=1)/ 如果差值小于 4且为负数,令驱动器冷却但不是满载)C3=75
20、;break;if(sign=1)满载)C3=0;break;if(sign=0)满载)C3=255;break;break; if(DataTO70);while(1)if(tp1)C3=0x80;break;if(tp4&sign=0)但不是满载)C3=255;break;if(tp4&sign=1)但不是满载)/ 如果差值大于 4且为负数,令驱动器冷却/ 如果差值大于 4且为正数,令驱动器加热/ 第三段/ 如果差值为 0,则令驱动器空载( 0V)/ 如果差值小于 4且为正数,令驱动器加热/ 如果差值小于 4且为负数,令驱动器冷却C3=100;Display(DataTI,DataTO);
21、return;break;if(sign=1)/ 如果差值大于 4且为负数,令驱动器冷却C3=0;break;if(sign=0)/ 如果差值大于 4且为正数,令驱动器加热(满C3=255;break;break;满载)载)/ 更新数码管显示七、出现的问题分析及解决方法问题一:问题二:问题三:我们在用老师的调试程序调试LED数码管时,发现无论怎么弄LED都显示乱码。 解决方法:后来问老师,我得知老师的程序是按照 QQ依次对应数码管的ag,同时将程序再按照四个数码管不同的对应线路译出四个独立的表。 一开始调试闭环程序时我们用的是 P 调节,显示值确实很接近设定值,但是不能 稳定在某一数值,而是不
22、停地变换,比如 85、84 来回跳。解决方法 :我们改进了程序,将 P 调节改进成 PID 调节,虽然在某些温度依然会来回跳,但是比改进算法前要稳定了很多。将系统移植到实验模板上时,我们发现最终显示值偏离设定值较大,最大偏差甚 至达到 67 度。解决方法:我将0C对应变送器输出OV, 100C对应5V。然而当我用万用表测了 100C时变送器输出端的电压值,发现超过 5V很多。于是我们重新整 定,调节变送器模块的两个电位器,使系统在模板上 0C时输出0V, 100 C时输出5V。再次进行闭环调试,问题解决。八、创新性创新点一: 按键除抖,我们将程序设定为在扫描完一次按下的键后,间隔一定时间再次扫
23、 描按下的键,如果两次扫描到的值相等,则确定其按下,否则将其作为误触。创新点二:我们将键盘K11键作为设定允许键,每次要输入设定值前要先按下 K11(即设定 允许键)方可进行输入。这样可以防止键盘被误触。创新点三: 真实条件测试,我们在调试台测试完整个系统后,将我们所有的模块移植到实 验室模板上,调试。使其成为能够调节真实温度的具有实际作用的系统。创新点四: 程序模块化编写,我们将一些有可能需要经常改动的参数写为头文件形式,如报告后边的附录I。这样可以大大减少程序调试时的工作量, 比如在调试LED时,如果发现对应的码位不对, 只需要在头文件里修改相应的值, 代替修改主程序的所有相关参 数。同时
24、使程序更精简,运行速度更快。九、体会与建议经历了这次长达一年的电子工程设计。我们确实学到了很多很多,从一开始的不知从 何下手,到最终的能够在真实模板上测试成功。这一年里,我们碰到过各种问题,比如电 源保险烧断,芯片烧裂,程序出现问题无法进行,但是我们运用我们的能力最终将其解决, 不管是问老师,问同学,上图书馆、网络查资料。这次大实验使我了解了一个真正具有实 用意义的专业系统到底由哪些模块组成,他们之间又是怎么联系起来共同为系统服务的。 其次就是锻炼了我们的耐心,一个从下午一点半上到晚上九点的实验,而且要在这期间不 停地学知识,动手焊电路,编程。现在课设结束了,我要谢谢老师一年来不光传授我们知
25、识,更锻炼了我们很多优良的特性,让我们提前适应了工作时的那种高效的要求。除此之外,我也有一些建议。大家在查芯片的时候不要排斥英文的数据手册,因为本 来很多芯片就是外国产的,他们更了解这个芯片的特性,而且在查PDF的过程中还能巩固很多专业词汇。其次,大家要敢于动手,不要因为爆了一个电容,被烙铁烫了一下手就对 课设胆战心惊,其实现在多经历些总强于以后因此出大错。【附录I】#defineC11XBYTE0xE000/ 第一个数码管#defineC12XBYTE0xE100/ 第二个数码管#defineC13XBYTE0xE200/ 第三个数码管#defineC14XBYTE0xE300/ 第四个数码
26、管#defineC3XBYTE0xBF00/D/A 转换器#defineC2XBYTE0xDF00/A/D 转换器#defineC40XBYTE0x7F00/ 键盘#defineC41XBYTE0x7000/ 键盘第一行#defineC42XBYTE0x7100/ 键盘第二行#defineC43XBYTE0x7200/ 键盘第三行#defineC44XBYTE0x7300/ 键盘第四行#defineK10x1E#defineK20x1D#defineK30x1B#defineK40x17#defineK50x0F#defineK60x5E#defineK70x5D#defineK80x5B#defineK90x57#defineK100x4F#defineK110x9E#de
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海南职业技术学院《品牌包装系统设计》2023-2024学年第二学期期末试卷
- 哈尔滨金融学院《包装材料及应用》2023-2024学年第二学期期末试卷
- 浙江师范大学《西方哲学》2023-2024学年第二学期期末试卷
- 吉林动画学院《基于数值模拟的工程优化》2023-2024学年第二学期期末试卷
- Ketotifen-d3-HC-20-511-d-sub-3-sub-生命科学试剂-MCE
- 工业余热回收利用技术推广
- 工业品智能配送系统的设计与实施
- 工业互联网在工程项目中的应用前景
- 工业4.0智能制造技术与实践
- 工业4.0时代的智能注塑技术
- 德阳研学旅行课程的融合开发与实践发展策略研究
- 病理学考试题库
- 2025年全国普通高校招生全国统一考试数学试卷(新高考Ⅰ卷)含答案
- 事业单位考试(面试)试题附答案
- HYDRUS-2D3D学习手册资料
- 数字化转型项目管理试题及答案
- 2025年上海市七年级语文下学期期末考试复习(基础知识+课内古诗文+课外文言文)
- 北京市海淀区2023-2024学年高二下学期期末考试英语试卷(含答案)
- 维修基金施工合同模板模板
- 排烟窗安装合同协议书
- 农业投资合同协议书
评论
0/150
提交评论