北工大版电子工程设计温控系统第二次实验报告.docx

上传人:b****7 文档编号:15975325 上传时间:2023-07-09 格式:DOCX 页数:25 大小:55.89KB
下载 相关 举报
北工大版电子工程设计温控系统第二次实验报告.docx_第1页
第1页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第2页
第2页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第3页
第3页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第4页
第4页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第5页
第5页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第6页
第6页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第7页
第7页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第8页
第8页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第9页
第9页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第10页
第10页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第11页
第11页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第12页
第12页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第13页
第13页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第14页
第14页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第15页
第15页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第16页
第16页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第17页
第17页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第18页
第18页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第19页
第19页 / 共25页
北工大版电子工程设计温控系统第二次实验报告.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

北工大版电子工程设计温控系统第二次实验报告.docx

《北工大版电子工程设计温控系统第二次实验报告.docx》由会员分享,可在线阅读,更多相关《北工大版电子工程设计温控系统第二次实验报告.docx(25页珍藏版)》请在冰点文库上搜索。

北工大版电子工程设计温控系统第二次实验报告.docx

北工大版电子工程设计温控系统第二次实验报告

电子工程设计报告

温度测量系统/闭环温度控制系统设计

单片机应用电路3

模数转换电路5

数模转换电路7

显示键盘电路9

温度测量程序设计11

程序设计H

遇到的问题及解决方案18

心得体会19

感谢20

参考文献20

附录:

原程序20

一・单片机应用电路

1・设计任务与设计要求

片选信号:

6个

地址信号:

4个

控制信号:

RD.WR,ALE,INT0

数据总线:

AD0~AD7安装:

独立电路板结构

2•电路设计方案

1MCS-51系列单片机有众多性能优异的兼容产品、成熟的开发环境、世界上最大的单片机客户群、高性价比、畅通的供货渠道,是初学者的首选机型。

8051是MCS-51系列单片机早期产品之一,内建一次性可编程只读存储器(PROM),只需要很少的外围元件即可组成最小系统。

所以我们选择8051作为我们的单片机

2安装结构

3电路选择

单片机模块P3口为数据/地址复用端口,为了得到低8位地址,需要设计数据/地址分离电路。

所以设计电路图如下

3•原理及功能分析

(1)74LS373工作原理

当三态允许控制端OE为低电平时,Q0〜Q7为正常逻辑状态,可用来驱动负载或总线。

当OE为高电平时,Q0〜Q7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。

当锁存允许端LE为高电平时,Q随数据D而变。

当LE为低电平时,D被锁存在已建立的数据电平。

当LE端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mVo

(2)74LS138Z作原理

