资源描述
Harbin Institute of Technology
课程设计阐明书(论文)
课程名称: 课程设计 І
设计题目:数字温度计设计
院 系:电信学院通信工程系
班 级: 0805103
设 计 者: 潘思迈
学 号:
指引教师: 尹振东
设计时间:4月15日至6月6日
哈尔滨工业大学
4月15日星期五
哈尔滨工业大学课程设计任务书
姓 名:潘思迈 院 (系):电信学院通信工程系
专 业:通信工程 班 号:0805103
任务起至日期: 4 月15 日至 年 6月5日
课程设计题目:
数字温度计设计
已知技术参数和设计规定:
依照给定重要功能规定和重要元器件,设计一种完整数字温度计。
(1) 自制稳压电源
(2) 被测温度范畴在0至200°C
(3) 用4位数码管显示温度值
工作量:
1. 查找资料
2. 设计论证方案
3. 详细各个电路选取、元器件选取和数值计算
4. 详细阐明各某些电路图工作原理
5. 绘制电路原理图
6. 绘制印刷电路图
7. 元器件列表
8. 编写调试操作
9. 打印论文
工作筹划安排:
1. 查找资料、设计论证方案详细各个电路选取、元器件选取和数值计算绘制电路原理图一周
2. 绘制印刷电路图、元器件列表一周
3. 编写调试操作、打印论文 一周
同组设计者及分工:每人一组单独完毕
指引教师签字___________________
4月13日
教研室主任意见:
教研室主任签字___________________
4月13日
数字温度计设计
摘 要 :
本论文简介了一种以单片机为重要控制器件,以铂热电阻Pt100为温度传感器新型数字温度计。重要涉及硬件电路设计和系统程序设计。硬件电路重要涉及主控制器,测温电路和显示电路等,主控制器采用单片机80C52。系统程序重要涉及主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。此外,还简介了系统调试和性能分析。
由于采用了铂热电阻Pt100作为检测元件,与老式温度计相比,本数字温度计减少了外部硬件电路,具备低成本和易使用特点。还可以在高温报警、远距离多点测温控制等方面进行应用开发,具备较好发展前景。
核心词:
单片机,主控制器,温度传感器,铂热电阻Pt100,单片机80C52,数字温度计
设计任务与规定:
已知技术参数和设计规定:
依照给定重要功能规定和重要元器件,设计一种完整数字温度计
(1) 自制稳压电源
(2) 被测温度范畴在0至200°C
(3) 用4位数码管显示温度值
一.温度传感器设计
1.稳压源设计
恒流源电路作用是提供一种不随负载变化电流,这样才干使该电流I通过PT100后让阻值变化转化为电压变化,从而输出变化电压信号。因而恒流源输出电流稳定限度将直接决定温度测量精度,本设计中使用如图2所示恒流源,输出电流为12mA。
2. 铂热电阻Pt100
铂电阻是用很细铂丝(Ф0.03~0.07mm)绕在云母支架上制成,是国际公认高精度测温原则传感器。由于铂电阻在氧化性介质中,甚至高温下其物理、化学性质都非常稳定,因而它具备精度高、稳定性好、性能可靠特点。因而铂电阻在中温(-200~650℃)范畴内得到广泛应用。当前市场上已有用金属铂制作成原则测温热电阻,如Pt100、Pt500、Pt1000等。它电阻—温度关系线性度非常好,如图1所示是其电阻—温度关系曲线,在-200~650℃温度范畴内线性度已经非常接近直线。铂电阻阻值与温度关系可以近似用下式表达:
在0~650℃范畴内:
Rt =R0 (1+At+Bt2)
在-190~0℃范畴内:
Rt =R0 (1+At+Bt2+C(t-100)t3)
式中A、B、C 为常数,
A=3.96847×10-3;
B=-5.847×10-7;
C=-4.22×10-12;
二.模数转换
TLC0832是广泛应用8位A/D转换器。TLC0832是双通道输入,并且可以软件配备成单端或差分输入。串行输出可以以便和原则移位寄存器及微解决器接口。参照电压为5V,不需要进行调零,使用非常以便,可以和任何型号微解决器进行连接使用,最小功耗为15mW,转换时间为32us,最小误差为±1LSB。ADC0832为8位辨别率A/D转换芯片,其最高辨别可达256级,可以适应普通模仿量转换规定。其内部电源输入与参照电压复用,使得芯片模仿电压输入在0~5V之间。芯片转换时间仅为32uS,具备双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立芯片使能输入,使多器件挂接和解决器控制变得更加以便。
芯片接口阐明:
· CS_ 片选使能,低电平芯片使能。
· CH0 模仿输入通道0,或作为IN+/-使用。
· CH1 模仿输入通道1,或作为IN+/-使用。
· GND 芯片参照0 电位(地)。
· DI 数据信号输入,选取通道控制。
· DO 数据信号输出,转换数据输出。
· CLK 芯片时钟输入。
· Vcc/REF 电源输入及参照电压输入(复用)。
三. 单片机与显示某些
本模块使用80C52单片机,位移位存储总线寄存器CD4094和四位数码管构成单片机重要实现三方面功能:
管脚功能: VCC:供电电压。
GND:接地。
P0口:P0口为一种8位漏级开路双向I/O口,每脚可吸取8TTL门电流。
P1口:P1口是一种内部提供上拉电阻8位双向I/O口,P1口缓冲器能接受输出4TTL门电流
P2口:P2口为一种内部上拉电阻8位双向I/O口,P2口缓冲器可接受,输出4个TTL门电流。
P3口:P3口管脚是8个带内部上拉电阻双向I/O口,可接受输出4个TTL门电流。 XTAL1:反向振荡放大器输入及内部时钟工作电路输入。
XTAL2:来自反向振荡器输出。
PSEN:外部程序存储器选通信号。
四.原理图
五.PCB图
六.调试与问题分析
程序编写完毕后对其编译调试。设计采用Keil C作为编译环境。PT100校正:这个可以运用温度计和万用表就可以完毕,运用温度计实际测得温度值和运用万用表测得此时PT100实际阻值,然后以此作为基准点进行背面设计。显示电路调试:使用函数信号发生器产生特定信号,然后再将其输入到AD模仿信号输入端,观测数码管显示状况。
七. 元件清单
元器件
规格
数量
元器件
规格
数量
电阻
集成电路
2K
1
CD4094
4
2K
1
AT89C52
1
200
2
LM7805
1
PT100
1
LTC0832
1
电容
数码管
u
1
7SEGCOMA
4
0.1u
1
200u
1
CRYSTAL
1
0.1u
1
整流桥
50p
2
2W02G
1
三极管
BD140
2
TRAN-2P2S
1
八.源程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define _rrca_() CY = ACC & 0x01 ;产生RRC A指令
#define _rlca_() CY = ACC & 0x80 ;产生RLC A指令
sbit bADcs=P1^4;
sbit bADcl=P1^5;
sbit bADda=P1^6;
sbit flag=P1^7;
sbit str=P2^7;
sbit d=P2^6;
sbit clk=P2^5;
bit choose=0;
unsigned char data1;
unsigned char count;
unsigned char cycle;
uint ge,xiao1,xiao2;
unsigned long data2;
const uchar
table1[17]={0x81,0xed,0x43,0x49,0x2d,0x19,0x11,0xcd,0x01,0x09,0x71,0x31,0x93,0x61,0x13,0x17,0xff};
const uchar
table2[17]={0x80,0xec,0x42,0x48,0x2c,0x18,0x10,0xcc,0x00,0x08,0x70,0x30,0x92,0x60,0x12,0x16,0xff};
uchar buffer[4]={0x00,0x00,0x00,0x00};
void Delayus(uchar i) ;延时
{
while(--i);
}
void display(void)
{
uchar bit_count=0;
uchar table_counter=0;
uchar byte_counter=0;
uchar temp_i=0;
buffer[0]=xiao2;
buffer[1]=xiao1;
buffer[2]=ge;
buffer[3]=0x00;
//led_str_off;//先清零
str=0;
//led_clk_off;
clk=0;
for(byte_counter=0;byte_counter<4;byte_counter++)
{
bit_count=8;
if(byte_counter==2)temp_i=table2[buffer[byte_counter]];
else
temp_i=table1[buffer[byte_counter]];
nop;
while(bit_count>0)
{
if((temp_i&0x80)==0)
{
//led_d_off;
d=0;
}
else
{
//led_d_on;
d=1;
}
temp_i=(temp_i<<1);
nop;
//led_clk_on;
clk=1;
// nop;
//led_clk_off;
clk=0;
// nop;
bit_count--;
}
}
//led_str_on;
str=1;
}
void ad()
{
choose=0;
count = 0;
bADcs = 0;当TLC0832未工作时其CS输入端应为高电平,此时芯片禁用.
bADcl = 0;
bADda = 1;在第1 个时钟脉冲下沉之前DI端必要是高电平.
bADcl = 1;
bADcl = 0;pulse 1 down
bADda = 1;
bADcl = 1;bADcl = 0;//pulse 2 down
if(choose == 0)
bADda = 0;
else
bADda = 1;
bADcl = 1;bADcl = 0;//pulse 3 down
bADcl = 1;bADcl = 0;//pulse 4 down
//bADcl = 1;
for(cycle = 8;cycle > 0;cycle-- )
{
bADda = 1;
//bADcl = 0;//pulse
bADcl = 1;
CY = bADda;
_rlca_(); //RRC A
bADcl = 0;//pulse
}
data1= ACC;
for(cycle = 8;cycle > 0;cycle-- )
{
bADda = 1;
bADcl = 1;
CY = bADda;
_rrca_(); //RLC A
bADcl = 0;//pulse
}
//bADcl = 0;//pulse
} */
void ad(void)
{ uchar i;
//data1=0;
bADcs = 0;当TLC0832未工作时其CS输入端应为高电平,此时芯片禁用.
bADcl=0;
bADda=1;
bADcl=1;
bADcl=0;//i down
bADda=1;
bADcl=1;
bADcl=0; 2 down
bADda=0;
bADcl=1;
bADcl=0; 3 down
bADda=1;
bADcl=1;
bADcl=0; 4 down
for(i=8;i>0;i--)
{
data1<<=1;
bADcl=0;
bADcl=1;
if(bADda==1) data1|=0x01;
bADda=1;
}
/* for(i=8;i>0;i--)
{
bADcl=0;
bADcl=1;
} */
bADcs=1
}
void cal()
{
data2=((ulong)data1*493)/256;
ge=data2/100;
xiao1=(data2%100)/10;
xiao2=data2%10;
}
main()
{
flag=1;
while(1){
ad();
cal();
display();
}
}
展开阅读全文