基于Bang-Bang控制的溫濕度調(diào)節(jié)系統(tǒng)(圖)
在一些倉(cāng)儲(chǔ)管理、生產(chǎn)制造、氣象觀(guān)測(cè)、科學(xué)研究以及日常生活中,對(duì)溫濕度的要求普遍存在,如《檔案庫(kù)房技術(shù)管理暫行規(guī)定》中就明確指出:檔案庫(kù)房(含膠片庫(kù)、磁帶庫(kù))的溫度應(yīng)控制在14~24℃,有設(shè)備的庫(kù)房日變化幅度不超過(guò)±2℃;相對(duì)濕度應(yīng)控制在45%~60%,有設(shè)備的庫(kù)房日變化幅度不超過(guò)±5%。本文利用新型的C8051F020單片機(jī)和I2C總線(xiàn)數(shù)字式溫濕度傳感器SHT11設(shè)計(jì)了一套滿(mǎn)足此要求的自動(dòng)化設(shè)備。
系統(tǒng)硬件設(shè)計(jì)
基于C8051F020的檔案庫(kù)溫濕度控制器,主器件為8051F020,從器件為I2C總線(xiàn)數(shù)字溫濕度傳感器SHT11。
SHT11是瑞士Sennsirion公司生產(chǎn)的具有I2C總線(xiàn)接口的單片全校準(zhǔn)數(shù)字式相對(duì)濕度和溫度傳感器。傳統(tǒng)的模擬式濕度傳感器一般都要設(shè)計(jì)信號(hào)調(diào)理電路并經(jīng)過(guò)復(fù)雜的校準(zhǔn)和標(biāo)定過(guò)程,因此測(cè)量精度難以保證,且在線(xiàn)性度、重復(fù)性、互換性、一致性等方面往往不盡人意。SHT11是瑞士Sennsirion公司推出的基于CMOSensTM技術(shù)(將溫濕度傳感器、信號(hào)放大調(diào)理、A/D轉(zhuǎn)換、I2C總線(xiàn)全部集成在一個(gè)芯片上)的新型溫濕度傳感器,該傳感器的濕度值輸出分辨率為14位,溫度值輸出分辨率為12位,并可編程為12位和8位。
C8051F020單片機(jī)是集成在1塊芯片上的混合信號(hào)系統(tǒng)級(jí)單片機(jī),具有與MCS8051內(nèi)核及指令完全兼容的微控制器。除了具有標(biāo)準(zhǔn)8051機(jī)的數(shù)字外設(shè)部件外,片內(nèi)還集成了數(shù)據(jù)采集與控制系統(tǒng)中常用的模擬部件和其他數(shù)字外設(shè)及功能部件,內(nèi)部還具有JTAG和調(diào)試電路,通過(guò)JATG接口可以使用安裝在最終應(yīng)用系統(tǒng)產(chǎn)品上的單片機(jī)進(jìn)行非侵入、全速及在線(xiàn)系統(tǒng)調(diào)試。
由二者組成的溫濕度控制器的硬件連接如圖1所示。
圖1 C8051F020與SHT11的接線(xiàn)圖
利用I/O端口初始化程序啟動(dòng)優(yōu)先權(quán)交叉開(kāi)關(guān)譯碼器把P0.0、P0.1引腳分別配置成SDA (串行數(shù)據(jù))、SCL(串行時(shí)鐘),然后分別接SHT11的DATA和SCK,在時(shí)鐘的控制下來(lái)完成對(duì)SHT11采集并進(jìn)行A/D轉(zhuǎn)換后的溫濕度數(shù)據(jù)的讀取,P0.2、P0.3被配置成基本輸入輸出,根據(jù)讀取的溫濕度值的高低來(lái)控制兩個(gè)繼電器,進(jìn)而達(dá)到控制溫濕度調(diào)節(jié)器的目的。在串行通信過(guò)程中主器件為8051F020,從器件為SHT11。
軟件設(shè)計(jì)
1 Bang-Bang控制
在檔案室溫濕度控制中,對(duì)溫濕度的要求不是一個(gè)定值,而是一個(gè)范圍。執(zhí)行機(jī)只有兩種狀態(tài):on,運(yùn)轉(zhuǎn);off,不運(yùn)轉(zhuǎn)。對(duì)于這種執(zhí)行機(jī),采用典型的數(shù)字控制算法為Bang-Bang控制算法。這樣需要兩個(gè)溫度設(shè)置點(diǎn):THIGH和TLOW,兩個(gè)濕度設(shè)置點(diǎn)HHIGH和HLOW。溫度控制和濕度控制一樣,所以只介紹溫度的控制。如果溫度高于THIGH,則控制器關(guān)閉電源(繼電器釋放),如果溫度低于TLOW,則控制器打開(kāi)電源(繼電器吸合)。THIGH與TLOW之差稱(chēng)為滯后。使用滯后延長(zhǎng)了繼電器的使用壽命,因?yàn)樗鼫p少了繼電器開(kāi)關(guān)次數(shù)。
2程序設(shè)計(jì)
該程序包括:
● 系統(tǒng)復(fù)位子程序(Reset_Init):完成對(duì)內(nèi)部振蕩器的設(shè)置,對(duì)XBR0和XBR2的設(shè)置將SMB連到通用的I/O引腳;
● SMBus初始化子程序(SMBus_Init):配置并使能SMBus,設(shè)置SMBus時(shí)鐘速率,為第一次傳輸清除SM_BUSY標(biāo)志;
● A/D轉(zhuǎn)換和讀取轉(zhuǎn)換數(shù)據(jù)得子程序(ADCRead);Bang-Bang控制算法子程序(Bang-Bang);
● 輸出控制子程序(OUTcontrol)?,F(xiàn)把主要的啟動(dòng)A/D轉(zhuǎn)換及讀取數(shù)據(jù)子程序給出。
ADCRead:
WRITE EQU 00H
//SMBus寫(xiě)命令
READ EQU 01H
//SMBus寫(xiě)命令
CHIP-A EQU 00H
//SHT11從地址
MEAMURE_TEMP EQU 03H
//SHT11測(cè)量溫度命令
MEARURE_HUMI EQU 05H
//SHT11測(cè)量濕度命令
CLR RW
//寫(xiě)從地址
MOV A,#CHIP_A
ORL A,#WRITE
MOV WRIT_ADC, A
SETB SM_BUSY
SETB STA
JB SM_BUSY, $
//寫(xiě)溫度測(cè)量命令
CLR RW
MOV A,# MEAMURE_TEMP
ORL A,#WRITE
MOV WRIT_ADC, A
SETB SM_BUSY
SETB STA
JB SM_BUSY, $
//讀測(cè)得的溫度
SETB RW
MOV A, # CHIP_A
ORL A,#READ
MOV READ_ADC, A
SETB SM_BUSY
SETB STA
ACALL DELAY
MOV TEMPR, RECEIVE_BYTE
------------------
//寫(xiě)濕度測(cè)量命令
------------------
//讀測(cè)得的濕度值
由于濕度測(cè)量和溫度測(cè)量程序相同,所以沒(méi)有給出,測(cè)量后的溫度數(shù)據(jù)和濕度數(shù)據(jù)分別放在TEMPR和HUMIR兩個(gè)寄存器中,然后經(jīng)過(guò)線(xiàn)性修正程序和棒棒算法程序后控制繼電器的動(dòng)作。
結(jié)束語(yǔ)
本文設(shè)計(jì)溫濕度調(diào)節(jié)系統(tǒng),主器件為8051F020,從器件為I2C總線(xiàn)數(shù)字溫濕度傳感器SHT11,接口電路用I/O端口初始化程序啟動(dòng)優(yōu)先權(quán)交叉開(kāi)關(guān)譯碼器把引腳分別配置成串行數(shù)據(jù)及串行時(shí)鐘,并配置基本輸入輸出。軟件設(shè)計(jì)則采用Bang-Bang控制算法,需高低兩個(gè)溫度設(shè)置點(diǎn),溫度高于高點(diǎn)則關(guān)閉電源,低于低點(diǎn)則打開(kāi)電源。控制程序含系統(tǒng)復(fù)位、初始化、A/D轉(zhuǎn)換和讀取數(shù)據(jù)轉(zhuǎn)換、Bang-Bang控制算法及輸出控制子程序。
評(píng)論