当一个选通端(E1)为高电平,另两个选通端((/E2))和/(E3))为低电平时,可将地址端(AO、Al、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。

比如:

A2A1AO=110时,则Y6输出端输出低电平信号。

(3)电路工作原理

®C8051的P3口为数据/地址复用端口,为了得到低8位地址,需要数据/

地址分离电路。

C8051通过A13、A14、A15三口输出信号给74LS138译码器,经过芯片译码后输出6个片选信号,当输出相应地址时输出相应片选。

译码器的El、E2口接低,E3口接高,7、9两口制空。

②C8051接收信号后需要数据At也址分离电路,而74LS373锁存器便充当了这一功能。

373从8051的D0~D7口接收到信号后将信号分离,数据信号从锁存器的Q0~Q3口输出,地址信号从锁存器的D0~D7口输出。

2.模数转换电路

1・设计任务与设计要求

输入信号范围:

0V~+5V

分辨率:

8bit

精度:

1LSB

转换时间:

<lms

安装:

独立电路板结构

2•电路设计方案

1D/A…数字量一模拟量转换电路,常用D/A电路的基本原理有电流开关型和脉宽调制型,其中电流开关型是用数字切换电流开关,产生与电阻网络权电流对应的电流“和”「脉宽调制型是将数字转换为输出脉冲宽度,用积分器将脉冲宽度转换为与之对应的电压输岀。

DAC0832是8位乘算型电流输出的典型产品,具有MCU兼容接口,使用方便,价格低,能满足设计要求。

所以我们选择DAC0832。

2安装结构

3电路选择

3•原理及功能分析

(1)ADC0804工作原理

ADC0804采用的是逐次比较的方法,逐次比较转换过程与用天平称物重的方法类似。

其方法是将输入信号的电压与一系列的参考电压相比较。

第一次与输入参考电压5V的一半进行比较(即2.5V),如果大于2.5V,则将置1,并保留2.5V;如果小于2.5V,贝IJ将置0,并舍去2.5Vo第二次将数入参考电压的四分之一(即1.25V)加到上一次所剩下的值上,将输入电压与这个值进行比较,如果大于这个值,则将置1,并保留这个值;如果小于这个值,则将置0,并舍去这次新加上的1.25V。

依此类推,每次新加上的值都是上一次所新加的值的一半,如此比较8次之后,就被确定下来了,此值就是ADC0804的输出。

(2)电路工作原理

将Vin(+)输入的模拟量通过ADC0804转换为数字量,从11到18管脚输岀。

其中Vin(・)、AGND、10脚接地。

4脚和19脚之间按图示的方法接10KQ的电阻和150PF的电容,与内部电路配合构成时钟信号的发生电路。

片选CS接单片机的CS1片选,RD、WR分别接单片机的RD和WR信号。

(3)电路主要参数的计算

4脚和19脚之间按图示的方法接10KQ的电阻和150PF的电容,是根据芯片手册上给的参考电路所确定的。

3.数模转换电路

1・设计任务与设计要求

输入范围:

00H~0FFH对应输入:

-10V~+10V输出阻抗:

<1000响应时间:

+5V,±12V安装:

独立电路板结构

2•电路设计方案

®A/D-—模拟量一数字量转换电路,常用A/D电路的基本原理有积分型、逐次比较型、并行比较型。

其中积分型是将电圧转换成脉宽信号或频率,山定时器/计数器获得数字值。

逐次比较型是山比较器和DA转换器通过逐次比较逻辑构成,经n次比较而输出数字值。

并行比较型是用多个比较器,仅作一次比较而实行转换。

压频转换型是将模拟信号转换成频率,然后用计数器将频率转换成数字量,从理论上讲其分辨率儿乎可以无限增加。

ADC0804是8位逐次比较(逐次逼近)型典型产品,具有MCU兼容接口,使用方便;分辩率和转换速度都能够满足设计要求,且价格低廉。

②安装结构

3电路选择

3•原理及功能分析

(1)DAC0832T作原理

DAC0832是8位分辨率的D/A转换集成芯片。

与微处理器完全兼容。

这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。

D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。

它有八个恒流源,每个恒流源之间相差2倍。

山D0〜D7八个地址口相应输出信号给八个恒流源,当信号为“1”时开关开,从Ioutl管脚输出给后面电路,当信号为“0”时,接地。

(2)电路工作原理

DAC0832输岀口Ioutl、2分别接NE5532的2、3口,NE5532的5口接模拟地,电流转成电压,然后电压放大,最后电压平移。

DAC0832的Ioutl和电阻

输出一电流信号经过运放的虚短虚断变为0~・5V的电压,之后再通过一个负反馈电路,电压值=,得到一个0~20V的电压。

+5V的电压经过运放后,得到・10V电压。

经过负反馈的0~20V的电压再经过-10V电压平移最终得到-10V~+10V的电压输出。

4.显示键盘电路

1・设计任务与设计要求

显示能力:

4位7段数码显示,前三位含小数点键盘功能:

0〜9数字按键及若干功能按键控制安装:

独立电路版安装结构

2•电路设计方案

1基本显示控制方式有静态和动态两种,静态电路考验的是焊接匸艺,动态电路考验的是程序编写能力。

因为我们组比较擅长于程序编写方面,所以我们选择了动态电路显示控制方式。

其中最主要的部件是CH452芯片,基本功能是采用动态扫描控制方式,4线同步串行接口编程或2线(fC)$行接口编程。

动态显示电路方案:

电路简单,成本低,控制程序复杂,适用于显示位数较多的场合。

矩阵键盘电路方案:

按键较多时,成本低,控制程序较直读电路复朵,适用于显示位数较多的场合。

2安装结构

设计电路如下:

5.温度测量程序设计

1・设计任务与设计要求

搭建测温硬件环境

设il•数据数据采集

数据处理

数据显示程序

完成温度测量和显示工作

温度测量显示误差:

2•设计方案

总体功能描述初始化启动A/D转换并读取结果对A/D转换结果进行处理得到显示温度将显示温度转换为显示段码数据将显示段码数据送显示电路进行显示延时1秒钟,开始下一次测温过程

1、数组

©table1[]={0xC0.0xF9.0xA4.0xB0,0x99.0x92,0x82,0xF8.0x80,0x90};

一维数组,显示的段码表,从0到9

②table2⑶⑸={0J,2,3:

A\

4,5,6,7「B;

&9CDTE'};

自己设泄的二维数组,用于配合读取键值的程序,使得键盘和输入对应。

送到AD转换中的数值

从AD转换中读取的数值

送给第一个数码管的数,读取的温度的十位送给第二个数码管的数,读取的温度的个位

送给第三个数码管的数,并初始化2,输入的温度的十位送给第四个数码管的数,并初始化5,输入的温度的个位从键盘读取的用于控制的数

1>全局变量

renumber1

r_number2

DP_numberl

DP_number2

DP_numbcr3=2

DP_number4=5

DP_number5=0

DP_number6从键盘读取的用于输入数据的数

DP_number7=0从键盘读取的用于检测是否停止控温的数coop=0控温监测变量t=0输入温度检测变量一、子程序

主函数

1、voidmain(void)

Init_Dcvice();

while

(1)

INTR5:

;

Read();

displayO;

K_intl();

if(t==1){KJnt20;t=0;gotoINTR5:

}

if(coop==l){

while(l)

Read();

T_change();

displayO;

K_int3();

if(DP_number7==,D,){DP_number7=0;coop=0;}if(coop=0){control=0x80;gotoINTR6;}

}

}

INTR6:

;

}

