基于I2C總線的鍋爐溫度測(cè)量系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
1 系統(tǒng)總體設(shè)計(jì)方案
基于I2C總線的鍋爐溫度測(cè)量系統(tǒng)結(jié)構(gòu)如圖1所示,系統(tǒng)主要由溫度傳感器及信號(hào)調(diào)節(jié)電路、A/D轉(zhuǎn)換器、微控制器、液晶顯示、報(bào)警電路、存儲(chǔ)器電路等組成。系統(tǒng)首先通過(guò)溫度傳感器獲得鍋爐溫度值,調(diào)節(jié)電路把傳感器的輸出信號(hào)轉(zhuǎn)換為0~5 V的電壓值,標(biāo)準(zhǔn)電壓值送入A/D轉(zhuǎn)換器轉(zhuǎn)換為數(shù)字信號(hào),并送入單片機(jī)數(shù)據(jù)處理,單片機(jī)將接收到的鍋爐溫度值存儲(chǔ)到非易失性的E2PROM,液晶顯示器1602將顯示鍋爐的實(shí)時(shí)溫度,單片機(jī)還將當(dāng)前鍋爐溫度與預(yù)先設(shè)定的溫度范圍進(jìn)行比較。當(dāng)溫度高于設(shè)定溫度最大值或小于溫度極小值時(shí),系統(tǒng)將自動(dòng)報(bào)警。
鍋爐溫度測(cè)量系統(tǒng)是基于I2C總線標(biāo)準(zhǔn)設(shè)計(jì)的,主要通信部件之間只需要兩條總線,一條是雙向串行數(shù)據(jù)線SDA,另一條是串行時(shí)鐘線SCL。AT89S51不具備I2C總線接口,本設(shè)計(jì)使用了兩個(gè)普通I/O口來(lái)模擬I2C標(biāo)準(zhǔn)中SDA和SCL的工作,圖2是測(cè)量系統(tǒng)I2C總線串行通信線路圖,系統(tǒng)的多個(gè)I2C器件全部通過(guò)SDA和SCL連接并進(jìn)行數(shù)據(jù)交換,不同器件之間通過(guò)總線競(jìng)爭(zhēng)獲得數(shù)據(jù)交換的權(quán)利。
2 硬件電路設(shè)計(jì)
微控制器模塊使用AT89S51單片機(jī),主要實(shí)現(xiàn)數(shù)據(jù)的采集、處理和控制顯示等功能,單片機(jī)最小系統(tǒng)包括時(shí)鐘電路和復(fù)位電路。設(shè)計(jì)使用單片機(jī)的P1.0產(chǎn)生I2C總線中的SCL時(shí)鐘信號(hào),P1.1模擬SDA數(shù)據(jù)信號(hào)線,進(jìn)行數(shù)據(jù)的雙向傳遞。SCL和SDA引腳內(nèi)部漏極開(kāi)路,設(shè)計(jì)時(shí)要外加約5 ?贅的上拉電阻。系統(tǒng)的硬件電路如圖3所示。
A/D轉(zhuǎn)換模塊采用具有I2C接口的8 bit CMOS可編程轉(zhuǎn)換器PCF8591,該芯片同時(shí)集成了A/D轉(zhuǎn)換和D/A轉(zhuǎn)換功能,這里使用其逐次比較型A/D轉(zhuǎn)換功能。與傳統(tǒng)的ADC0809轉(zhuǎn)換輸出需要8根并口數(shù)據(jù)線相比,PCF8591為系統(tǒng)節(jié)省了6根數(shù)據(jù)線。典型的I2C總線接口器件的總線地址由器件地址、引腳地址、方向位組成[1]。在鍋爐溫度測(cè)量系統(tǒng)中,為簡(jiǎn)化設(shè)計(jì)把PCF8591的A0、A1、A2三個(gè)地址引腳接地。根據(jù)其硬件設(shè)計(jì),確定PCF8591的總線地址為91H,根據(jù)系統(tǒng)所需功能,確定其控制寄存器的值為00H,單片機(jī)從PCF8591中讀取A/D轉(zhuǎn)換值。通道輸入的模擬電壓U和轉(zhuǎn)換結(jié)果D之間的關(guān)系為D=255U/5。在使用I2C總線的系統(tǒng)中,主控器發(fā)出的第一個(gè)字節(jié)信息為器件地址信息,控制寄存器信息是主控器對(duì)PCF8591訪問(wèn)時(shí)發(fā)出的第二個(gè)字節(jié)信息。
存儲(chǔ)器模塊采用ATMEL公司推出低功耗CMOS串行帶I2C接口的E2PROM芯片AT24C01[2],主要實(shí)現(xiàn)溫度值的存儲(chǔ)。單片機(jī)從PCF8591讀取A/D轉(zhuǎn)換結(jié)果后,把溫度值存儲(chǔ)到E2PROM。此時(shí),AT24C01地址為A0H,當(dāng)系統(tǒng)需要從E2PROM讀取溫度值時(shí),AT24C01地址為A1H。與一般存儲(chǔ)器擴(kuò)展相比,采用AT24C01為系統(tǒng)節(jié)省了6根數(shù)據(jù)線及大量的地址線,使得系統(tǒng)結(jié)構(gòu)更簡(jiǎn)化,測(cè)量過(guò)程的干擾因素也大大減少。
系統(tǒng)工作時(shí),AT89S51發(fā)出地址信息,PCF8591和AT24C01把自身的地址與接收到的地址信息進(jìn)行比較,相同則為被訪問(wèn)器件,并準(zhǔn)備數(shù)據(jù)的發(fā)送和接收。
溫度傳感器采用恒流源輸出的AD590,不需進(jìn)行冷端補(bǔ)償,可進(jìn)行遠(yuǎn)距離傳送,有較好的抗干擾能力。信號(hào)調(diào)節(jié)電路模塊將AD590輸出的電流信號(hào)轉(zhuǎn)換為0~5 V的電壓信號(hào),為A/D轉(zhuǎn)換做準(zhǔn)備。
顯示模塊使用液晶顯示屏LCD1602,可以顯示16×2個(gè)字符,1602的三個(gè)功能控制引腳RS、RW、E由單片機(jī)的P0.5、P0.6、P0.7三個(gè)I/O控制,數(shù)據(jù)接口D0~D7則由P2口的8 bit來(lái)控制。與采用LED顯示器相比,液晶顯示器的硬件連線更少,電路焊接因此變得簡(jiǎn)單。
聲光報(bào)警模塊由LED、蜂鳴器和電阻組成。光、聲音報(bào)警分別由單片機(jī)的P1.2和P1.3控制,為提高驅(qū)動(dòng)能力,發(fā)光二極管和蜂鳴器均由NPN三極管驅(qū)動(dòng)。
3 系統(tǒng)軟件設(shè)計(jì)實(shí)現(xiàn)
本系統(tǒng)的軟件設(shè)計(jì)部分采用C語(yǔ)言編程實(shí)現(xiàn),使用的軟件是KeiluVision3,從功能上看,系統(tǒng)軟件主要包括主程序、數(shù)據(jù)處理子程序、讀A/D轉(zhuǎn)換結(jié)果、溫度比較及報(bào)警輸出子程序、讀寫(xiě)E2PROM子程序、顯示子程序等,系統(tǒng)主程序流程圖如圖4所示。
系統(tǒng)主程序主要完成系統(tǒng)的初始化,及各功能模塊函數(shù)的調(diào)用、等待中斷。采樣時(shí)間選擇500 ms,使用單片機(jī)內(nèi)部定時(shí)器T0實(shí)現(xiàn),因此要對(duì)T0的工作方式、計(jì)時(shí)初值、中斷允許、開(kāi)始計(jì)時(shí)等進(jìn)行初始化,T0每50 ms中斷一次,中斷10次即開(kāi)始一次溫度采樣。
數(shù)據(jù)處理子程序?qū)Σ杉絾纹瑱C(jī)內(nèi)的鍋爐溫度值進(jìn)行處理,包括四次均值濾波和標(biāo)度變換部分。
I2C總線通信的編程是系統(tǒng)軟件設(shè)計(jì)的關(guān)鍵,AT89S51不具有I2C接口,I2C總線信號(hào)將通過(guò)兩個(gè)獨(dú)立I/O進(jìn)行軟件模擬。這部分總線數(shù)據(jù)通信程序編寫(xiě)思路為:先由單片機(jī)發(fā)出起始信號(hào),接著通過(guò)SDA發(fā)出I2C器件的總線地址。與該地址相同的器件發(fā)出應(yīng)答,應(yīng)答正確后,再由單片機(jī)通過(guò)SDA向應(yīng)答器件寫(xiě)數(shù)據(jù)或從應(yīng)答器件中讀取對(duì)應(yīng)地址的數(shù)據(jù),一次數(shù)據(jù)通信結(jié)束時(shí)要由單片機(jī)發(fā)出結(jié)束信號(hào)。
起始信號(hào)程序如下:
Start( )
{ SDA=1;
_NOP_( );
SCL=1; //I2C啟動(dòng)總線時(shí),SCL維持高電平
FOR(I=0;I++;I<5)
_NOP_( );
SDA=0; //I2C啟動(dòng)總線時(shí),SDA產(chǎn)生高電平到
低電平的跳變
FOR(I=0;I++;I<4)
_NOP_( );
SCL=0;//準(zhǔn)備發(fā)送或接收數(shù)據(jù)
_NOP_( );
}
結(jié)束信號(hào)程序如下:
Stop( )
{CLR SDA;
_NOP_( );
_NOP_( );
SCL=1; //I2C總線停止時(shí),SCL維持高電平
FOR(I=0;I++;I<5)
_NOP_( );
SDA=1; //I2C總線停止時(shí),SDA產(chǎn)生低電平到
高電平的跳變
FOR(I=0;I++;I<4)
_NOP_( );
}
編寫(xiě)讀取PCF8591的A/D轉(zhuǎn)換結(jié)果子程序時(shí),流程為:?jiǎn)?dòng)起始信號(hào),發(fā)器件地址,PCF8591應(yīng)答,正確則接著發(fā)送控制字節(jié),PCF8591應(yīng)答,正確則傳送A/D轉(zhuǎn)換后的數(shù)字量,數(shù)據(jù)傳送完則發(fā)出結(jié)束信號(hào)。
本文提出了一種基于日趨流行的I2C總線的鍋爐溫度測(cè)量系統(tǒng)設(shè)計(jì)方法,經(jīng)過(guò)實(shí)際測(cè)試,系統(tǒng)運(yùn)行良好,開(kāi)發(fā)周期縮短。與其他傳統(tǒng)設(shè)計(jì)方法相比,該系統(tǒng)具有簡(jiǎn)化硬件設(shè)計(jì)、節(jié)省控制器I/O資源、擴(kuò)展方便、便于實(shí)現(xiàn)等優(yōu)勢(shì),提高了測(cè)量系統(tǒng)的抗干擾能力和測(cè)量精度,具有一定的實(shí)用價(jià)值。