[導(dǎo)讀] 為實(shí)時(shí)監(jiān)測(cè)流體的流速和流量,給出了以單片機(jī)為核心的智能渦輪流量計(jì)設(shè)計(jì)方案,進(jìn)行了該流量計(jì)的硬件設(shè)計(jì)和軟件流程設(shè)計(jì).測(cè)試結(jié)果表明,該流量計(jì)適用于各種復(fù)雜環(huán)境,能夠準(zhǔn)確實(shí)現(xiàn)測(cè)量目的。
1 系統(tǒng)概述
智能渦輪流量計(jì)系統(tǒng)結(jié)構(gòu)如圖1所示,包括傳感器、信號(hào)處理電路、AT89C2051單片機(jī)、LCD顯示電路、數(shù)據(jù)存儲(chǔ)電路和電源。信號(hào)處理電路通過(guò)放大器用于對(duì)待測(cè)信號(hào)進(jìn)行放大;通過(guò)單片機(jī)設(shè)置能夠?qū)?nèi)部定時(shí)器T0的工作進(jìn)行控制,這樣能精確地測(cè)出加到T1引腳的單位時(shí)間內(nèi)的脈沖個(gè)數(shù);流速和流量顯示部分采用串口LCD顯示模塊,所得的數(shù)據(jù)采用I2C總線,并通過(guò)EEPROM來(lái)存儲(chǔ),節(jié)省了所需單片機(jī)的口線和外圍器件,同時(shí)也簡(jiǎn)化了顯示部分的軟件編程。
該設(shè)計(jì)能實(shí)時(shí)將所測(cè)的流量速度顯示出來(lái),同時(shí)也能夠累計(jì)顯示累計(jì)流量和分段流量。渦輪流量計(jì)能將傳感器輸入到單片機(jī)的脈沖信號(hào)的個(gè)數(shù)(傳感器將渦輪葉片轉(zhuǎn)過(guò)的個(gè)數(shù)轉(zhuǎn)變成相應(yīng)的脈沖信號(hào)的個(gè)數(shù))實(shí)時(shí)地測(cè)量出來(lái),然后通過(guò)單片機(jī)計(jì)算出流速和流量,再將所得的數(shù)據(jù)存儲(chǔ)到串口數(shù)據(jù)存儲(chǔ)器,并由串口液晶顯示模塊實(shí)時(shí)顯示出所測(cè)流速或流量。該設(shè)計(jì)用一個(gè)按鍵來(lái)控制顯示即時(shí)流速或累計(jì)流量或分段流量.考慮到信號(hào)的衰減、強(qiáng)弱等影響,在信號(hào)送入單片機(jī)前應(yīng)對(duì)其進(jìn)行放大,然后再輸入到單片機(jī)進(jìn)行計(jì)算。
單片機(jī)利用定時(shí)器T1的計(jì)數(shù)功能測(cè)出輸入信號(hào)的個(gè)數(shù)后,再利用單片機(jī)的算術(shù)運(yùn)算功能將個(gè)數(shù)轉(zhuǎn)換成速度,同時(shí)每秒進(jìn)行一次流量累計(jì),從而計(jì)算出累計(jì)流量。最后將得出的流速、分段流量值和累計(jì)流量值存儲(chǔ)在E2PROM中,并根據(jù)按鍵的按下情況來(lái)顯示流速或流量。為了方便計(jì)算要顯示數(shù)據(jù)值的段碼,可以通過(guò)查表的方式將要顯示的數(shù)據(jù)值中每一位的BCD碼轉(zhuǎn)換成8段碼送到顯示緩沖區(qū),最后經(jīng)串口送至液晶顯示模塊以顯示所測(cè)的流速或流量。速和流量值采用8位顯示,流量用1個(gè)小數(shù)位,流速用2個(gè)小數(shù)位。
2 統(tǒng)硬件設(shè)計(jì)
選用AT89C2051作為信號(hào)處理核心。T89C2051包含2kB的可重擦寫閃存、128字節(jié)的內(nèi)部RAM、15個(gè)可編程的I/O口線、2個(gè)16位定時(shí)/計(jì)數(shù)器、1個(gè)5向量?jī)杉?jí)中斷結(jié)構(gòu)和1個(gè)全雙工的串行通信口,同時(shí)支持2種軟件可選的節(jié)電工作模式[1-2]。設(shè)計(jì)中用到了AT89C2051的T0,T1定時(shí)器,以及P1端口的8個(gè)口線。于該單片機(jī)與89C51相兼容,因此在硬件電路設(shè)計(jì)和軟件編程方面更加方便。由于AT89C2051本身固有的特點(diǎn),設(shè)計(jì)時(shí)應(yīng)考慮到:首先,它的程序存儲(chǔ)器空間為2kB,因此所有的跳轉(zhuǎn)和分支轉(zhuǎn)移指令都要限制在這個(gè)范圍內(nèi)。其次,它沒(méi)有MOVX指令,不支持外部存儲(chǔ)器操作。此外,AT89C2051自身還有一些其他特點(diǎn),譬如可以使用命令使其工作在低功耗模式等。
電路采用液晶顯示模塊LCM0825,該模塊與單片機(jī)的接口電路如圖2所示。
LCM0825是8位段碼式液晶顯示模塊,它內(nèi)部集成有LCD控制器、LCD驅(qū)動(dòng)器和RAM,因而可方便顯示數(shù)據(jù)的編程。液晶顯示模塊采用3~4線串行數(shù)據(jù)輸入,可直接與單片機(jī)接口。由于串行接口方式節(jié)省了所需的口線和系統(tǒng)資源,因而使系統(tǒng)具有較高的資源利用率。該模塊可在2.7~5.2V電壓下工作,其低功耗及背光可調(diào)特性使得設(shè)計(jì)更具有經(jīng)濟(jì)性和通用性。LCM0825能夠顯示8位數(shù)據(jù),每一個(gè)數(shù)據(jù)均以8段碼的形式放在其內(nèi)部顯示RAM區(qū),并用模塊內(nèi)RAM的2個(gè)存儲(chǔ)地址來(lái)放置一個(gè)數(shù)據(jù)的8段碼。8位數(shù)據(jù)共占用內(nèi)部16個(gè)地址[3]。每一個(gè)數(shù)據(jù)位的8段碼存放形式及高低地址存放段碼的順序都和表1所列的第8位數(shù)據(jù)的8段碼存放格式一樣,只是段碼的存放地址不同。因此,編程時(shí)應(yīng)考慮數(shù)據(jù)的存放地址和形式.在使用該液晶顯示模塊時(shí),VCC與VLCD之間可用一個(gè)50kΩ的電位器來(lái)調(diào)整背光。
數(shù)據(jù)存儲(chǔ)電路采用I2C總線的E2PROM存儲(chǔ)器CAT24WC04.CAT24WC04是串行的E2PROM存儲(chǔ)器,其存儲(chǔ)容量為4kB,SCL為時(shí)鐘線,SDA為數(shù)據(jù)線。流量數(shù)據(jù)保存在CAT24WC04,因此可保證掉電時(shí)數(shù)據(jù)不丟失。
3 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件采用模塊化設(shè)計(jì)方法。整個(gè)系統(tǒng)由系統(tǒng)初始化模塊、信號(hào)處理模塊、定時(shí)器中斷模塊、流量和流速計(jì)算和存儲(chǔ)模塊、顯示數(shù)據(jù)處理模塊、數(shù)據(jù)顯示模塊以及其他功能模塊組成,其軟件結(jié)構(gòu)如圖3所示。上電后,首先進(jìn)入系統(tǒng)初始化模塊,此后系統(tǒng)軟件將開始運(yùn)行,以實(shí)時(shí)地將所測(cè)數(shù)值顯示在液晶模塊上。
圖3 系統(tǒng)軟件結(jié)構(gòu)框圖
3.1 數(shù)據(jù)處理過(guò)程
待測(cè)信號(hào)經(jīng)信號(hào)處理電路后加至單片機(jī)的P3.5(T1)引腳可為單片機(jī)測(cè)量信號(hào)數(shù)量提供有效的輸入信號(hào)。單片機(jī)通過(guò)T0定時(shí)器來(lái)決定測(cè)量數(shù)量的時(shí)間。測(cè)量時(shí),首先將零賦給TH1,TL1兩個(gè)寄存器,將計(jì)數(shù)器T1的運(yùn)行控制位TR1置位,同時(shí)也將ET1置位以允許計(jì)數(shù)器T1中斷。一旦出現(xiàn)低電平,則立即復(fù)位TR1以終止計(jì)數(shù)器,以結(jié)束計(jì)數(shù)程序。根據(jù)信號(hào)的數(shù)量和渦輪流量計(jì)的參數(shù)即可計(jì)算出此時(shí)的流速。
每秒進(jìn)行一次流量數(shù)累加,用當(dāng)前的速度值加上一秒前的流量數(shù)即可得出當(dāng)前的總流量值,得出的流速和流量值放到E2PROM中,通過(guò)鍵盤顯示鍵可顯示流速或流量值。要顯示的流速或流量放到R1,R2,R3三個(gè)寄存器后即可調(diào)用轉(zhuǎn)換BCD代碼模塊,以將數(shù)據(jù)值顯示處理。數(shù)據(jù)轉(zhuǎn)變成相應(yīng)的BCD代碼后,可調(diào)用顯示消多余零和顯示數(shù)據(jù)存儲(chǔ)模塊,并將要顯示的數(shù)據(jù)通過(guò)查表轉(zhuǎn)換成相應(yīng)數(shù)據(jù)的8段碼放到顯示緩沖區(qū)以備顯示。編程時(shí)要把十進(jìn)制數(shù)據(jù)的相應(yīng)8段碼放在表格中,以便通過(guò)查表而得到相應(yīng)數(shù)值的段碼。此過(guò)程的另一個(gè)重要目的是消除最高有效位前面的多余零,使多余零的段碼處于不顯示狀態(tài),從而保證數(shù)據(jù)以正常的格式顯示出來(lái)。最后,將顯示緩沖區(qū)的8位8段碼經(jīng)串口送至液晶顯示模塊進(jìn)行顯示。
3.2 液晶顯示模塊的初始化
LCM0825是串行8位8段液晶顯示模塊。使用時(shí),要在上電后對(duì)該模塊進(jìn)行初始化.在初始化之前,應(yīng)延時(shí)200ms以上再送命令。初始化工作過(guò)程如下:首先定義液晶模塊(當(dāng)其命令代碼為:00101001),其次定義振蕩器方式(當(dāng)其命令代碼為00011000時(shí),將模塊定義為內(nèi)部RC振蕩方式,命令代碼為00010100時(shí),定義為外部晶體振蕩方式)。然后分別用命令代碼00000001和00000011開振蕩器和開顯示器。命令送入后,便可以在需要顯示數(shù)據(jù)時(shí)將相應(yīng)的段碼直接送入模塊內(nèi)部的顯示RAM中。在送顯示數(shù)據(jù)的段碼數(shù)據(jù)時(shí),要考慮到顯示RAM的高和低地址所對(duì)應(yīng)的數(shù)據(jù)段碼的存放形式。其第8位數(shù)據(jù)的段碼與LCM0825內(nèi)部的RAM地址的對(duì)應(yīng)關(guān)系見表1。以后隨地址的增加依次存放第7位至第1位數(shù)據(jù)段碼。為了正確地顯示數(shù)據(jù),應(yīng)使要顯示的8位字符在顯示屏幕中為左起第1位,右止第8位。
另外,由于命令格式及時(shí)序不同,寫命令和寫數(shù)據(jù)程序應(yīng)分別編寫。編寫傳輸子程序時(shí),所傳數(shù)據(jù)的高位先移入模塊,否則模塊不能正常工作或顯示。同樣,為了能正確讀/寫命令或數(shù)據(jù),必須在時(shí)序中加入相應(yīng)的延時(shí);此外,為保證系統(tǒng)的低功耗,每次讀/寫命令或數(shù)據(jù)之后,都應(yīng)將CS,RD,WR,DATA引腳置高電平。
4 結(jié)語(yǔ)
基于單片機(jī)的智能渦輪流量計(jì)的設(shè)計(jì)方案中因使用了串口LCD顯示模塊和EEPROM儲(chǔ)存器,不僅節(jié)省了硬件資源,提高了系統(tǒng)性價(jià)比,又保證了系統(tǒng)測(cè)量精度和實(shí)時(shí)性,具有很好的應(yīng)用價(jià)值。
參考文獻(xiàn)
[1]何立民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,1990.
[2]李群芳,肖看.單片機(jī)原理、接口及應(yīng)用:嵌入式系統(tǒng)技術(shù)基礎(chǔ)[M].北京:清華大學(xué)出版社,2005.