北工大电子工程设计报告小型温度控制系统.docx
- 文档编号:4327476
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:31
- 大小:519.04KB
北工大电子工程设计报告小型温度控制系统.docx
《北工大电子工程设计报告小型温度控制系统.docx》由会员分享,可在线阅读,更多相关《北工大电子工程设计报告小型温度控制系统.docx(31页珍藏版)》请在冰豆网上搜索。
北工大电子工程设计报告小型温度控制系统
电子工程设计报告
题目:
温度测量系统/闭环温度控制系
统设计
专业:
电子科学与技术
小组:
第14小组
姓名学号:
王宁12023110
高洁12023112
指导教师:
张印春
完成日期:
2014.12.20
中文摘要
本电子工程设计的任务是完成一套小型的温度测量与控制系统。
这个系统需要完成非电量到电量信号转换、信号处理、数据采集、数据处理、人机交互、数据通信、控制等设计工作,几乎覆盖一般电子系统的所有设计环节。
其中包含有三个阶段。
本报告为第二阶段内容,在第一阶段电源模块、变送器模块,驱动器模块的基础上,又包含:
单片机模块的设计与实现;
数模转换模块的设计与实现;
模数转换模块的设计与实现;
键盘显示模块的设计与实现。
在上述七个模块的基础上,通过软件设计完成环境温度的显示与闭环温度控制两大功能。
并通过键盘很方便的进行两大功能的自由切换和目标控制温度的设定。
本报告针对以上模块分别详细给出了设计要求、方案设计、电路设计、原理分析、电路调试、电路故障等方面的内容,以完整反映实验过程。
关键词
【关键词】单片机;温度;闭环控制
1课题背景
1.1课题背景
在化工、石油、冶金等生产过程的物理过程和化学反应中,温度往往是一个很重要的量,需要准确地加以控制。
因此以温度作为被控制量的反馈控制系统广泛的应用于其他领域,是用途很广的一类工业控制系统。
温度控制系统常用来保持温度恒定或者使温度按照某种规定的程序变化。
目前,温度控制系统是应用最广泛的闭环控制系统,不但走进了工厂,而且走进了千家万户,为老百姓服务。
本课程通过对闭环温度控制系统的设计与实现,逐步掌握系统的设计方法与设计流程,掌握单片机应用系统的设计与调试,并锻炼在调试中发现问题、解决问题的能力。
1.2设计概述
本报告所涉及的小型温度控制系统为教学实验系统,所以只提出功能、指标和采用元件的设计要求。
(1)温度控制范围:
0℃~100℃
(2)测温元件:
半导体温度传感器AD592
(3)温度控制执行元件:
半导体制冷片
(4)核心控制部件:
C8051F系列单片机
小型温度控制系统基本组成如图所示:
图1.1系统整体功能框图
需要说明的是本报告是在第一阶段——简单电路的模块化实现的基础上,通过更加复杂电路的设计与实现,并配合相关软件设计,共同完成温度控制任务。
一般来说一个比较复杂的电路系统,可以按照电路实现的功能或电路的类型分为若干个模块。
其中有些模块与其它模块之间的界面清晰,入口参数和出口参数明确,能够独立工作,这类电路模块可以称之为独立电路模块。
为了简化系统电路的设计工作,并且使系统便于组装、调试,这类电路模块可以单独进行设计、实现和调试、检测。
本阶段的设计任务仍然采取模块化的方法,分模块进行设计与焊接、调试。
这样可以有效降低模块设计的难度,分模块调试,也是调试更加方便,降低了系统失败的风险。
本阶段上上阶段已完成电源模块、变送器模块和驱动器模块的设计与实现的基础上。
继续完成单片机模块、AD模块、DA模块、键盘显示模块的设计与实现。
并在各模块的基础上完成软件设计,实现环境温度的采集与显示,环境温度的闭环控制两大功能,成功完成了预期目标。
2简单电路的模块化设计与实现
2.1单片机应用电路设计与实现
2.1.1基本要求
片选信号:
6个
地址信号:
4个
数据总线:
AD0~AD7
控制信号:
WR,RD
安装:
独立电路板结构
2.1.2设计方案
采用以MCS-51(C8051F023)为核心的单片机做为控制芯片。
MCS-51系列单片机有众多性能优异的兼容产品、成熟的开发环境、世界上最大的单片机客户群、高性价比、畅通的供货渠道,是初学者的首选机型。
本电路直接采用成品单片机最小系统版,最小系统版内置晶振与复位电路,可以简化设计,方便焊接,也增加了设计与实现的成功率。
是单片机模块更加可靠。
图2.1典型的51单片机的最小系统电路图
本次设计采取总线结构,把单片机的P1口作为数据总线接口,P1、P2口联合使用作为地址总线接口。
通过总线结构设计,可以有效减轻软件设计难度,也是单片机控制的多个功能部件更加协调一致的工作。
图2.2单片机总线设计框图
如图2.2所示,控制系统在数据/地址传输上采用数据/地址分离设计;在控制上采用部分译码电路。
数据/地址分离电路设计:
单片机模块P3口为数据/地址复用端口,为了得到低8位地址,采用74LS373锁存器构成典型的数据/地址分离电路。
地址译码电路设计:
采用74LS138构成部分译码电路。
具体电路图如下:
图2.3单片机系统设计电路图
为便于各模块协调一致的工作,电路设计统一接口模式,方便调试与查错,单片机模块安装接口如图2.4所示。
图2.4单片机模块装结构图
2.1.3单片机系统的调试
调试平台:
电子工程设计训练调试台
调试内容:
地址译码电路输出检测
适用电路:
部分地址译码电路
测试设备:
JTAG适配器
单片机应用系统板
150MHz数字双踪示波器
调试方法:
1、检查电路连线无误后,将电路板安装在测试台上
2、断开译码电路负载,运行测试程序,检查各输出引脚是否有输出,各个输出之间相对位置关系是否正确;
3、用示波器观察CS0~CS5引脚,应有图示的波形输出。
如果没有输出或者彼此关系错乱,都表明电路中存在故障。
CS0~CS5输出波形图如图2.5所示:
CS0:
CS1:
CS2:
CS3:
图2.5单片机模块调试波形图
调试程序:
#include"C8051F020.h"
#include"absacc.h"
#include"data_define.c"
#defineC1XBYTE[0x0000]
#defineC2XBYTE[0x2000]
#defineC3XBYTE[0x4000]
#defineC4XBYTE[0x6000]
#include"Init_Device.c"
voidmain(void)
{
Init_Device();
while
(1)
{C1=0;C2=0;C3=0;C4=0;}}
2.1.4调试中遇到的问题
刚开始调试的时候,我们直接用程序观察模拟温度的变化,发现出错。
紧接着就用示波器观察CS0~CS5的波形,但是并没有得到正确的波形,CS1常为高,CS3和CS5的波形也是不对。
后又检查电路,发现线路接线正确,又检查线路通断,发现我们的电路板本身应该相连接的暗线部分没有连通。
随后进行了补救式的焊接,焊接问题这次应该解决了,我们就进行了又一次的测试,结果发现仍然是没有完全改善,CS1仍旧是常为高。
这次我们检查了138、244和00这三片,发现不是芯片的问题,最后寻求老师帮助,检查得出结论,我们的单片机第6脚是坏掉的,这才导致CS1总是有问题。
换了一个备用单片机,问题迎刃而解,最终得到正确波形。
完成了单片机模块的设计与调试。
表2.1常见故障及原因
故障现象
故障原因
输出全部没有变化
74LS373未接电源
输出全部没有变化
74LS373漏接+5V
输出全部没有变化
74LS373漏接地线
输出全部没有变化
未接ALE或ALE无效
输出关系混乱
AD0~AD3接错
对应引脚无输出
AD0~AD3漏接
2.2模/数转换电路设计与实现
2.2.1实验要求
输入信号范围:
0V~+5V
分辨率:
8bit
精度:
1LSB
转换时间:
<1ms
安装:
独立电路板结构
2.2.2设计方案
本次设计AD转换电路采用芯片ADC0804,芯片主要参数如下:
工作电压:
+5V,即VCC=+5V。
模拟输入电压范围:
0~+5V,即0≤Vin≤+5V。
分辨率:
8位,即分辨率为1/2=1/256,转换值介于0~255之间。
转换时间:
100us(fCK=640KHz时)。
转换误差:
±1LSB。
参考电压:
2.5V,即Vref=2.5V。
模数转换器,是将模拟电信号转变成计算机能识别的数字信号。
在模数转换中,应根据测量精度要求,考虑转换电路的精度和分辨率,并力求降低成本。
模数转换有多种方法可以实现,如采用电压/频率变换器,以频率或脉宽来计算温度,也可以采用A/D变换器或其它方法。
如采用A/D变换器,应考虑转换器输入阻抗和变送器输出阻抗对信号的衰减可能引起的测试误差,并尽量降低这一误差。
板间连接应注意保护。
根据课设要求,温度0~100的变化是用电压0~5V表示的,转成数字表示,即0~FFH。
AD电路模块电路图如图2.6所示
图2.6
AD模块工作的时序图如图2.7所示。
图2.7
2.2.3电路主要参数计算
(1)转换精度:
A/D转换器也采用分辨率和转换误差来描述转换精度。
分辨率是指引起输出数字量变动一个二进制码最低有效位(LSB)时,输入模拟量的最小变化量。
他反映了A/D转换器对输入模拟量微小变化的分辨能力。
在最大输入电压一定时,位数越多,量化单位越小,分辨率越高。
转换误差通常用输出误差的最大值形式给出,常用最低有效位的倍数表示,反映A/D转换器实际输出数字量和理论输出数字量之间的差异。
(2)转换时间:
转换时间是指转换控制信号(vL)到来,到A/D转换器输出端得到稳定的数字量所需要的时间。
转换时间与A/D转换器类型有关,並行比较型一般在几十个纳秒,逐次比较型在几十个微秒,双积分型在几十个毫秒数量级。
实际应用中,应根据数据位数、输入信号极性与范围、精度要求和采样频率等几个方面综合考虑A/D转换器的选用。
(3)8位数模转换电路主要技术指标:
分辨率---8位:
表示能够分辨的最小电压变化
DATA为1时的Vi表示最小电压变化
误差---±1LSB
转换时间---100微秒
为便于各模块协调一致的工作,电路设计统一接口模式,方便调试与查错,模数装换模块安装接口如图2.8所示。
图2.8模数转换电路安装结构图
2.2.4模数转换电路模块的调试
改变设置温度,运行A/D测试程序,检查模/数转换结果。
一般为0~5伏特之间改变,相应数为0~255.
调试源程序为:
#include"C8051F020.h"
#include"absacc.h"
#include"data_define.c"
#defineCS1XBYTE[0x2000]
#defineTIMER0x8000
#include"Init_Device.c"
voiddelay(void);
voidmain(void)
{
unsignedcharx;
Init_Device();
while
(1){CS1=x;delay();x=CS1;delay();}
}
voiddelay(void)
{
unsignedinti;
for(i=0;i } 一般故障检测方法为: 查数据线是否漏接,若A/D转换结果数值不随设置温度正比变化检查数据线是否错接;查Vin(-)是否接GND;查Vin(+)是否有变化,如无变化,逆向检查直至变送器输出。 若电源连接正常,查CLK-IN引脚是否有锯齿波信号输出,若没有输出检查相关元件连接是否正确,若频率过高(正常约为640KHz)检查元件参数是否有误。 如果元件连接及元件参数无误仍无信号输出,则ADC0804损坏。 若CLK-IN引脚有正常的锯齿波信号输出,可修改测试程序,将延时子程序或延时函数去掉,加快程序循环的时间,检查转换控制信号、和数据读取控制信号WR/RD是否正常。 若上述控制信号正常,则可能是ADC0804损坏。 2.3显示与键盘控制电路设计与实现 2.3.1基本要求: 1、4位7段数码显示,前3位含小数点 2、0~9数字输入键及若干功能设置按键控制 3、独立电路板安装结构 2.3.2设计方案: 单片机与LED显示器有两种接口方法。 动态显示电路方案: 电路简单,成本低,控制程序复杂,适用于显示位数较多的场合。 可使用智能芯片8279完成。 本阶段我们用74LS273设计显示数据输出电路,然后用74LS244设计键盘状态读入电路,最后设计出总的实验电路图,显示模块的电路原理图如图2.9所示。 图2.9显示模块电路原理图 矩阵键盘电路方案: 按键较多时,成本低,控制程序较直读电路复杂,适用于显示位数较多的场合。 键盘电路的电路图如图2.10所示。 图2.10键盘模块电路图 键盘模块工作的时序图如图2.11所示。 图2.11键盘模块工作时序图 为便于各模块协调一致的工作,电路设计统一接口模式,方便调试与查错,键盘显示模块安装接口如图2.12所示。 图2.12键盘显示模块安装结构图 2.3.3显示模块模块的调试 (1)显示电路模块调试源程序: #include"C8051F020.h" #include"absacc.h" #include"data_define.c" #defineDP1XBYTE[0x0000] #defineDP2XBYTE[0x0001] #defineDP3XBYTE[0x0002] #defineDP4XBYTE[0x0003] #defineTIMER0x8000 #include"Init_Device.c" unsignedchartable[]={0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90}; voiddelay(void); voiddisplay(unsignedcharx,y); voidmain(void) { unsignedchari,num=0; Init_Device(); DP1=DP2=DP3=DP4=0xff; while (1) { for(num=0;num<10;++num) { i++; if(i<=4)display(i,num); else{i=1;display(i,num);} delay(); } } } 在使用了这个程序之后发现,显示模块出现了问题,于是在张老师的帮助下,帮我们修改了程序,这才在一周实验的最后结尾部分查出了问题。 程序如下: #include"C8051F020.h" #include"absacc.h" #include"data_define.c" #defineDP1XBYTE[0x0000] #defineDP2XBYTE[0x0001] #defineDP3XBYTE[0x0002] #defineDP4XBYTE[0x0003] #defineTIMER0x8000 #include"Init_Device.c" unsignedchardatatable1[]={0x10,0xF9,0x0A,0x09,0xE1,0x05,0x04,0xD9,0x00,0x01}; unsignedchardatatable2[]={0x04,0xAF,0xC0,0x82,0x23,0x12,0x10,0x8F,0x00,0x02}; unsignedchardatatable3[]={0x40,0xF5,0x82,0x81,0x31,0x09,0x08,0xE5,0x00,0x01}; unsignedchardatatable4[]={0x04,0xEE,0x58,0x4A,0xAA,0x0B,0x01,0x6E,0x00,0x02}; voiddisplay(unsignedcharx,unsignedchary) { DP3=table3[x]; DP4=table4[y]; } voidmain(void) { unsignedcharl_val,r_val,r_state,temp,conter,x,c; intkey; DP1=DP2=DP3=DP4=0xff; Init_Device(); while (1) { key=0x0004; for(x=1;x<5;x++,key++) { c=XBYTE[key]; if(r_state=~c&0x1f) { for(conter=1,temp=0x01;conter<6;++conter,temp=temp<<1) if((r_state&temp)! =0) { r_val=conter; l_val=x; display(l_val,r_val); } } } } } (2)显示模块故障检测方法: 运行显示模块测试程序,如果电路工作正常,在4个数码管上应有数字0-9滚动显示。 否则,说明电路存在故障,可以根据故障现象,按照下面的方法进行检查。 全黑: 数码管未接电源,74LS237未接电源或地,74LS237触发控制信号(CK)不正常,数据线全部漏接 全亮: 74LS237的CLR引脚未接高电平 乱显示且无规律、无变化: 74LS237触发控制信号(CK)不正常 二次译码信号线上无信号: 一次译码信号线漏接或信号线上无信号,二次译码电路74LS138的E2、E3连接错误,二次译码电路74LS138漏接电源或地线,地址信号(74LS138的A、B、C输入)不正常,访问地址错误 2.3.4键盘模块的调试 运行键盘控制电路的测试程序,如果电路工作正常,在键盘上每按1个键,都会通过2位数码显示管,显示相应的行编码和列编码。 否则,说明电路存在故障。 调试源程序如下 #include"C8051F020.h" #include"absacc.h" #include"data_define.c" #defineDP1XBYTE[0x7000] #defineDP2XBYTE[0x7100] #defineDP3XBYTE[0x7200] #defineDP4XBYTE[0x7300] #defineTIMER0x8000 #include"Init_Device.c" unsigned chartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; voiddisplay(unsignedcharx,unsignedchary) {DP3=table[x]; DP4=table[y]; } voidmain(void){ unsignedcharl_val,r_val,r_state,temp,cont,x,c; intkey; DP1=DP2=DP3=DP4=0xff; Init_Device(); while (1){ key=0x0004; for(x=1;x<5;x++,key++){ c=XBYTE[key]; if(r_state=~c&0x1f){ for(cont=1,temp=0x01;cont<6;++cont,temp=temp<<1) if((r_state&temp)! =0){ r_val=cont; l_val=x; display(l_val,r_val);}}} }} 用此程序我们发现虽然显示部分已经没问题了,但是键盘部分又出现了问题,幸好有张老师的帮助,老师在百忙之中帮我们修改程序,检查问题,之后我又细细检查电路,发现是由于抄写电路图时的粗心,导致线路接错。 调试时修改的程序如下: #include"C8051F020.h" #include"absacc.h" #include"data_define.c" #defineDP1XBYTE[0x0000] #defineDP2XBYTE[0x0001] #defineDP3XBYTE[0x0002] #defineDP4XBYTE[0x0003] #defineTIMER0xff #include"Init_Device.c" unsignedchardatatable1[]={0x10,0xF9,0x0A,0x09,0xE1,0x05,0x04,0xD9,0x00,0x01}; unsignedchardatatable2[]={0x04,0xAF,0xC0,0x82,0x23,0x12,0x10,0x8F,0x00,0x02}; unsignedchardatatable3[]={0x40,0xF5,0x82,0x81,0x31,0x09,0x08,0xE5,0x00,0x01}; unsignedchardatatable4[]={0x04,0xEE,0x58,0x4A,0xAA,0x0B,0x01,0x6E,0x00,0x02}; voiddelay(void); voiddisplay(unsignedcharx,unsignedchary); voidmain(void) { unsignedchari=0,num=0; Init_Device(); //while (1) DP1=DP2=DP3=DP4=0xff; while (1) { for(num=0;num<9;++num) { i++; if(i<=4)display(i,num); else { i=1; display(i,num); } delay(); delay(); delay(); delay(); } } } voiddisplay(unsignedcharx,unsignedchary) { if(x==1)DP1=table1[y]; elseif(x==2)DP2=table2[y]; elseif(x==3)DP3=table3[y]; elseDP4=table4[y]; } voiddelay(void) { unsignedchardatai,j; for(i=0;i for(j=0;j } 2.4数/模(D/A)转换电路设计与实现 2.4.1基本要求: 输入范围: 00H~0FFH 对应输出: -10V~+10V 误差: 1%FSR 响应时间: <1ms 电源供电: +5V,±12V 安装: 独立电路板结构 2.4.2设计方案 D/A的作用是把输入的模拟信号转化为数字信号。 有电流开关型、脉宽调制型等。 在这里,我们采用DAC0832构成D/A电路。 DAC0832是8位乘算型电流输出的典型产品,具有MCU兼容
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北工大 电子 工程设计 报告 小型 温度 控制系统