微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 基于I2C总线的锅炉温度测量系统的设计与实现

基于I2C总线的锅炉温度测量系统的设计与实现

时间:04-25 来源:互联网 点击:

 单片机作为典型的嵌入式控制器,具有集成度高、处理功能强、运行速度快、体积小、扩展灵活等优势,在仪器仪表、家用电器、过程控制等领域被广泛应用。锅炉温度是工业过程中最常见的工艺参数之一,其测量过程的抗干扰能力和测量值的精度是影响对锅炉温度控制效果的重要因素。为使系统更智能化,一般选择单片机为系统控制核心。但是,传统的单片机测量系统中实现A/D转换结果输出以及各器件之间的数据传递大多采用并行的通信方式,这种数据交换方式占用了大量的I/O资源,系统结构也因此变得复杂。同时大量的硬件连线也会带来很多干扰因素,降低了锅炉温度值的测量精度。为了解决传统设计中存在的问题,本文提出使用Philips公司推出的I2C总线(Inter Integrated Circuit Bus)标准来设计系统,大大简化了系统硬件结构,释放了单片机I/O资源,也提高了系统的扩展性和抗干扰能力。

1 系统总体设计方案

基于I2C总线的锅炉温度测量系统结构如图1所示,系统主要由温度传感器及信号调节电路、A/D转换器、微控制器、液晶显示、报警电路、存储器电路等组成。系统首先通过温度传感器获得锅炉温度值,调节电路把传感器的输出信号转换为0~5 V的电压值,标准电压值送入A/D转换器转换为数字信号,并送入单片机数据处理,单片机将接收到的锅炉温度值存储到非易失性的E2PROM,液晶显示器1602将显示锅炉的实时温度,单片机还将当前锅炉温度与预先设定的温度范围进行比较。当温度高于设定温度最大值或小于温度极小值时,系统将自动报警。

锅炉温度测量系统是基于I2C总线标准设计的,主要通信部件之间只需要两条总线,一条是双向串行数据线SDA,另一条是串行时钟线SCL。AT89S51不具备I2C总线接口,本设计使用了两个普通I/O口来模拟I2C标准中SDA和SCL的工作,图2是测量系统I2C总线串行通信线路图,系统的多个I2C器件全部通过SDA和SCL连接并进行数据交换,不同器件之间通过总线竞争获得数据交换的权利。


2 硬件电路设计

 微控制器模块使用AT89S51单片机,主要实现数据的采集、处理和控制显示等功能,单片机最小系统包括时钟电路和复位电路。设计使用单片机的P1.0产生I2C总线中的SCL时钟信号,P1.1模拟SDA数据信号线,进行数据的双向传递。SCL和SDA引脚内部漏极开路,设计时要外加约5 ?赘的上拉电阻。系统的硬件电路如图3所示。

A/D转换模块采用具有I2C接口的8 bit CMOS可编程转换器PCF8591,该芯片同时集成了A/D转换和D/A转换功能,这里使用其逐次比较型A/D转换功能。与传统的ADC0809转换输出需要8根并口数据线相比,PCF8591为系统节省了6根数据线。典型的I2C总线接口器件的总线地址由器件地址、引脚地址、方向位组成[1]。在锅炉温度测量系统中,为简化设计把PCF8591的A0、A1、A2三个地址引脚接地。根据其硬件设计,确定PCF8591的总线地址为91H,根据系统所需功能,确定其控制寄存器的值为00H,单片机从PCF8591中读取A/D转换值。通道输入的模拟电压U和转换结果D之间的关系为D=255U/5。在使用I2C总线的系统中,主控器发出的第一个字节信息为器件地址信息,控制寄存器信息是主控器对PCF8591访问时发出的第二个字节信息。