主函数,用于实现框图中的功能,按照框图的逻借编写,这里不再赘述

2、voiddisplay(void)显示函数

{

DPl=table1[DP_number1];

DP2=table1[DP_number2];

DP3=tablel[DP_nuinber3];

DP4=tablel[DP_number4];

}

即分别把要送给四个数码管的数,通过iablcl表的翻译,送到每个数码管中。

3、voiddelay(void)延时函数

{

unsignedinti;for(i=0;i

}

虽然设置了延时函数,但对其它模块的具体作用不是很淸楚.感觉没有存在必要,但还是对其进行了保留,其在读取温度值的时候还是有一定的作用的。

4、voidKJntl(void)键盘控制信息输入函数

{unsignedcharl_val,r_valj_statejempxont,xx;

intkey;

while(l)

{

key=0x0004;

for(x=l;x<5;x++,key++)

{

c=XBYTE[key];

if(r_state=-c&0xlf)

{

for(cont=1,temp=0x01:

cont<6;++cont.temp=temp«1)if((r_state&temp)!

=0)

{

r_val=cont;

Lval=x;

DP_number5=tabIe2[Lval-1][r_val-1];

if(DP_numbcr5=,A,){t=1:

gotoINTR1;}if(DP_number5=,C,){coop=1;gotoINTR1;}

INTR1:

;

}

此函数的主体还是釆用了老师给的键盘调试程序中的方法,完全是复制粘贴过来的。

调试程序中,可以实现读取按键的行值和列值,由此我们想到,可以按照键盘上的数字,设宜一个二维数组,这样通过读取行值和列值就能对应出输入的数。

此模块只有两个跳出办法,一个是按下启动输入控制温度的开始键,一个是按下开始闭环控制的键。

同时,按下键时,分别影响标志变量。

在主程序中,通过判断标识变虽是0还是1,就可进行相应的操作。

5、voidK_int2(void)控制温度输入程序

unsignedcharl_val,r_val.r_state,temp.cont,x,c;

intkey;

Init_Device();

while

(1)

{

key=0x0004;

for(x=l;x<5;x++,key++)

{

c=XBYTE[key];

if(r_state=-c&Oxlf)

{

for(cont=1」cmp=0x01:

cont<6;++cont,temp=temp«1)

if((r_state&temp)!

=0)

{

r_val=cont;

Lval=x;

DP_number6=table2[Lval-1][r_val-1];

if(DP_number6=,B,)

(gotoINTR2;}

DP_number3=DP_number6;

displayO;

}

}

}

INTR2:

;

while(l)

{

key=0x0004;

for(x=1:

xv5;x++、kcy++)

{

c=XBYTE[key];

if(r_state=-c&0xlf)

{

for(cont=1,temp=0x01;cont<6:

++cont.temp=tenip«1)

if((r_state&tcmp)!

=0)

{

r_val=cont;

l_val=x;

DP_number6=table2[Lval-1][r_val-1];;

if(DP_number6==,E,)

{gotoINTR4;}

DP_numbcr4=DP_number6;

displayO;

}

}

}

INTR4:

;

}

当通过KJntl函数影响标识变量后,就判断标识变量,如果A1,就表明进行控制温度输入,就调用温度控制输入函数。

这个模块是花费时间最多的模块,经过与好多人讨论,网上査了一些算法,最终确左了这个方法。

起初,我们想,输入两个数,不过是调用输入函数两次就能实现。

当通过一个死循环实现的时候,可以实现输入两个数字,但我们要求的是输入两个数字之后便不再输入,转入询问是否开启闭环控制温度。

于是,我们只是调用了像KJntl一样的循环两次,跳出条件是有键按下便跳出,两次调用之间调用一泄的延时。

在具体的实验中,我们发现,只能输入温度的个位,十位默认的给岀了一个乱码。

经过反复的编写小程序测试,我们发现,只要是使用有键按下便跳岀的算法实现的都会出现乱码的情况。

这种现象与其他小组的采用此算法的结果,不谋而合。

于是,经过网上査找一些算法,我们总结出:

如果采用输入一个数然后必须按下确认键才能输入下一个数,那么,在按下确认键之前,输入函数始终是个循环,这样,就与最简单的无限循环输入一样了,肯定能够实现。

所以,我们把输入的跳出条件改为有一个特殊的键按下(可见二维数组中的字母)。

为了防止输入第一个数的确认键和输入第二个数的确认键冲突,我们设宜了两个确认键。

由于时间紧急,我们没能来得及去测试如果使用一个确认键,而调用输入程序两次会不会同样能够实现。

这样,K_int2函数就能缩短一半,程序更加优化。

6、voidK_int3(void)询问是否结朿闭环控制函数

{unsignedcharl_val.r_val,r_state,temp?

cont,xx;

intkey;

key=0x0004;

for(x=1;x<5;x++,kcy++)

{

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;

DP_number7=table2[l_val-1][r_val-l];

}

在写程序之初,我们打算只有一个输入函数,结合上监测标识变量,无论是控制输入还是控制温度输入,还是询问是否终止闭环,凡事从键盘读取的,都调用同一个输入函数。

但当我们真正的做起来的时候,发现这样写起来程序非常困难,写一个输入函数需要考虑的问题太多。

所以在写程序的过程中,我们放弃了,决泄先完成任务,不论算法的简单与复杂,所以便有了这个K_int3程序。

这个程序实现的是在闭环控制循环中,询问是否结朿闭环控制。

结合着主函数中的闭环控制,如果输入的是闭环终止键,那么就让coop=0,而进入闭环控制的条件是coop=l,这样就自动的从循环中跳出来。

当然,在必要的位置,我们给两个检测标识变量淸零,防止出现逻辑混乱。

7、voidRcad(void)读取调试台温度函数

{

C2=r_numbcrl;

dclayO;

r_numberl=C2;

dclay();

r_innnber2=r_nuniberl*100/256;

DP_number1=r_number2%10;

DP_number2=r_number2/l0;

}

这个函数没有什么好解释的,在实现从调试台读数然后送显的功能的时候,这个程序就编好了。

实现的是把调试台的温度换算成十位数和个位数,分別给两个数码管的数。

8、voidT_change(void)闭环温度改变函数

{intnumbcr_now,nuinber_wish,compare:

number_now=DP_number2*10+DP_numberl;

numbcr_wish=DP_number3*10+DP_number4;compare=number_wish-number_now;

if(compare>=3)

{control=Oxff;}

elseif(compare>=l)

{control=(number.wish+15)*256/100;}

elseif(-l

{control=0x80;}

elseif(-3

{control=(number_wish-4)*256/100;}

else

{control=OxOO:

}

}

此函数中,我们设宜了三个变量numbcr_now是从调试台读取的温度number_wish是我们从键盘输入的温度compare是两个温度的差值。

我们设想的闭环温控是一个循环,这个循环不断的读取现在的温度值,与要求的温度值作比较,从而进行相应的加温,减温「其中,我们对差值进行了分段处理,我们觉得乒乓算法并不是很好,即使在80度的时候,仍然有降温,所以我们结合着乒乓算法与PID算法(PID苦涩难懂,而且很长,我们就放弃了),创造了这样的一个算法。

温度差值在3度以外,是全速的升温降温。

为什么是3这个数值呢,这是我们在调试的过程中修改的,初始我们确定的是5,发现,5还是太大,3足够了。

然后差值在1~3之间,是采取比设沱温度髙15度升温,经过调试,我们发现,在高温区,其实没什么差别,在中温区,这个算法的效果就很明显了。

因为如果设左温度是80度,那么加上15度也就是95度,与全速升温没差别。

当设立在70度的时候,就有几度的差别,这个影响着精度。

1~3这个区间的划分以及15度的确定,都是实验的结果。

温度差值在-1~1之间,是恒温的。

温度差值在之间是采取比设泄的温度小4度进行降温。

这个在低温区效果非常明显。

同样,4这个数也是通过反复的修改实验确左的。

最后总体来说一个这个函数,在升温的时候,温度是不可能达到设左温度的,会比设左温度低两度左右(只测试了设定温>60度的情况),不存在降温过程,升温速度很快。

估计在25度到60度之间,基本上能够达到设左的温度,而且上下浮动很小。

在低温区,降温的情况下,会有升温出现。

但当最终确迫以小4度降温后,误差不大。

此程序的最大优点就是浮动小,比较精确。

七.遇到的问题及解决方案

1、单片机板

由于上学期学习了微机原理,所以单片机板的基本原理我们比较淸楚,知道每一个器件起到的作用。

在焊接是,我们组采取了数据线路、地址线路、控制线路分别连接的方法。

这样,避免了复杂的线路的漏接,错接。

经过较认真的焊接,单片机板在调试的时候,没有出现什么问题。

一直到后而,单片机板一直稳定工作。

2、AD转换板

这个电路板非常简单,连接线路少,布局也很随意,经过修改老师给的调试程序,加上变送器板,能够实现读取调试台上的温度值,通过监视器看到,当温度在50摄氏度的时候,读取的数值是129,还不错。

3、显示板

1焊接过程:

这块板是我们这个学期碰到的工程量最大的一块板,出的问题也最多。

在焊接时,最困难的就是数据线的连接。

起初,没开始焊板之前,我们计划着在板上单独焊出来一块数据总线排线,这样,所有的273的数拯线都接到数据总线上,在理论上就解决了焊点太复杂的问题。

总线排线可以用电阻两端的铁线实现。

但当我们真正焊起来的时候,却发现,数据总线排线焊的过密,当若干数据线接入时,想要再接上一根数据线变的非常困难,线路非常凌乱。

以至于工作没法继续下去,所以只好放弃了数据排线总线的方法,还是采用最直接的下一个273数据线接到上一个273数据线上。

由于起初想做数据排线总线的时候,导线都已经剪好了,这样,导致接法只好,线路比较长,本着节约材料的原则,只好继续用,只是影响了美观。

在焊板的过程中,还犯了一个错误。

由于焊板前计划不足,考虑不周,过于着急去完成。

导致讲138,244和或非门位置记错了,本来该接在138上的线,接在了244上,幸亏在焊接了一半的时候发现了这个问题,因为焊着焊着,发现管脚不够用了。

这个我们总结了教训:

焊板之前,一立要规划好元器件的位置,考虑好布局,不能急着下手。

2调试査错过程:

在调试过程中,当我们运行显示调试程序的时候,发现数码管的显示是乱码。

我们推断,很可能是因为导线过长,在将板插在调试台上的时候,导线会受到挤压,焊

接不牢固就会掉下来,所以,我们开始查线。

由于线路太复杂,用肉眼查线太麻烦,效率不高,而且不容易分辨,所以我们想了个办法:

从调试台引岀+12V的电压,调试台地线接上欧姆表的负极,将+12v电压的导线分别与8根数据线的每一根数据线连接,同时检测每一个器件的对应的数据线上是否有+12V的电压。

很快,我们便找到了好几根掉下来的线,经过反复检査,焊接牢固。

在解决了数据线之后,我们仍然得不到想要的结果,还有乱码,但我们发现,乱的很有规律。

当发送2、3、7、8等数字的时候,显示是正确的。

当发送1、4等数字的时候,数码管的上而一段和右上角一段总是不对,如果两者交换就能显示正确。

经过查看数码管的内部线路和对应的数据线,我们发现,dO和dl正好倒了,但当我们去查线的时候,我们发现,线路是完全按照标准电路图连接的,理论上不会出现两个数据线颠倒的情况。

但我们想,既然结果显示两个数据线颠倒了,我们觉得换过来试一试。

换过来之后,我们发现显示正常了,但为什么两个数据线颠倒了,我们还是没有明白,不过实验结果岀来了。

这个具体问题,等到有时间再研究了。

键盘模块的调试相对显示模块的调试,要轻松的多。

起初,我们运行键盘程序,发现不能得到想要的结果,经过反复检査,我们发现单片机根本就没从244里而读数。

这时,我们就去查与244有关的线路,最终发现,读信号没有连接到244的控制端。

连接后,键盘模块也调试完毕。

4、DA转换板

DA转换板也叫简单,一遍就成功,所以没什么可

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2