时间:2022-10-18 04:32:25
【前言】基于51单片机的小型温度采集系统设计由文秘帮小编整理而成,但愿对你的学习工作带来帮助。IIC 即Inter-Integrated Circuit(集成电路总线),由菲利浦半导体公司在80年代初设计出这种用来整体电路的连接的总线类型。集成电路总线是一种多向控制总线,它简化了信号传输总线,是目前最常用的短距离[2]芯片间的通讯方式之一。温度采集系统的设计采用IIC通信协议...
摘 要 提出了基于51单片机的小型温度采集系统设计,该设计以51单片机作为控制核心,基于IIC协议进行通信,采用C语言编程。文中重点对系统的软件进行设计,主要分为IIC总线通信、温度采集和显示三部分。所设计的温度采集系统具有相对测量精度高、使用方便、成本低等优点。
关键词 51单片机;温度采集;IIC总线
中图分类号TP368.1 文献标识码A 文章编号 1674-6708(2013)91-0212-02
传统的温度采集系统设计方法一般都会用到很多传感器,这不仅会加大系统的调试和维护的难度,还使设计成本大幅度的增加。基于以上多种原因的考虑,我们提出基于51单片机的小型温度采集系统设计,该设计采用IIC协议[1]进行通信,设计成本得到大幅度降低,能够满足基本测量要求。
1 硬件原理
IIC 即Inter-Integrated Circuit(集成电路总线),由菲利浦半导体公司在80年代初设计出这种用来整体电路的连接的总线类型。集成电路总线是一种多向控制总线,它简化了信号传输总线,是目前最常用的短距离[2]芯片间的通讯方式之一。温度采集系统的设计采用IIC通信协议可以提供很好的支撑。
整个设计的控制核心采用51单片机,单片机的P1.1、P1.0口分别与IIC总线上的SCL、SDA相连。单片机通过IIC总线从LM75A[3]芯片接收采集温度的数据进行处理,同时控制着数码管的显示。显示部分由大功率三极管9012来驱动数码管的位,三位数码管的位选由单片机的P1.3~P1.5口通过控制三极管9012的导通和截止来实现,数码管的段选由与IIC总线扩展口相连的PCF8574[4]控制着。另外还应完成单片机常规电路的设计,包括复位电路、按键电路和晶振电路等,其中按键电路应同时具有外部中断和普通按键功能。
2 软件设计
硬件设计完成后,软件的设计是温度采集系统最终功能的实现关键,我们所设计的程序主要包括IIC总线通信、温度采集和显示三部分。
2.1 IIC总线通信
IIC总线上传送的每一个字节都是8位,字节数没有限制。但必须跟随一个接收器回应的应答位在每传送一个字节后,并且最高位为首先发出的数据位,主控制器发送终止信号于全部数据传送结束后,具体程序如下:
void IIC_senddata(uchar adata) {}
uchar IIC_readdata(){} //读数据
{
uchar readdata;
uchar cnt;
readdata=0x00;
for(cnt=0;cnt
{
IIC_scl=1;
delay4us();
readdata
if(IIC_sda)
readdata|=0x01;
IIC_scl=0;
if(cnt==7)
return readdata;
}
}
void IIC_mcudata(uchar adata)
{
IIC_senddata(adata);
if(!tack_check())
{
IIC_stop_ nop(); //停止
IIC_start_ nop(); //开始
}
}
2.2 温度采集
具有IIC总线接口的LM75A芯片被使用到温度采集系统,可连接8个器件在LM75A同一总线上,温度范围为:-55℃-+125℃,电源电压范围为2.8V~5.5 V,能提供1l位A/D转换器,可编程滞后设定点和温度阈值[5]。上电时,可用作独立的温度控制器。软件设计上,根据芯片硬件的一些特点,应实现高低八位数据的轮流采集,如下:
uchar agai=0,bgai=0;
void IIC_LM75A()
{
uint gettemperture=0;
gettemperture = agai *8+ bgai;
if(gam) //低于零度时
{
agai =(2048- gettemperture)/8; //取补码温度的整数值
bgai =(2048- gettemperture)%8;
bgai *=125;
}
else
{
agai =( gettemperture)/8; //取温度的整数值
bgai = gettemperture %8;
bgai *=1.25; //取温度的小数值
}
}
2.3 显示
系统的温度采集范围为-9.9℃~99.9℃,显示精度为0.1℃,具有很强的实用性。我们采用I/O扩展的PCF8574芯片直接驱动三位数码管,位选采用三极管驱动。结合芯片和数码管间的引脚连接,具体程序如下:
void disp(uchar dz)
{
static uchar cnt=0;
uchar disp[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f,0xbf};
CH0=1;CH1=1;CH2=1; //所有数码管位选无效
writ8574(0xff);
IIC_LM75A(); //LM75A采集温度
IIC_write24C02(dz);
dz++;
switch(cnt) //扫描显示三位数码管
{
case 0:CH0=0; //第一位数码管
if(!Ptem) //如果为正,显示温度的整数部分第一位
writ8574(disp[htem/10]);
else //如果为负,显示“-”号
writ8574(disp[11]);
break;
case 1:CH1=0; //第二位数码管
writ8574(disp[htem%10]&0x7f);
break;
case 2:CH2=0; //第三位数码管
writ8574(disp[ltem]);
break;
}
if(++cnt>2) cnt=0;
}
3 精度测试
我们采用面包板搭建温度采集硬件电路,结合KeiluVision编程,在单片机中烧写入调试生成的[.hex]文件,测试设计精度。功能调试成功后对不同环境下的温度进行采集。采集结果与苏州天宇生产的JT.1-112型温度计作对比,如表1所示,测量精度较高,相对测量精度都在0.20%以下。
表1 温度采集数据
4 结论
传统的设计与我们设计的基于51单片机小型温度采集系统相比,具有成本低、使用方便、相对测量精度高等优点,具有潜在的实际应用价值。
参考文献
[1]郑明惠.温室环境数字化监测仪表的设计与研制[J].计算机测量与控制,2010:12.
[2]顾涵,潘启勇,庞盼.基于IIC协议小型温度计的设计[J].科技传播,2012:8.
[3]谭静芳,姜春玲.温室环境智能测控系统的设计[M].农业装备技术,2010.
[4]徐玮.C51单片机高效入门[M].北京:机械工业出版社,2011.
[5]周长吉.现代温室工程[M].北京:化学工业出版社,2011.