跳到主要内容

数字温度传感器电路

温度传感器广泛应用于电子设备中,用于显示温度值。您可以看到数字时钟显示室温值,这得益于其中嵌入的温度传感器。在本项目中,我将向您展示如何设计数字温度传感器电路。在过程中,我将介绍两种电路:一种使用8051微控制器,另一种使用ATmega8微控制器。

温度值是模拟信号。因此,使用模拟到数字转换器(ADC)将其转换为数字值,然后进行显示。本文描述了这一过程,即将模拟值转换为数字值。

1. 数字温度传感器电路原理

该电路的主要原理是获取模拟温度值,将其转换为数字值,并在LCD或7段显示器上显示数字温度值。

在这里,使用了8051和ATmega8微控制器。ATmega8具有内置的模拟到数字转换器,具有六个多路复用通道,分辨率为10位。这减少了外部模拟到数字转换器IC的接口需求。模拟温度值直接应用于微控制器的输入ADC通道。内部使用逐次逼近方法进行模拟到数字转换。

但在8051微控制器(本项目中使用的是AT89C51)中,它没有像ATmega8那样内置ADC。因此,我将使用外部ADC IC ADC0804与8051微控制器接口,将模拟温度值转换为数字值。

2. 使用8051的数字温度传感器电路

2.1 电路图

alt text

2.2 所需组件

  • AT89C51(8051微控制器)
  • 11.0592 MHz晶体
  • 2 x 33pF电容
  • 10μF/16V电容
  • 3 x 10KΩ电阻
  • 1KΩ x 8电阻包
  • 10KΩ可调电阻
  • 16x2 LCD显示器
  • ADC0804
  • LM35
  • 150pF电容
  • 330Ω电阻
  • 电源
  • 连接线
  • 8051编程器

2.3 电路设计

ADC IC的数字输出引脚连接到8051的PORT3引脚。PORT0引脚通过1KΩ电阻上拉,并连接到16x2 LCD的数据引脚。8051的P2.0和P2.1连接到LCD的RS和E引脚。

LM35连接到ADC0804的模拟输入引脚VIN+(引脚6)。电路中不再详细说明振荡器、复位等必要组件。

2.4 代码

#include<reg51.h>
#define lcd P0
#define dat P3
sbit rs=P2^0;
sbit e=P2^1;


void delay (int);
void display (unsigned char);
void cmd (unsigned char);
void init (void);
void string (char *);
void intro (void);
unsigned char degree[8]={0x0e,0x0a,0x0e,0x00,0x00,0x00,0x00,0x00};
char i=0;

void delay (int d)
{
unsigned char i=0;
for(;d>0;d--)
{
for(i=250;i>0;i--);
for(i=248;i>0;i--);
}
}
void cmd (unsigned char c)
{
lcd=c;
rs=0;
e=1;
delay(10);
e=0;
}
void display (unsigned char c)
{
lcd=c;
rs=1;
e=1;
delay(10);
e=0;
}
void string (char *c)
{
while(*c)
{
display(*c++);
}
}
void init (void)
{
cmd(0x38);
cmd(0x01);
cmd(0x0c);
cmd(0x80);
}
void intro (void)
{
string(" Electronics ");
cmd(0xc0);
string(" Hub ");
delay(1000);
cmd(0x01);
string(" Digital ");
cmd(0xc0);
string(" Thermometer ");
delay(1000);
cmd(0x01);
cmd(0x40);
for(i=0;i<8;i++)
display(degree[i]);
i=0;
cmd(0x80);
}

void main()
{
unsigned int val=0;
unsigned int temp=0;
init();
intro();
dat=0xff;
while(1)
{
if(i==0)
{
string("Temp: ");
i++;
}
val=dat*1.953;
cmd(0x86);


temp=(((val/10)%10)+48);
display(temp);

temp=((val%10)+48);
display(temp);
if(i==1)
{
display(0);
string("C");
i++;
}
delay(300);
}
while(1);
}

2.5 工作原理

在完成所有连接并将代码烧录到8051微控制器后,打开电源。LM35温度传感器将模拟温度数据提供给ADC0804,后者将其转换为数字值并发送给8051。

在接收到数字值后,8051微控制器进行简单计算,然后在LCD上显示温度。

3. 使用ATmega8的数字温度传感器电路

3.1 电路图

alt text

3.2 电路设计

数字温度传感器电路由 ATmega8 微控制器、LM35 温度传感器 和 7 段显示器 构成。温度传感器 LM35 连接到微控制器的一个 ADC 通道。

ATmega8 在 Port C 具有六个 ADC 通道,PC0-PC5 引脚充当 ADC 通道。这意味着可以接口六个模拟信号。但一次只能进行一个转换,具体取决于输入通道的优先级。ADC 的分辨率为 10 位。请注意,在进行转换时,Vref 和 AVcc 需外部连接,如电路所示。

通常,ATmega8 微控制器的所有端口引脚在未声明特殊功能之前都作为普通输入/输出引脚使用。为了使 Port C 工作为 ADC 通道,必须声明微控制器内部的 ADC 寄存器。

LM35 温度传感器具有三个引脚。将平面面朝向你时,第一引脚为 Vcc,第二引脚为输出,第三引脚为地。温度传感器的输出引脚连接到微控制器的第一个 ADC 通道,即 PC0 引脚。

7 段显示器有八个引脚和一个公共引脚。除去小数点引脚 (Dp),将其余七个引脚连接到 Port B:A 接 PB0,B 接 PB1,……,G 接 PB6。此处使用的 7 段显示器为 共阴极显示器。在微控制器与显示器之间使用限流电阻。

3.3 电路操作方法

首先为电路通电。微控制器会持续检查 ADC 通道的输入。它将模拟温度信号转换为数字值,并显示在七段显示器上。

在温度传感器的显示器下方,通过点击箭头标记可以增加或减少温度值。每当温度变化时,ADC 通道会对输入进行转换,并在七段显示器上显示新的数值。

显示的温度值是原始值的两倍,这是由于步进大小的差异造成的。因此,在显示之前,需要将数值除以 2 并减去 1,以显示准确的温度值。

3.4 微控制器编程算法

以下步骤说明如何设置 ATmega8 微控制器 的内部 ADC 寄存器,并在七段显示器上显示温度值。

  1. 首先,从六个 ADC 通道中选择一个连接温度传感器的通道,并使用 ADMUX 寄存器选择参考电压源。 例如:ADMUX = 01000000 如果选择 ADC0 作为通道,并选择 Avcc 作为参考电压(Aref 引脚外接电容)。

  2. 启用 ADC 并使用 ADCSRA 寄存器选择预分频值。 例如:ADCSRA = (1<<ADEN)|(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2) 如果选择预分频值为 128,同时启用 ADC。ADPS0, ADPS1, ADPS2, ADPS3 是预分频位。

  3. 检查 ADCSRA 寄存器中的标志位,该标志位在转换完成后被置位。

  4. ADC 寄存器读取转换值,并将数值分配给 Port B,在七段显示器上显示。

  5. 得到的两位数值可以显示在两个七段显示器上。

4. 数字温度传感器电路的应用

此电路可用于以下应用:

  • 温度监控系统
  • 环境温度测量
  • 智能家居温控系统
  • 实验室温度记录
  • 工业设备温度监测