存储器模块采用ATMEL公司推出低功耗CMOS串行带I2C接口的E2PROM芯片AT24C01[2],主要实现温度值的存储。单片机从PCF8591读取A/D转换结果后,把温度值存储到E2PROM。此时,AT24C01地址为A0H,当系统需要从E2PROM读取温度值时,AT24C01地址为A1H。与一般存储器扩展相比,采用AT24C01为系统节省了6根数据线及大量的地址线,使得系统结构更简化,测量过程的干扰因素也大大减少。

系统工作时,AT89S51发出地址信息,PCF8591和AT24C01把自身的地址与接收到的地址信息进行比较,相同则为被访问器件,并准备数据的发送和接收。

温度传感器采用恒流源输出的AD590,不需进行冷端补偿,可进行远距离传送,有较好的抗干扰能力。信号调节电路模块将AD590输出的电流信号转换为0~5 V的电压信号,为A/D转换做准备。

显示模块使用液晶显示屏LCD1602,可以显示16×2个字符,1602的三个功能控制引脚RS、RW、E由单片机的P0.5、P0.6、P0.7三个I/O控制,数据接口D0~D7则由P2口的8 bit来控制。与采用LED显示器相比,液晶显示器的硬件连线更少,电路焊接因此变得简单。

声光报警模块由LED、蜂鸣器和电阻组成。光、声音报警分别由单片机的P1.2和P1.3控制,为提高驱动能力,发光二极管和蜂鸣器均由NPN三极管驱动。

3 系统软件设计实现

本系统的软件设计部分采用C语言编程实现,使用的软件是KeiluVision3,从功能上看,系统软件主要包括主程序、数据处理子程序、读A/D转换结果、温度比较及报警输出子程序、读写E2PROM子程序、显示子程序等,系统主程序流程图如图4所示。

系统主程序主要完成系统的初始化,及各功能模块函数的调用、等待中断。采样时间选择500 ms,使用单片机内部定时器T0实现,因此要对T0的工作方式、计时初值、中断允许、开始计时等进行初始化,T0每50 ms中断一次,中断10次即开始一次温度采样。

数据处理子程序对采集到单片机内的锅炉温度值进行处理,包括四次均值滤波和标度变换部分。
I2C总线通信的编程是系统软件设计的关键,AT89S51不具有I2C接口,I2C总线信号将通过两个独立I/O进行软件模拟。这部分总线数据通信程序编写思路为:先由单片机发出起始信号,接着通过SDA发出I2C器件的总线地址。与该地址相同的器件发出应答,应答正确后,再由单片机通过SDA向应答器件写数据或从应答器件中读取对应地址的数据,一次数据通信结束时要由单片机发出结束信号。

起始信号程序如下:
Start( )
{ SDA=1;
_NOP_( );
SCL=1; //I2C启动总线时,SCL维持高电平
FOR(I=0;I++;I<5)
_NOP_( );
SDA=0; //I2C启动总线时,SDA产生高电平到
低电平的跳变
FOR(I=0;I++;I<4)
_NOP_( );
SCL=0;//准备发送或接收数据
_NOP_( );
}
结束信号程序如下:
Stop( )
{CLR SDA;
_NOP_( );
_NOP_( );
SCL=1; //I2C总线停止时,SCL维持高电平
FOR(I=0;I++;I<5)
_NOP_( );
SDA=1; //I2C总线停止时,SDA产生低电平到
高电平的跳变
FOR(I=0;I++;I<4)
_NOP_( );
}

编写读取PCF8591的A/D转换结果子程序时,流程为:启动起始信号,发器件地址,PCF8591应答,正确则接着发送控制字节,PCF8591应答,正确则传送A/D转换后的数字量,数据传送完则发出结束信号。

本文提出了一种基于日趋流行的I2C总线的锅炉温度测量系统设计方法,经过实际测试,系统运行良好,开发周期缩短。与其他传统设计方法相比,该系统具有简化硬件设计、节省控制器I/O资源、扩展方便、便于实现等优势,提高了测量系统的抗干扰能力和测量精度,具有一定的实用价值。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top