机械制造及其自动化专业毕业论文基于单片机的温度报警器设计与实现文档格式.docx
《机械制造及其自动化专业毕业论文基于单片机的温度报警器设计与实现文档格式.docx》由会员分享,可在线阅读,更多相关《机械制造及其自动化专业毕业论文基于单片机的温度报警器设计与实现文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
(2)系统的硬件结构几配置,主要软件的功能、结构几框图。
(3)保证性能指标要求的技术措施。
(4)抗干扰性和可靠性设计。
(5)工艺要求
温度数码管显示。
调节温度的超调量小于30%。
实现温度闭环控制,控制温度误差范围≤±
0.1℃。
温度范围:
-50℃~125℃。
供电电压:
交流5V。
考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以使用热敏电阻之类的器件利用其感温效应,感温电路比较麻烦,进行A/D转换,才可以满足设计要求。
由于本设计是测温电路,首先要选用高性能的AT89C51单片机,保证在恶劣的工业环境下能正常运行。
单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
测温传感器使用二极管结电压变化的数值来转化成温度的变化,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。
图2.1 总体设计方框图
三、设计内容
3.1硬件电路工作原理
3.1.151单片机简介:
51单片机是对目前所有兼容Intel8031指令系统的单片机的统称。
该系列单片机的始祖是Intel的8031单片机,后来随着Flashrom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。
目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。
51单片机是基础入门的一个单片机,还是应用最广泛的一种。
需要注意的是52系列的单片机一般不具备自编程能力。
当前常用的51系列单片机主要产品有:
*Intel的:
80C31、80C51、87C51,80C32、80C52、87C52等;
ATMEL的:
89C51、89C52、89C2051等8位CPU·
4kbytes程序存储器(ROM)(52为8K)
256bytes的数据存储器(RAM)(52有384bytes的RAM)
32条I/O口线·
111条指令,大部分为单字节指令
21个专用寄存器
2个可编程定时/计数器·
5个中断源,2个优先级(52有6个)
一个全双工串行通信口
外部数据存储器寻址空间为64kB
外部程序存储器寻址空间为64kB
逻辑操作位寻址功能·
双列直插40PinDIP封装
单一+5V电源供电
CPU:
由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:
用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:
用以存放程序、一些原始数据和表格;
I/O口:
四个8位并行I/O口,既可用作输入,也可用作输出;
T/C:
两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
最高振荡频率为12M
图3.151单片机
3.1.2管脚说明:
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口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器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:
来自反向振荡器的输出。
3.1.3单片机的时钟电路
图3.3片内振荡电路的时钟电路
AT89C1单片机内部的振荡电路是一个高增益反向放大器,引线XTAL1和XTAL2分别是放大器的输入端和输出端。
单片机内部虽然有振荡电路,但要形成时钟,外部还需附加电路。
AT89C51的时钟产生方式有两种:
内部时钟电方式和外部时钟方式。
由于外部时钟方式用于多片单片机组成的系统中,所以此处选用内部时钟方式。
即利用其内部的振荡电路在XTAL1和XTAL2引线上外接定时元件,内部振荡电路产生自激振荡。
最常用的是在XTAL1和XTAL2之间接晶体振荡器与电路构成稳定的自激振荡器,如图2.13电路所示为单片机最常用的时钟振荡电路的接法,其中晶振可选用振荡频率为6MHz的石英晶体,电容器一般选择22μF.
3.1.4单片机的复位电路
图3.4单片机的复位电路
本设计中AT89C52是采用上电自动复位和按键复位两种方式。
最简单的复位电路如图2.13所示。
上电瞬间,RC电路充电,RST引线端出现正脉冲,只要RST端保持10ms以上的高电平,就能使单片机有效地复位。
其中R1和R2分别选择200Ω和1KΩ的电阻,电容器一般选择22μF。
3.1.5传感器数据采集电路
图3.9电源供电方式
DS18B20详细引脚功能描述,引脚功能描述。
1GND接地地信号
2DQ数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源。
3VDD可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地
由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:
初始化时序、读时序、写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
传感器数据采集电路主要指DS18B20温度传感器与单片机的接口电路。
DS18B20可以采用两种方式供电,一种是采用电源供电方式,如图2.15所示,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。
另一种是寄生电源供电方式,如图2.15所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。
采用寄生电源供电方式时VDD端接地。
由于单线制只有一根线,因此发送接口必须是三态的。
考虑到实际应用中寄生电源供电方式适应能力差且易损坏,此处采用电源供电方式,I/O口接单片机的P2.0口。
DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;
高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。
器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。
计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。
其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。
3.1.6AT89C51的最小应用系统
AT89C51是片内有程序存储器的单片机,要构成最小应用系统时只要将单片机接上外部的晶体或时钟电路和复位电路即可,如图2.14所示。
这样构成的最小系统简单可靠,其特点是没有外部扩展,有可供用户使用的大量的I∕O线。
图3.5AT89C51单片机构成的最小系
3.2程序设计
3.2.1主程序
系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。
3.21主程序流程图图3.22读温度流程图
3.2.2读温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
其程序流程图如图8示
图3.13温度转换流程图
3.2.3温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流程图如上图,图3.14所示
3.2.4计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图3.15所示
图3-14计算温度流程图图3-15显示数据刷新流程图
3.2.5程序
#include<
reg52.h>
18b20twj.h>
intrins.h>
charcount,mi,fe,shz;
sbitg1=P2^7;
sbitg2=P2^6;
sbitg3=P2^5;
sbitg4=P2^4;
sbitlv=P2^2;
sbitjin=P3^3;
sbitjia=P3^4;
sbitjian=P3^5;
uintshiwen;
uintzuigao=350;
intzuidi=300;
ucharflag=0;
//记录第一个按键次数flag=0正常1最高2最低
ucharflag2=0;
//记录第四个按键次数flag2=0正常1调节小时2调节分钟
uchartableshu[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xe0,0xff,0xf7};
//0123456789灭
uchartableshudi[]={0x08,0xcb,0x12,0x82,0xc1,0x84,0x04,0xca,0x00,0xc0,0xff};
/*报警*/
voidbaojing()
{
if((shiwen<
zuigao)&
&
(shiwen>
zuidi))
lv=0;
else
lv=1;
}
voiddis(ucharba,ucharsh,ucharge,uchardi)
g1=0;
P0=tableshu[ba];
delay1(5);
g1=1;
P0=tableshu[10];
g2=0;
P0=tableshu[sh];
g2=1;
g3=0;
P0=tableshudi[ge];
g3=1;
P0=tableshudi[10];
g4=0;
P0=tableshu[di];
g4=1;
voiddisdi(ucharba,ucharsh,ucharge,uchardi)
P0=tableshudi[ba];
P0=tableshudi[sh];
P0=tableshudi[di];
voidbiaozhun()
if(jin==0)
while(!
jin);
flag++;
if(flag==3)
flag=0;
}/*调幅值*/
voidtfz()
ucharba,sh,ge,di;
if(flag==1)
{
while
(1)
ba=zuigao/1000;
sh=zuigao/100%10;
ge=zuigao/10%10;
di=zuigao%10;
dis(ba,sh,ge,di);
if(jia==0)
zuigao=zuigao+10;
jia);
if(jian==0)
zuigao=zuigao-10;
jian);
biaozhun();
if(flag!
=1)
break;
if(flag==2)
ba=zuidi/1000;
sh=zuidi/100%10;
ge=zuidi/10%10;
di=zuidi%10;
zuidi=zuidi+10;
zuidi=zuidi-10;
=2)
voidmain(void)
ucharTL;
//储存暂存器的温度低位
ucharTH;
//储存暂存器的温度高位
uintTN;
//储存温度的整数部分
ucharTD;
//储存温度的小数部分
ucharba,sh,ge,di,ba1,sh1,ge1,di1;
bitflag1;
//判断显示正负0负1正
//延时5ms给硬件一点反应时间
while
(1)//不断检测并显示温度
init();
//读温度准备
if(flag1==1)
elsedis(11,sh,ge,di);
TL=ReadOneChar();
//先读的是温度值低位
TH=ReadOneChar();
//接着读的是温度值高位
if((TH&
0xf8)!
=0x00)//判断高五位得到温度是负
flag1=0;
TL=~TL;
//取反
TH=~TH;
TL=TL+1;
//低位加1
TN=(TH*256+TL)*0.625;
//实际温度值10倍=(TH*256+TL)*0.625,
if(TN%160==0)
TN=TN+160;
sh=TN/100%10;
ge=TN/10%10;
di=TN%10;
dis(11,sh,ge,di);
//显示温度
else//判断高五位得到温度是正
flag1=1;
//这样前几位是温度的整数部分,最后一位是温度的小数部分
ba=TN/1000;
//显示温度的整数部分
}
shiwen=TN;
tfz();
baojing();
四、设计制作与检测
4.1电路板的设计制作
电路板的设计与制作是整个电路制作过程中比较重要的一步,如果电路板做不好,再好的电路设计也不行。
下面就对简单电路板的设计及制作过程做一个简单的介绍。
1、利用Protel99SE画原理图。
在画原理图的时候为了电路板比较好看,要注意布局,同时还得注意元件封装,命名等。
画好原理图后要对其进行电气检测,检查原理图是否有错,同时还要创建网络表为下一步的工作做好准备。
2、PCB版图的设计。
在对PCB图设计时首先要添加封装库,这样原理图中给予的封装才能有效,然后调入网络表看原理图的封装,命名等是否有错,如果没错便可进行下一步操作。
对其进行布线,首先先对布线规则作一些必要的设置,如焊盘的大小,导线的粗细等。
做好这些设置后便可进行自动布线,自动布线后如果布线不是很理想还可用手动布线进行手动修改,这样PCB图就画好了。
3、电路板的制作。
把设计布局好的PCB图打印出来之后,然后进行压板、腐蚀、钻孔。
注意,腐蚀之前要检查是否有断线及焊盘的脱落等。
4、元件的焊接。
元件焊接的时候要先查看跳线,首先焊接所有的跳线,其次再焊接分离元件,最后焊接集成块和外接的引线。
当然为了美观在布线中最好不要出现跳线。