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