【摘要】流量檢測在工業(yè)、農(nóng)業(yè)、化工、醫(yī)療乃至生活中都有涉及,本文基于C語言和單片機(jī)設(shè)計(jì)了一個(gè)能夠精確測量液體流量的檢測系統(tǒng)。重點(diǎn)對整個(gè)系統(tǒng)的軟件部分的設(shè)計(jì)進(jìn)行了詳細(xì)分析和論述。
【關(guān)鍵詞】流量檢測;C語言;軟件系統(tǒng)
流量是現(xiàn)代工業(yè)生產(chǎn)過程自動(dòng)化中,重要的過程參數(shù)之一。如何實(shí)現(xiàn)對工業(yè)生產(chǎn)過程中管道內(nèi)的流體進(jìn)行精確測量和控制,是一個(gè)重要的課題。隨著傳感器技術(shù)及信息技術(shù)的發(fā)展,使得對流體流量的檢測成為可能。
1.總體設(shè)計(jì)方案
系統(tǒng)主要包括硬件和軟件系統(tǒng)兩部分。硬件系統(tǒng)主要由最小控制系統(tǒng)、流量檢測電路模塊、LCD1602液晶顯示模塊和按鍵電路四部分組成。當(dāng)有流體流過時(shí),流體流量傳感器實(shí)時(shí)采集水流量狀態(tài),并將采集的信息傳給單片機(jī)。
軟件系統(tǒng)則負(fù)責(zé)對流量傳感器的輸出數(shù)據(jù)的處理,及各類操作的流程控制以及相關(guān)數(shù)據(jù)的處理、換算與顯示。
2.硬件系統(tǒng)的設(shè)計(jì)
硬件系統(tǒng)中最小控制系統(tǒng)以及顯示按鍵電路的設(shè)計(jì)都非常成熟,這里主要對流量測量電路的設(shè)計(jì)進(jìn)行分析。
通常所說的流量是指單位時(shí)間內(nèi)通過管道橫截面的流體的數(shù)量,即瞬時(shí)流量。通過水流量傳感器的數(shù)據(jù)采集,并根據(jù)商家的水流量傳感器的參數(shù)可以得出流量的換算關(guān)系,從而在單片機(jī)中通過軟件完成數(shù)據(jù)的運(yùn)算和轉(zhuǎn)換。
目前常用的流量傳感器的一般都是渦輪式,其工作原理是:當(dāng)傳感器內(nèi)有流體流過時(shí),傳感器內(nèi)的渦輪葉片就會(huì)受到流體的沖擊,產(chǎn)生正比于流速的轉(zhuǎn)動(dòng),其轉(zhuǎn)動(dòng)會(huì)使得對應(yīng)的磁芯產(chǎn)生周期性的矩形脈沖信號,顯然脈沖的個(gè)數(shù)是正比于流體速度的。通過軟件對脈沖數(shù)量的統(tǒng)計(jì),然后結(jié)合具體型號傳感器對不同流體及流速下的脈沖數(shù)據(jù)修正值,通過軟件上面進(jìn)行對應(yīng)的數(shù)據(jù)處理,就可以實(shí)現(xiàn)精確的測量。
圖1 總流程圖
3.軟件系統(tǒng)設(shè)計(jì)
軟件的設(shè)計(jì)采用了移植性好、編程方便的C語言來實(shí)現(xiàn)。軟件都是在函數(shù)化的設(shè)計(jì)理念下完成的。整個(gè)軟件系統(tǒng)包括流量檢測程序、流量開關(guān)控制程序、顯示程序等。程序的整體設(shè)計(jì)流程圖如圖1所示。
3.1 主程序的設(shè)計(jì)
主程序主要通過對各功能子函數(shù)的調(diào)用來實(shí)現(xiàn)整個(gè)系統(tǒng)的協(xié)調(diào)運(yùn)作。主程序的部分代碼如下:
void main()
{ lcd_init();
while(1) { liuliang();
if(kai==0) display1(); " //判斷界面開關(guān)是否按下,按下則顯示第一界面
else{ display2();}}} //顯示第二頁界面
其中l(wèi)cd_init()函數(shù)為液晶顯示子程序,其程序設(shè)計(jì)方面已經(jīng)非常成熟,這里不多做說明;liuliang()函數(shù)為水流量的測量函數(shù),后面有進(jìn)行詳細(xì)介紹;整個(gè)程序在while(1)構(gòu)成的死循環(huán)的控制下反復(fù)的進(jìn)行流量的檢測和實(shí)時(shí)顯示。
3.2 水流量檢測程序的設(shè)計(jì)
水流量的測量主要依靠對傳感器傳出的脈沖數(shù)的處理來實(shí)現(xiàn),由流量傳感器在一段時(shí)間下產(chǎn)生高電平的個(gè)數(shù)決定,即Q(流量)=F(頻率)/R(商家設(shè)定值),所以只要在軟件設(shè)計(jì)過程中,設(shè)定在一定時(shí)間內(nèi),計(jì)算出相應(yīng)的脈沖的個(gè)數(shù)即可。在本程序中,將AT89S51中的的定時(shí)器T0設(shè)置為計(jì)數(shù)器,T1則用作定時(shí)計(jì)計(jì)時(shí)用,從而對流量進(jìn)行測量。
(1)流量的讀取程序
中斷程序運(yùn)行的時(shí)間到,就可以讀取計(jì)數(shù)器中的數(shù)值,將傳感器輸出的脈沖數(shù)值讀出后把計(jì)數(shù)器賦值為0,等待下一次的取出,然后進(jìn)入對讀出數(shù)據(jù)的處理程序。程序流程圖如圖2所示。
圖2 流量測量流程圖
核心的程序設(shè)計(jì)代碼如下:
void liuliang()
{ "while(dgt;=2)
{ d=0; "b=TH0*256+TL0; "http://讀取頻率
TH0=0x00; TL0=0x00; g=0; } //時(shí)間標(biāo)志位
loop();} "http://調(diào)用流量計(jì)算程序與數(shù)據(jù)轉(zhuǎn)換程序
(2)流量數(shù)據(jù)的處理程序
在預(yù)設(shè)的時(shí)間到了后,取出定時(shí)器的數(shù)值后。為了能夠最大限度的統(tǒng)計(jì)流量,程序當(dāng)中選擇了用1個(gè)整形變量int和一個(gè)long int變量共同來完成對流量數(shù)據(jù)的存儲(chǔ),其中整形變量存儲(chǔ)低3位數(shù)據(jù),長整形變量存儲(chǔ)流體流量的高6位。核心的程序代碼如下:
void loop ()
{uint "zong1;
if(g==0) "http://判斷時(shí)間是否到
{zong=(b/100.0)+zong; } //得出總流量的后三位
g=1; //將標(biāo)志為為1
if(zonggt;=1000) //判斷總流量后三位是否大于1000
{a++; zong=0; } "http://總流量前六位加1,后三位清零
zong1=(int)zong ; //總流量后三位轉(zhuǎn)換為整形
n9=a/100000; " " "http://總流量9位全部分配
n8=a%100000/10000; n7=a%10000/1000;
n6=a%1000/100; n5=a%100/10;
n4=a%10; n3=zong1%1000/100;
n2=zong1%100/10; n1=zong1%10; }
4.結(jié)論
本文基于C語言重點(diǎn)對流量檢測系統(tǒng)的軟件部分進(jìn)行了詳細(xì)的分析和設(shè)計(jì),實(shí)現(xiàn)了對流體流量的自動(dòng)化、精確化測量。
參考文獻(xiàn)
[1]張菁.基于單片機(jī)溫度控制系統(tǒng)方案的研究[J].上海交通大學(xué)學(xué)報(bào),2007.
[2]樓然苗.51系列單片機(jī)設(shè)計(jì)實(shí)例[M].北京:北京航空航天大學(xué)出版社,2003.