序
🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:基于51单片机的温度控制系统的设计
1 温度控制系统的硬件设计
1.1 AT89S51单片机简介
AT89S51单片机是低功耗的,具有4KB在线可编程FLASH存储器的单片机。它与通用AT89C51单片机的指令系统和管脚兼容。
AT89S51具有如下特征:
n片内程序存储器含有4KB的Flash存储器,允许在线编程,擦写周期可达1000次;
n片内数据存储器含128字节的RAM;
nI/O口具有32根可编程I/O口;
n具有两个16位可编程定时器;
n中断系统是具有6个中断源,5个中断矢量,2级中断优先级的中断结够;
n串行口是一个全双工的串行通信口;
n具有两个数据指针DPTR0 DPTR1;
n低功耗节电模式有空闲模式和掉线模式;
n包含3级程序锁定位;
nAT89S51的电源电压为4.0—5.5V,AT89S51的电源电压为2.7—4.0V;
n振荡器频率0-33MHZ(AT89S51),0-16MHZ(AT89LS51);
n具有片内看门狗定时器;
n具有断电标志;
1.1.1 端口功能简介
P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动 8个 TTL 逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0 具有内部上拉电阻。在Flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。(程序校验时,需要外部上拉电阻)
P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P1 输出缓冲器能驱动 4个TTL 逻辑电平。对 P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX)。
P2 口:P2 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动 4个TTL 逻辑电平。对 P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉电阻发送“1”。在使用8 位地址(如 MOVX @RI)访问外部数据存储器时,P2 口输出 P2 锁存器的内容。在Flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动 4个TTL 逻辑电平。对 P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。
除了作为I/O使用外(内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置。
RST: 复位输入。晶振工作时,RST 脚持续 2个机器周期高电平将使单片机复位。看门狗计时完成后,RST脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。
ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低 8 位地址的输出脉冲。在Flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置 “1”,ALE操作将无效。这一位置 “1”, ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
EA/VPP:访问外部程序存储器控制信号。为了能从 0000H 到 FFFFH 的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在Flash编程期间,EA也接收12伏VPP电压。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。
元器件的选择
1,AD590的性能特点与工作原理
AD590管脚封装图
AD590的基本电路图
工作原理
AD590的内部电路如电路图1.1所示。芯片中的R1 R2是 采用激光修正的校准电阻,它能使298.2K下的输出电流恰好为298.2uA首先有晶体VT8 VT11产生热力学温度成正比的电压信号。在通过R5 R6把电压信号转换成电流信号。保证良好的温度特性,R5 R6的电阻温度系数应非常小,这里采用激光修正的SICr薄膜电阻其电阻温度系数低至(-30~-50)*10—6/℃。VC10的集电极电流能够跟随VT9和VT11的集电极电流的变化,使总电流达到额定值。R5和R6也需要在25℃的标准温度下校准。
AD590等效于一个高阻抗的恒流源,其输出阻抗>10M欧姆,能大大减少因电源电压波动而产生的测温误差。例如,当电源电压从5V变化到10V时,所引起的电流最大变化量仅为1uA,等价于1℃的测温误差。
AD590的工作电压为+4~+30V,测温范围是测量范围是-55— +150℃,对应于热力学温度T每变化1K,输出电流就变化1uA。在298.15K(对应于25.15℃)时输出电流恰好等于298.15uA。这表明,其输出电流Io(uA)热力学温度T(K)严格成正比。电流温度系数K1的表达式为
K1=IoT=(3k/qr)ln8
中的k、q分别为波耳兹曼常数和电子电量,R是内部集成化电阻。式中的ln8表示内部晶体管VT9与VT11的发射结等效面积之比r=S9/S11=8倍,然后再取自然对数值。将k/q=0.0862Mv/K,R=538欧姆代入式中得到
K1=Io/T=1.000uA/K
因此,输出电流的微安数就代表着被测温度的热力学温度值。AD590的电流-温度(I-T)特性曲线如图2-1-3所示。热力学温标(K)与摄氏温标(℃)、华氏温标(℉)的换算关系如图2-1-4所示,有关系式
t(℃)=T(K)-273.15
t(℉)=(9/5)*t(℃)+32 。
2 ADC0809芯片
ADC0809采用逐次逼近式A/D转换原理,可实现8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道地址锁存与译码电路,转换时间为100us左右。ADC0809内部中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换芯片进行转换。地址锁存与译码电路完成对A、B、C 3个地址位进行锁存与译码,其译码输出用于通道选择。8位A/D转换器是逐次逼近式,由控制与时序电路、逐次逼近寄存器、树状开关以及256欧姆电阻阶梯网络组成。输出锁存器用于存放和输出转换得到的数字量。ADC0809芯片为28引脚双列直插式封装。
ADC0809芯片引脚的功能:
IN7-IN0:模拟量输入通道。ADC0809对输入模拟量的要求主要有:信号单极性,电压范围为0-5V。
A、B、C:地址线,模拟通道的选择信号。A为地位地址,C为高位地址。
ALE:地址锁存允许信号。
START:转换启动信号。START上跳沿时,所有内部寄存器清0;START下跳沿时,开始进行A/D转换;在A/D转换期间,START应保持低电平。
D7-D0:数据输出线。为三态缓冲输出形式,可以与单片机直接相连。D0为最低位,D7为最高位。
OE:输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高电阻;OE=1输出转换得到的数据。
CLK:外部时钟信号引入端。ADC0809的内部没有时钟电路,所需时钟信号由外界提供。
EOC:转换结束信号。EOC=0,正在进行转换;EOC=1,转换结束。使用中该状态信号即可以作为查询的状态标志,又可以作为中断请求信号使用。
VCC:+5V电源。
VREF:参考电源。其典型值为+5V。
ADC0809与AT89S51接口
A/D转换器芯片与单片机的接口是数字量输入接口,其原理与并行I/O输入接口相同,需要有三态缓冲功能,即A/D转换器芯片须通过三态门“挂上”数据总线。ADC0809芯片已具有三态输出功能,因此,ADC0809与AT89S51的接口比较直接。
三,单元电路设计及软件设计
程序设计内容:ADC0809的CLK子那好由单片机的P3.3管脚提供。由于AD590的温度变化范围在-55℃~+150℃之间,经过10K电阻之后采样到的电压变化在2.182V~4.232之间,不超过5V电压所表示的范围,因此参考电压取电源电压VCC,(实测VCC=4.70V)。由此可计算出经过A/D转换之后的摄氏温度显示的数据为:
如果 (D×2350/128)<2732,则显示的温度为-(2732-(D×2350/128))
如果(D×2350/128)≥2732,则显示的温度为+((D×2350/128)-2732)
#include <AT89X52.H>
sbit START = P3^0 ; //地址锁存、转换信号
sbit OE = P3^1 ; //输出允许信号
sbit EOC = P3^2; //转换结束信号
int code shu[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0x8e}; //0-9数字码
unsigned int i;
char d;
/*************显示程序*************/
xianshi()
{
char k;
P1=shu[i%10]; //小数
P2=0x01;
for(k=0;k<100;k++);
P1=shu[i/10%10]&0x7f; //个位
P2=0x02;
for(k=0;k<100;k++);
P1=shu[i/100]; //十位
P2=0x04;
for(k=0;k<100;k++);
if(d==1) //判断正负值
{P1=0xbf;
P2=0x08;
for(k=0;k<20;k++);
}
P1=0xff;
}
main()
{int j;
while(1)
{
OE=1; //允许输出
START=1; //寄存器清零
for(j=0;j<20;j++);
START=0; //地址锁存、开始进行A/D转换
while(EOC==0); //判断转换是否完成
{i=P0;
if((i*184)<27320)
{d=1;
i=27320-(i*184); // -(2732-(i*2350/128))
i/=100;
}
else
{d=0;
i=(i*184)-27320; // +((i*2350/128)-2732)
i/=100; }
}
for(j=0;j<200;j++)
xianshi(); // 显示
}
}
四,总体电路图
二,调试过程及测试结果
我们组仔细的检查了硬件部分,没有错误 。 我们把焊好的硬件部分通过计算机把编好的程序用单片机传送进去。这样完成了数字温度计的制作,然后用一字螺丝刀对滑动变阻器进行调试,在第一次时候我们没有达到预订的要求 温度的变化范围变化太大,为了达到温度的变化范围我们换了小阻值的电阻,由于电流过大把电阻烧了。最后经过几次的努力达到了技术指标的要求温度范围为-23.0— +19.6℃,最终我们完成了数字温度计的全部制作。
如果学弟学妹们在毕设方面有任何问题,随时可以私信我咨询哦,有问必答!学长专注于单片机相关的知识,可以解决单片机设计、嵌入式系统、编程和硬件等方面的难题。
愿毕业生有力,陪迷茫着前行!