北工大电子工程设计报告小型温度控制系统Word格式.docx
《北工大电子工程设计报告小型温度控制系统Word格式.docx》由会员分享,可在线阅读,更多相关《北工大电子工程设计报告小型温度控制系统Word格式.docx(31页珍藏版)》请在冰豆网上搜索。
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"
absacc.h"
data_define.c"
#defineC1XBYTE[0x0000]
#defineC2XBYTE[0x2000]
#defineC3XBYTE[0x4000]
#defineC4XBYTE[0x6000]
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.
调试源程序为:
#defineCS1XBYTE[0x2000]
#defineTIMER0x8000
voiddelay(void);
unsignedcharx;
while
(1){CS1=x;
delay();
x=CS1;
}
}
voiddelay(void)
unsignedinti;
for(i=0;
i<
TIMER;
++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)显示电路模块调试源程序:
#defineDP1XBYTE[0x0000]
#defineDP2XBYTE[0x0001]
#defineDP3XBYTE[0x0002]
#defineDP4XBYTE[0x0003]
unsignedchartable[]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90};
voiddisplay(unsignedcharx,y);
unsignedchari,num=0;
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();
}
在使用了这个程序之后发现,显示模块出现了问题,于是在张老师的帮助下,帮我们修改了程序,这才在一周实验的最后结尾部分查出了问题。
程序如下:
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];
}
unsignedcharl_val,r_val,r_state,temp,conter,x,c;
intkey;
DP1=DP2=DP3=DP4=0xff;
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位数码显示管,显示相应的行编码和列编码。
否则,说明电路存在故障。
调试源程序如下
#defineDP1XBYTE[0x7000]
#defineDP2XBYTE[0x7100]
#defineDP3XBYTE[0x7200]
#defineDP4XBYTE[0x7300]
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;
while
(1){
key=0x0004;
x++,key++){
c=XBYTE[key];
0x1f){
for(cont=1,temp=0x01;
cont<
++cont,temp=temp<
=0){
r_val=cont;
l_val=x;
display(l_val,r_val);
}}}
}}
用此程序我们发现虽然显示部分已经没问题了,但是键盘部分又出现了问题,幸好有张老师的帮助,老师在百忙之中帮我们修改程序,检查问题,之后我又细细检查电路,发现是由于抄写电路图时的粗心,导致线路接错。
调试时修改的程序如下:
#defineTIMER0xff
voiddisplay(unsignedcharx,unsignedchary);
unsignedchari=0,num=0;
Init_Device();
//while
(1)
DP1=DP2=DP3=DP4=0xff;
while
(1)
for(num=0;
9;
{
i++;
if(i<
else
{
i=1;
display(i,num);
}
delay();
delay();
}
if(x==1)DP1=table1[y];
elseif(x==2)DP2=table2[y];
elseif(x==3)DP3=table3[y];
elseDP4=table4[y];
unsignedchardatai,j;
for(i=0;
++i)
for(j=0;
j<
++j);
2.4数/模(D/A)转换电路设计与实现
2.4.1基本要求:
输入范围:
00H~0FFH
对应输出:
-10V~+10V
误差:
1%FSR
响应时间:
电源供电:
+5V,±
12V
2.4.2设计方案
D/A的作用是把输入的模拟信号转化为数字信号。
有电流开关型、脉宽调制型等。
在这里,我们采用DAC0832构成D/A电路。
DAC0832是8位乘算型电流输出的典型产品,具有MCU兼容