设计题目: 温度计
学 号:10291217
姓 名:
同 组 人:
指导教师:
设计时间:
设计地点:电气学院实验中心
姓 名 | 学 号 | ||
课程设计题目: | |||
课程设计答辩或提问记录: | |||
成绩评定依据: 课程设计预习报告及方案设计情况(20%): 课程设计考勤情况(5%): 电路焊接情况(15%) 课程设计调试情况(40%): 课程设计总结报告与答辩情况(20%): | |||
最终评定成绩(以优、良、中、及格、不及格评定) |
序 号 | 内 容 | 学时安排(天) |
1 | 方案论证和系统设计 | 1 |
2 | 完成电路仿真,写预习报告 | 2 |
3 | 电路调试 | 2 |
4 | 写设计总结报告与答辩 | 1 |
合 计 | 6 | |
设计调试地点:电气楼410 |
第一章 系统方案设计·····································1
第二章 仿真·············································9
第三章 调试··············································11
第四章 结论·············································17
第五章 心得体会与建议···································18
第一章 系统方案设计
总体设计思路:
一、利用AD590采集温度信号
1.AD590介绍
(1) 流过器件的电流(μA) 等于器件所处环境的热力学温度(开尔文) 度数:
Ir/T=1 (1)
式中,Ir—流过器件(AD590) 的电流,单位为μA;T—热力学温度,单位为K;
(2) AD590的测温范围为- 55℃~+150℃;
(3) AD590的电源电压范围为4~30 V,可以承受44 V正向电压和20 V反向电压,因而器件即使反接也不会被损坏;
(4) 输出电阻为710 mΩ;
(5) 精度高,AD590在- 55℃~+-150℃范围内,非线性误差仅为±0.3℃。
(6)AD590管脚图及元件符号
2.温度信号的采集
AD590相当于一个温度控制的恒流源,输出电流大小只与温度有关,且与温度成正比。只需一个精密电阻,就可以将电流(温度)信号转化为电压信号,总的灵敏度系数通过该电阻设定。AD590的温度系数是1μA/K,即温度每增加1K,它会增加1μA输出电流。其输出电流是以绝对温度零度-273℃为基准,每增加1℃,它会增加1μA输出电流,因此 0℃到100℃时AD590输出电流为273μA到373μA。
本实验中,因为AD590的灵敏度为
摄氏温度/℃ | AD590电流/μA | 经10KΩ电压/V |
0 | 273.2 | 2.732 |
10 | 283.2 | 2.832 |
20 | 293.2 | 2.932 |
30 | 303.2 | 3.032 |
40 | 313.2 | 3.132 |
50 | 323.2 | 3.232 |
60 | 333.2 | 3.332 |
100 | 373.2 | 3.732 |
二、通过AD0832实现模拟信号转化为数字信号
1.AD0832介绍
CS———片选端,低电平有效。
CH0,CH1———两路模拟信号输入端。
D I———两路模拟输入选择输入端。
DO———模数转换结果串行输出端。
CLK———串行时钟输入端。
VCC/REF———正电源端和基准电压输入端。
GND———电源地
ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。
2.实现模数转换的方法
正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能
当CS由高变低时,选中ADC0832。在时钟的上升沿,DI端的数据移入ADC0832内部的多路地址移位寄存器。在第一个时钟期间, DI为高, 表示启动位,紧接着输入两位配置位。当输入启动位和配置位后,选通输入模拟通道,转换开始。转换开始后,经过一个时钟周期延迟, 以使选定的通道稳定。ADC 0832 接着在第4个时钟下降沿输出转换数据。数据输出时先输出最高位(D7~D0) ;输出完转换结果后,又以最低位开始重新输出一遍数据(D7 ~D0) ,两次发送的最低位共用。当片选CS为高时,内部所有寄存器清0,输出变为高阻态。如果要再进行一次模/数转换,片选CS必须再次从高向低跳变,后面再输入启动位和配置位。
本次实验中我们使用CH1通道输入模拟信号,因此实验中控制ADC0832的时序图如下:
三、通过AT89S52对数字信号作处理
1.AT89S52介绍
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89S52的一些特殊功能口,如下表所示:
口管脚 备选功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
2. 数据处理:
题目要求为:温度精度达到0.5度,测量范围零下10度到零上100度。
我们需要三个LED,前两个显示温度的整数部分,第三个显示小数部分。
把得到的电压电流信号输入0832以后得到数字信号,即为要采样接收的数据,根据要求,所测温度为-10℃~100℃,则温度每变化一摄氏度输出电压变化10mv,又根据0度时输出电压为2.73V得出电压的变化范围是2.63V-3.73V。这是采集到的数据为:
2.73*255/5=139
那么实际的温度计算公式为:
(采集到的数据-139)*5*100/255
温度为正时:高八位放在B中,除以10得到的商为十位数,余数为各位;低八位放在A中,除以10,商为第一位小数,余数为第二位小数。
温度为负值:高八位的数小于10放在个位数字,十位数显示符号,得到的低八位放在A中,除以10,商为第一位小数,余数为第二位小数。
由此就得到了所要显示的温度。
四、通过数码管显示电路显示温度
1. 74HC245介绍
74HC245总线驱动器,典型的TTL型三态缓冲门电路,其作用为,信号功率放大。74HC245管脚图:
74HC245引脚定义:
第1脚DIR,为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。
第2-9脚“A”信号输入输出端,A1=B1……A8=B8,A1与B1是一组,如果DIR=“1”OE=“0”则A1输入B1输出,其它类同。如果DIR=“0”OE=“0”则B1输入A1输出,其它类同。 第11~18脚“B”信号输入输出端,功能与“A”端一样。
第19脚OE为使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。
第10脚GND,电源地;第20脚VCC,电源正极。
实验过程中我们使用的为从“A”到“B”传输数据。
2.四位七段数码管
四位七段数码管原理图如上所示,焊接电路时要格外注意各个管脚的位置。
第二章 仿真
在了解了温度计的具体工作流程之后,编程的问题主要集中在将AD0832转换后的数字信号显示到零下10度到零上100度,温度精度达到0.5度。我们将
第一个LED的字形地址偏移量放在40H,将40H送入P0.5;
第二个LED的字形地址偏移量放在41H,将41H送入P0.4;
第三个LED的字形地址偏移量放在42H,将42H送入P0.3;
由此得到的整体流程框架为:
初始化AD采样八位数据数据转化温度显示循环AD采样……
具体程序:
LED1 EQU 40H ;第一个LED的字形地址偏移量放在40H
LED2 EQU 41H ;第一个LED的字形地址偏移量放在41H
LED3 EQU 42H ;第一个LED的字形地址偏移量放在42H
ADC0832DI BIT P3.0 ;伪指令
ADC0832DO BIT P3.1
ADC0832CLK BIT P3.2
ADC0832CS BIT P3.3
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV P0,#00H
MOV P2,#00H
MOV B, #00H
HERE: LCALL ADCON;调用AD转换程序
LCALL BCDCON ;调用数值转换程序
LCALL DISPLAY ;调用显示程序
LJMP HERE
ADCON:
SETB ADC0832DI ;初始化通道选择
NOP
NOP
CLR ADC0832CS ;拉低/CS端
NOP
NOP
SETB ADC0832CLK ;拉高CLK端
NOP
NOP
CLR ADC0832CLK ;拉低CLK端,形成下降沿
SETB ADC0832DI
NOP
NOP
SETB ADC0832CLK ;拉高CLK端
NOP
NOP
CLR ADC0832CLK ;拉低CLK端,形成下降沿2
CLR ADC0832DI ;1-0选择0通道
NOP
NOP
SETB ADC0832CLK ;拉高CLK端
NOP
NOP
CLR ADC0832CLK ;拉低CLK端,形成下降沿3
SETB ADC0832DI
NOP
NOP
MOV R7,#8 ;准备送下后8个时钟脉冲
AD1:
MOV C,ADC0832DO ;接收数据
MOV ACC.0,C
RL A ;左移一次
SETB ADC0832CLK
NOP
NOP
CLR ADC0832CLK ;形成一次时钟脉冲
NOP
NOP
DJNZ R7,AD1 ;循环7次
MOV C,ADC0832DO
MOV ACC.0,C
SETB ADC0832CS ;拉高/CS端
CLR ADC0832CLK ;拉低CLK端
SETB ADC0832DO ;拉高数据端,回到初始状态
MOV 30H,A ;数据放在30H
RET
BCDCON:CLR C
SUBB A,#10001011B ;与0摄氏度作判断
JNC ABOVEZERO ;有借位往下执行,没有借位跳转ABOVEZERO
BELOWZERO:
MOV A,#10001011B
SUBB A,30H
ADD A,#01H
MOV B,#05H
MUL AB
MOV B,#64H
MUL AB
MOV R1,A
MOV A,B
MOV B,#0AH
DIV AB
MOV LED1,#0AH
MOV LED2,B
MOV A,R1
MOV B,#64H
MUL AB
MOV A,B
MOV B,#0AH
DIV AB
SJMP PP
MOV LED3,A
RET
ABOVEZERO:
MOV B,#05H
MUL AB
MOV B,#64H
MUL AB
MOV R1,A
MOV A,B
MOV B,#0AH
DIV AB
MOV LED1,A
MOV LED2,B
MOV A,R1
MOV B,#64H
MUL AB
MOV A,B
MOV B,#0AH
DIV AB
PP:CLR C
CJNE A,#05H,DE
DE: JC WE
MOV A,#00H
SJMP ZC
WE: MOV A,#5H
ZC:
CLR B
MOV LED3,A
MOV LED4,B
RET
DISPLAY: ;显示子程序
SETB P0.2
SETB P0.3
SETB P0.4
SETB P0.5
MOV DPTR,#TAB
MOV A,40H
MOVC A,@A+DPTR ;查字形表
MOV P2,A ;P0口作字形
CLR P0.5
ACALL DELAY
SETB P0.5
MOV DPTR,#TAB
MOV A,41H
MOVC A,@A+DPTR ;查字形表
MOV P2,A
SETB P2.7
CLR P0.4
ACALL DELAY
SETB P0.4
MOV DPTR,#TAB
MOV A,42H
MOVC A,@A+DPTR ;查字形表
MOV P2,A
CLR P0.3
ACALL DELAY
SETB P0.3
RET
DELAY: MOV R7,#03H
DELAY1: MOV R6,#0FFH
DELAY2: DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
RET
在仿真成功之后,我们依照原理图进行了实际电路的焊接,前几次完成焊接之后都没有相应的结果显示,在反复检查之后我们确认了电路连接和焊点都是没有任何问题的,所以我们确定问题出在了芯片上,于是我们依次更换了AD590、AD0832依然没有解决问题。于是,我们最终将问题归结于单片机上,在我们将AT89S52更换为SCT89C52之后,终于成功的显示了程序。根据我们的分析,应该是在烧制程序的时候出了问题,很可能程序根本没有烧进去。
另外的问题就是芯片欠缺的问题,在实验室中我们缺少各种芯片,甚至连焊锡丝、导线都没有,最终我们只有自己去购买,尤其是AD590,实验室根本没有这个元件,而我们自己购买的AD590在使用了几次之后损坏掉了。所以最终的成品我们只能用滑动变阻器来代替它。
最终的成品可以通过改变滑动变阻器的阻值来改变显示的温度,温度的精度在0.5摄氏度。
通过这次课程设计,我们从硬件层面上切实感受到了单片机的实用性,单片机使得原本死板的电路电子芯片有了组合的灵活性,将一个个功能固定的模块整合到了一起形成了一个整体。由于一开始迟迟没有得出仿真结果,我们在仿真成功之后便直接开始了电路板的焊接,焊接完毕之后却调试了两天都没有出结果,不得已我们只有采购新的材料又使用面包板制作了一块电路,并在成功之后又排查出了焊接电路的问题,从一个虚焊的焊点到没有限流电阻导致的数码管烧毁,我们感觉到从理论到实际确实不是一个简单的过程,需要一步步始终保持严谨,就整个实验过程来说,我们首先进行的是整个课设的开展设计,我们商量好首先将电路进行分析,然后去查阅资料了解每个芯片的功能进而了解整个电路的工作原理,然后在再进行仿真的设计及调试和运用汇编语言实现程序的编写,在仿真电路调试完成后再将程序在硬件上进行调试。
童老师在第一次课设说明的时候让我们对于课设没有要求的部分发挥自己的创造性,我们一开始便查找了不少资料,加深了对adc0832和ad590的功能理解,但是由于迟迟没有得出仿真结果,我们在仿真成功之后便直接开始了电路板的焊接,焊接完毕之后却调试了两天都没有出结果,不得已我们只有采购新的材料又使用面包板制作了一块电路,并在成功之后又排查出了焊接电路的问题,从一个虚焊的焊点到没有限流电阻导致的数码管烧毁,我们感觉到从理论到实际确实不是一个简单的过程,需要一步步始终保持严谨,我还记得当数码管上的数字用来代替ad90的滑阻以0.5的精度变化时心里兴奋的感觉,从一开始涉及到的时候,对各芯片的工作原理都不尽了解到后来理清整个电路的设计思路和编程思想,真的认识只有实践才能检验自己理论的扎实与否,同样只有打下了扎实的知识基础才有可能在实践中有所成就,通过这次课设我真的认识到离真正的科研,真正的发明自己在专业知识上还差了太远,但同样也发现了自己身上原先欠缺的东西
在调试中,我们遇到了操作不慎把芯片烧毁的情况,也遇到过显示不成功,出现闪烁的现象,也遇到了温度偏差过大或者显示不稳定的问题,但是我们经过不断地调试和请教老师并且和同学进行讨论,最后都将问题解决了,我觉得整个课设中最难的就是调试过程而且收获最大的也是调试过程,是调试这个过程让我们对单片机或者说汇编语言的工作原理进行深究并且把死的知识进行了灵活地运用,我觉得解决问题的能力的提高是我做这次课设最大的收获。
从一开始涉及到的时候,对各芯片的工作原理都不尽了解到后来理清整个电路的设计思路和编程思想,真的认识只有实践才能检验自己理论的扎实与否,同样只有打下了扎实的知识基础才有可能在实践中有所成就。
[1]李维波,MATLAB在电气工程中的应用,中国电力出版社,2007
[2]谭浩强,C程序设计,清华大学出版社,2010
[3]郭天祥,新概念51单片机C语言教程,电子工业出版社,2009
[4]康华光,电子技术基础,高等教育出版社,2005
附录1:元器件清单
AT89S52 | 1 |
AD590 | 1 |
AD0832 | 1 |
74HC245 | 2 |
四位七段数码管 | 1 |
8脚排阻 | 2 |
晶振 | 1 |
运算放大器 | 1 |
二极管 | 2 |
电阻、电容 | 若干 |
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |