摘 要: 提出了一種基于I2C總線(xiàn)驅(qū)動(dòng)的鍋爐溫度測(cè)量系統(tǒng),介紹了系統(tǒng)的結(jié)構(gòu),、硬件設(shè)計(jì)和軟件開(kāi)發(fā),。系統(tǒng)以單片機(jī)為核心,選用了I2C總線(xiàn)器件PCF8591實(shí)現(xiàn)A/D轉(zhuǎn)換,,及I2C總線(xiàn)接口的E2PROM芯片AT24C01存儲(chǔ)溫度值,。系統(tǒng)的數(shù)據(jù)交換都是基于I2C總線(xiàn)的通信標(biāo)準(zhǔn),該設(shè)計(jì)方案結(jié)構(gòu)簡(jiǎn)單,、易于擴(kuò)展,,提高了鍋爐溫度測(cè)量的精度和抗干擾能力,具有實(shí)際應(yīng)用價(jià)值,。
關(guān)鍵詞: I2C總線(xiàn),;單片機(jī);鍋爐溫度
單片機(jī)作為典型的嵌入式控制器,,具有集成度高,、處理功能強(qiáng)、運(yùn)行速度快,、體積小,、擴(kuò)展靈活等優(yōu)勢(shì),在儀器儀表,、家用電器、過(guò)程控制等領(lǐng)域被廣泛應(yīng)用,。鍋爐溫度是工業(yè)過(guò)程中最常見(jiàn)的工藝參數(shù)之一,,其測(cè)量過(guò)程的抗干擾能力和測(cè)量值的精度是影響對(duì)鍋爐溫度控制效果的重要因素。為使系統(tǒng)更智能化,,一般選擇單片機(jī)為系統(tǒng)控制核心,。但是,傳統(tǒng)的單片機(jī)測(cè)量系統(tǒng)中實(shí)現(xiàn)A/D轉(zhuǎn)換結(jié)果輸出以及各器件之間的數(shù)據(jù)傳遞大多采用并行的通信方式,,這種數(shù)據(jù)交換方式占用了大量的I/O資源,,系統(tǒng)結(jié)構(gòu)也因此變得復(fù)雜。同時(shí)大量的硬件連線(xiàn)也會(huì)帶來(lái)很多干擾因素,,降低了鍋爐溫度值的測(cè)量精度,。為了解決傳統(tǒng)設(shè)計(jì)中存在的問(wèn)題,本文提出使用Philips公司推出的I2C總線(xiàn)(Inter Integrated Circuit Bus)標(biāo)準(zhǔn)來(lái)設(shè)計(jì)系統(tǒng),,大大簡(jiǎn)化了系統(tǒng)硬件結(jié)構(gòu),,釋放了單片機(jī)I/O資源,也提高了系統(tǒng)的擴(kuò)展性和抗干擾能力,。
1 系統(tǒng)總體設(shè)計(jì)方案
基于I2C總線(xiàn)的鍋爐溫度測(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總線(xiàn)標(biāo)準(zhǔn)設(shè)計(jì)的,,主要通信部件之間只需要兩條總線(xiàn),一條是雙向串行數(shù)據(jù)線(xiàn)SDA,,另一條是串行時(shí)鐘線(xiàn)SCL,。AT89S51不具備I2C總線(xiàn)接口,本設(shè)計(jì)使用了兩個(gè)普通I/O口來(lái)模擬I2C標(biāo)準(zhǔn)中SDA和SCL的工作,,圖2是測(cè)量系統(tǒng)I2C總線(xiàn)串行通信線(xiàn)路圖,,系統(tǒng)的多個(gè)I2C器件全部通過(guò)SDA和SCL連接并進(jìn)行數(shù)據(jù)交換,不同器件之間通過(guò)總線(xiàn)競(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總線(xiàn)中的SCL時(shí)鐘信號(hào),P1.1模擬SDA數(shù)據(jù)信號(hào)線(xiàn),,進(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ù)線(xiàn)相比,PCF8591為系統(tǒng)節(jié)省了6根數(shù)據(jù)線(xiàn)。典型的I2C總線(xiàn)接口器件的總線(xiàn)地址由器件地址,、引腳地址,、方向位組成[1]。在鍋爐溫度測(cè)量系統(tǒng)中,,為簡(jiǎn)化設(shè)計(jì)把PCF8591的A0,、A1、A2三個(gè)地址引腳接地,。根據(jù)其硬件設(shè)計(jì),,確定PCF8591的總線(xiàn)地址為91H,根據(jù)系統(tǒng)所需功能,,確定其控制寄存器的值為00H,,單片機(jī)從PCF8591中讀取A/D轉(zhuǎn)換值。通道輸入的模擬電壓U和轉(zhuǎn)換結(jié)果D之間的關(guān)系為D=255U/5,。在使用I2C總線(xiàn)的系統(tǒng)中,,主控器發(fā)出的第一個(gè)字節(jié)信息為器件地址信息,控制寄存器信息是主控器對(duì)PCF8591訪(fǎng)問(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ù)線(xiàn)及大量的地址線(xiàn),,使得系統(tǒng)結(jié)構(gòu)更簡(jiǎn)化,測(cè)量過(guò)程的干擾因素也大大減少,。
系統(tǒng)工作時(shí),AT89S51發(fā)出地址信息,,PCF8591和AT24C01把自身的地址與接收到的地址信息進(jìn)行比較,,相同則為被訪(fǎng)問(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顯示器相比,液晶顯示器的硬件連線(xiàn)更少,,電路焊接因此變得簡(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總線(xiàn)通信的編程是系統(tǒng)軟件設(shè)計(jì)的關(guān)鍵,,AT89S51不具有I2C接口,,I2C總線(xiàn)信號(hào)將通過(guò)兩個(gè)獨(dú)立I/O進(jìn)行軟件模擬。這部分總線(xiàn)數(shù)據(jù)通信程序編寫(xiě)思路為:先由單片機(jī)發(fā)出起始信號(hào),,接著通過(guò)SDA發(fā)出I2C器件的總線(xiàn)地址,。與該地址相同的器件發(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)總線(xiàn)時(shí),,SCL維持高電平
FOR(I=0,;I++;I<5)
_NOP_( ),;
SDA=0,; //I2C啟動(dòng)總線(xiàn)時(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總線(xiàn)停止時(shí),,SCL維持高電平
FOR(I=0,;I++;I<5)
_NOP_( ),;
SDA=1,; //I2C總線(xiàn)停止時(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總線(xiàn)的鍋爐溫度測(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à)值,。
參考文獻(xiàn)
[1] 周劍利,,郭建波,崔濤.具有I2C總線(xiàn)接口的A/D芯片PCF8591及其應(yīng)用[J].微計(jì)算機(jī)信息,,2005,,21(7):150-151.
[2] 徐瑋,徐富君,,沈建良.C51單片機(jī)高效入門(mén)[M].北京:機(jī)械工業(yè)出版社,,2008.