手機(jī)訪問(wèn)更快捷
更多流量 更易傳播
隨時(shí)掌握行業(yè)動(dòng)態(tài)
網(wǎng)絡(luò)課堂 行業(yè)直播
產(chǎn)品推薦:水表|流量計(jì)|壓力變送器|熱電偶|液位計(jì)|冷熱沖擊試驗(yàn)箱|水質(zhì)分析|光譜儀|試驗(yàn)機(jī)|試驗(yàn)箱
智能電磁流量計(jì)中各功能模塊的劃分和C語(yǔ)言實(shí)現(xiàn)
智能電磁流量計(jì)轉(zhuǎn)換器的工作過(guò)程,不僅要求CPU對(duì)來(lái)自傳感器的流量信號(hào)進(jìn)行采集、處理、運(yùn)算、顯示,完成流量、流速的檢測(cè)。同時(shí)還要控制產(chǎn)生低頻矩形波勵(lì)磁電流、輸出流量的積算總量值和輸出模擬電流、頻率、數(shù)字通訊信號(hào)以及分時(shí)檢測(cè)傳感器的空管信號(hào)等等,所以本系統(tǒng)智能電磁流量計(jì)的軟件部分設(shè)計(jì)是比較復(fù)雜的,根據(jù)上面提到的各個(gè)功能,主要功能可以劃分為阻6’7’“491: 1、單片機(jī)看門(mén)狗保護(hù); 2、數(shù)據(jù)采集部分控制; 3、鍵盤(pán)管理;4、LCD顯示控制; 5、寄存器管理; 6、勵(lì)磁控制; 7、輸入信號(hào)數(shù)字預(yù)處理; 8、流量計(jì)算; 9、報(bào)警; 10、空管及正反向流量檢測(cè); 11、網(wǎng)絡(luò)通信。在這里,要說(shuō)明的是,這些任務(wù)的操作并不總是順序執(zhí)行的,在很多時(shí)候需要并行地操作。如通信、鍵盤(pán)管理等在任何時(shí)候都有可能發(fā)生,流量計(jì)算可能消耗比較多的時(shí)間,數(shù)據(jù)采集需要定時(shí)進(jìn)行等等。當(dāng)然從指令層來(lái)看其程序仍是一條指令接一條指令順序執(zhí)行,但從宏觀上來(lái)說(shuō),這些任務(wù)的處理是并行的。
4.3.1系統(tǒng)主程序
系統(tǒng)的主程序主要由主循環(huán)和初試化程序構(gòu)成,其流程見(jiàn)圖4_3所示,裝置上電復(fù)位或手動(dòng)、硬件復(fù)位后,微處理器80C196KC就要響應(yīng)復(fù)位信號(hào),然后程序從地址0x2080開(kāi)始執(zhí)行。程序入口的個(gè)模塊是程序初始化模塊,包括對(duì)相關(guān)硬件的初始化和相應(yīng)參數(shù)的初始化。硬件初始化主要是完成開(kāi)關(guān)量輸出初始化, 顯示芯片初始化,微控制器的中斷、串行口、定時(shí)器等硬件資源的初始化,主要是對(duì)特殊寄存器的復(fù)制賦值;相應(yīng)參數(shù)的初始化包括對(duì)程序中各個(gè)變量的初始賦值,比如對(duì)鍵值的初始賦值等;而主程序框圖中的各個(gè)子程序的執(zhí)行,指的是對(duì)一些功能模塊的初始設(shè)置,這里主要指LCD顯示模塊的初始工作設(shè)置,在系統(tǒng)開(kāi)始上電或復(fù)位工作以后,應(yīng)在LCD上顯示一些特殊意義的信息,如儀表型號(hào)、生產(chǎn)廠家名稱、商標(biāo)等文字圖案信息。還有其他的子程序初始化包括數(shù)據(jù)采集初始化子程序在系統(tǒng)開(kāi)始工作之前,應(yīng)對(duì)采集所存儲(chǔ)的地址指針清零等工作。在程序的主循環(huán)中,我們采用了檢測(cè)標(biāo)志位的方法,運(yùn)用中斷服務(wù)程序產(chǎn)生各執(zhí)行的標(biāo)志位,通過(guò)對(duì)其標(biāo)志為的判定,來(lái)執(zhí)行相應(yīng)的子程序。圖4-3主程序流程框圖其中,特殊寄存器的操作如下: void Sfrslni《void) { WSr=OxOf; timerl=45536; wsr=Ox00; iocO=Ox01; iocl=Ox04; baud rate=Ox67; baud rate=OxSO; int pend=Ox00; intmask=Ox91; 腚時(shí)器1定時(shí)20ms,其中65.536ms為周期的計(jì)時(shí)//O:hsi.0輸入使能。//5:選擇p2.0為喇,2:定時(shí)器1中斷使能, 3:定時(shí)器2中斷使能,hsi保持寄存器被加載//9600baud的設(shè)置: ,,中斷懸掛清零//7:外部中斷,4:hsi.0中斷,O:定時(shí)器1中斷,int_pendl=0x00; int_maskl=0x00;
4.3.2各中斷服務(wù)子程序
,,中斷懸掛清零“撾tx.rx中斷此智能流量計(jì)軟件設(shè)計(jì)部分主要涉及到的中斷有3個(gè),分別是定時(shí)器1中斷服務(wù)程序,外部中斷服務(wù)程序,HIS.0中斷服務(wù)程序:
1、定時(shí)器1中斷[49-s3J:
定時(shí)器1的中斷服務(wù)程序主要是用來(lái)控制勵(lì)磁方式和生成AD轉(zhuǎn)換信號(hào),在我們這里設(shè)計(jì)的系統(tǒng)中,采用三值低頻矩形波的勵(lì)磁方式,通過(guò)控制negative和positive來(lái)調(diào)節(jié)勵(lì)磁的變化及控制AD轉(zhuǎn)換采集信號(hào),當(dāng)程序初始化以后,一旦開(kāi)啟中斷信號(hào),此程序就一直在運(yùn)行中,這里我們?cè)O(shè)定時(shí)器溢出時(shí)問(wèn)是20ms,以8 個(gè)狀態(tài)作為一個(gè)周期,其流程如下圖4-4: 其相應(yīng)的程序如下: void timerlmanage(void) { if(count==8) 圖4-4定時(shí)器中斷流程圖count=O; Switch(count) ‘:tse0: negative-1;count++;break; casel: adflag-捌;count++;bre出case2: negative---O;count++;break= case3: count-t+;break; case4: positive--1;count++;break; case5: adflag=Oxff;count++;break; casc6: positive---0,count+l-;break; case7: //設(shè)定ad采樣標(biāo)志位adflag //設(shè)定ad采樣標(biāo)志位adflag count++;break; 出fault; ’ 由此我們可以得到單片機(jī)控制的勵(lì)磁低頻三值波為: Negative:廠—]廠—] Positive:廠—] 勵(lì)磁方式:
2、外部中斷服務(wù)程序:
外部中斷服務(wù)程序的執(zhí)行,主要用來(lái)控制對(duì)ADS7806轉(zhuǎn)換器的數(shù)據(jù)讀取,因?yàn)橛袑?duì)A/D轉(zhuǎn)換讀取的實(shí)時(shí)性,我們用外部中斷來(lái)完成這個(gè)功能,部分程序如下陋郴s】: #pragma interrupt(adbusy 2n { RC-=I; BYTE--O; ,·進(jìn)入讀模式,選擇高字節(jié)+/ uh=*(unsigned char*)adcs; /.讀取轉(zhuǎn)換結(jié)果的高8位’, BYTE=l; /.選擇低字節(jié)·, ul=’(unsigned char*)adcs&OxfO; ,’讀取轉(zhuǎn)換結(jié)果的低4位’, u=uh’256+ul;if(u>--0x0800) II=u脅固00; ,.如果為負(fù)值,則符號(hào)擴(kuò)展., Atray[i]=u; I++: ADflag=0xff; ,·數(shù)據(jù)讀取后的保存., ,.AD轉(zhuǎn)換標(biāo)志位., )ADS7806u的具體轉(zhuǎn)換工作可以參考第三章第2節(jié),在這里,我們?cè)O(shè)定了連續(xù)采集N個(gè)點(diǎn)的采集方式,當(dāng)ADflag=0xff時(shí),設(shè)定的ADS7806開(kāi)始工作,進(jìn)行模擬信號(hào)的采樣轉(zhuǎn)換工作,R/C為低電平,然后等待轉(zhuǎn)換的完成,BUSY產(chǎn)生高電平, 所以使得外部中斷服務(wù)程序的執(zhí)行。麗對(duì)于主程序中對(duì)AD的管理程序見(jiàn)如下: while(adflag=--Ox田//ad轉(zhuǎn)換程序{ adflag--0x00; ,,設(shè)置轉(zhuǎn)換標(biāo)志位uh=’(unsigned char‘)adcs;,,i筮中C8位,啟動(dòng)AD采樣轉(zhuǎn)換R/C=0; while(!adflag) ,,等待中斷,完成AD的讀取{ ); if(i--N) /厥N個(gè)采集點(diǎn){ i--1; adflag--0x00; } ’ 3、HIS.0中斷服務(wù)程序: q P ——卜—+一圖4-5按鍵過(guò)程中接觸電阻變化情況HIS。0中斷服務(wù)程序主要完成對(duì)鍵盤(pán)管理工作,對(duì)于鍵盤(pán)處理,包括硬件和軟件兩部分,硬件電路可以參考第三章第3節(jié),而對(duì)于軟件的處理,主要包括識(shí)鍵; 譯鍵及可能的鍵義分析。因?yàn)榘存I是機(jī)械結(jié)構(gòu),在鍵閉合與彈開(kāi)的時(shí)候,往往會(huì)產(chǎn)生抖動(dòng),若系統(tǒng)處理不好,一次按鍵會(huì)被誤認(rèn)為是連續(xù)按了多次鍵。因此, 必須對(duì)按鍵的抖動(dòng)作相應(yīng)的處理。圖舡5是一個(gè)典型的按鍵過(guò)程中的觸點(diǎn)電阻變化情況。一般按鍵抖動(dòng)時(shí)間大約10~20ms,因此,處理程序在按鍵穩(wěn)定后再檢查鍵的信息。當(dāng)然,克服按鍵抖動(dòng)常用的方法有兩種:一種是用硬件,即在每個(gè)鍵上加RC濾波電路或用一個(gè)RS觸發(fā)器組成防抖動(dòng)的電路,另一種方法是用軟件延時(shí)程序,待按鍵狀態(tài)穩(wěn)定后(10--20ms)再去讀取信息,從而防止誤判斷。在本系統(tǒng)中,我們采取的是軟件消除鍵盤(pán)抖動(dòng)的方式,當(dāng)有按鍵下按時(shí),就會(huì)有一個(gè)HIS.0的中斷,在中斷服務(wù)程序里,先有一定的延時(shí),這里我們?cè)O(shè)為10ms, 然后再進(jìn)行鍵值的讀取。HIS.0的中斷服務(wù)程序如下【““j“圳: 卻ragma interrupt(keymauage=4) { int_mask=intmask&Oxef; f}屏蔽HSIO; delay_lores; keyvalue=’key_cs; KeyShowld=0xff; int_pending=int pending&0xef;腑苛中斷懸掛寄存器HSIO位; int_mask=Ox91; ,,取消屏蔽的HSIO; }
4.3.3系統(tǒng)軟件其他功能模塊的開(kāi)發(fā)
一、看門(mén)狗陋”,刪
WATCHDOG(俗稱“看門(mén)狗”)是單片機(jī)抗干擾的軟件措施,它具有的特點(diǎn)是本身能獨(dú)立工作,基本不依賴于CPU,CPU只在一個(gè)固定的時(shí)問(wèn)問(wèn)隔內(nèi)與其打一次交道,表明整個(gè)系統(tǒng)“目前尚屬正常”;另一個(gè)一個(gè)特點(diǎn)是當(dāng)CPU落入死循環(huán)后,能及時(shí)發(fā)現(xiàn)并使整個(gè)系統(tǒng)復(fù)位。我們這里采用的是W蛆℃HDOG硬件電路配合的措施,并不是純軟件的WATCHDOG系統(tǒng)。一般的。WATCHDOG硬件電路為一獨(dú)立于CPU之外的單穩(wěn)部件,可用單穩(wěn)電路構(gòu)成,也可用自帶脈沖源的計(jì)數(shù)器構(gòu)成。CPU正常工作時(shí)每隔一段時(shí)間就輸出一個(gè)脈沖,將單穩(wěn)系統(tǒng)觸發(fā)到暫穩(wěn)態(tài)。當(dāng)CPU陷入死循環(huán)后,再也不去觸發(fā)單穩(wěn)系統(tǒng)了,單穩(wěn)系統(tǒng)就可順利返回穩(wěn)態(tài)。利用它返回穩(wěn)態(tài)時(shí)輸出的信號(hào)作為復(fù)位信號(hào),就可以使CPU退出死循環(huán)。這其中對(duì)于“喂狗”時(shí)機(jī)的考慮,也就是指復(fù)位“看門(mén)狗”,一般安排在等待查詢的循環(huán)體內(nèi)部、耗時(shí)很大的函數(shù)體內(nèi)部或主程序任務(wù)隊(duì)列中,下面就是一個(gè)“喂狗”的程序: void ClrRst(void) { unsigned char temp; if(RelyConFlag—Oxm{ temp=ioportl; temp=temp&Oxef ioportl=lemp; } }
二、輸入處理及流量計(jì)算【枷拈】
由于流量?jī)x表采集到的數(shù)據(jù)與實(shí)際流量值間只有線性的對(duì)應(yīng)關(guān)系,它們的單位并不相同,流量?jī)x表不能將采集到的數(shù)據(jù)直接作瞬時(shí)流量數(shù)據(jù)使用,必須對(duì)其進(jìn)行必要的轉(zhuǎn)化。此模塊就是用來(lái)將采集到的數(shù)據(jù)轉(zhuǎn)化為流量數(shù)據(jù),其程序流程如圖4-6所示。由于外界隨機(jī)干擾的影響,系統(tǒng)采集到的數(shù)據(jù)有時(shí)也會(huì)隨機(jī)偏離實(shí)際的流量值。為了得到準(zhǔn)確的數(shù)據(jù),我們?cè)谙到y(tǒng)對(duì)數(shù)據(jù)進(jìn)行處理前采用數(shù)字濾波來(lái)濾除干擾的影響。此外,為了消除測(cè)量信號(hào)與實(shí)際流量值間非線性誤差的影響, 我們對(duì)采集到的數(shù)據(jù)實(shí)施了非線性補(bǔ)償。[互口@ 圖4-6運(yùn)算子程序框圖數(shù)字濾波實(shí)際上是一種程序?yàn)V波。它通過(guò)一定的計(jì)算程序,減少干擾在有用信號(hào)中的比重。與常規(guī)的硬件模擬濾波器相比,有以下幾個(gè)優(yōu)點(diǎn):
1)N為用程序?yàn)V波,無(wú)需硬件設(shè)備,且可多通道共享一個(gè)濾波器(共同調(diào)用同一個(gè)子程序);
2油于不用硬件設(shè)備,各回路間不存在阻抗匹配等問(wèn)題,故可靠性高,穩(wěn)定性好;
3)可以對(duì)頻率很低的信號(hào)濾波,克服了模擬信號(hào)濾波的缺陷.且可根據(jù)需要選擇不同的濾波方式,或改變?yōu)V波器的參數(shù),方便、靈活。因此數(shù)字濾波得到了廣泛利用。
數(shù)字濾波主要有以下幾種方法:
1、程序判斷濾波
當(dāng)采樣信號(hào)由于隨機(jī)干擾、誤檢測(cè)或變送器不穩(wěn)定引起嚴(yán)重失真時(shí),可采用程序判斷濾波。程序判斷濾波是根據(jù)生產(chǎn)經(jīng)驗(yàn),確定出兩次連續(xù)采樣輸入信號(hào)可能出現(xiàn)的偏差,若超過(guò)此偏差值,認(rèn)為是虛假的干擾信號(hào)應(yīng)該去掉,否則保留該采樣值。基本程序是比較判斷,其中還可分為限幅和限速兩種方法。
2、中值濾波
中值濾波是對(duì)連續(xù)采樣輸入的三個(gè)信號(hào)進(jìn)行比較后取中間值。設(shè)三次采樣輸入分別為yl,Y2,y3若Y。<y2<),3,則取),2為本次采樣有效信號(hào)。中值濾波對(duì)偶然因素引起的脈沖性干擾十分有效。對(duì)緩慢變化的過(guò)程參數(shù)采用此法有良好的效果,但不宜用于快速變化的過(guò)程參數(shù)。
3、算術(shù)平均值濾波
算術(shù)平均值濾波是尋找一個(gè)Y值,使該值與各采樣值間的誤差的平方和為最小,即“曲酬叫抄t川㈩由一元函數(shù)求極值的原理可求得y a搬叫㈤式中%為第k次采樣值;為采樣次數(shù);Y為Ⅳ次采樣的算術(shù)平均值。顯然,N越大,結(jié)果越準(zhǔn)確,但計(jì)算時(shí)間也越長(zhǎng)。算術(shù)平均值濾波將Ⅳ次采樣值同等對(duì)待,這就削弱了當(dāng)前采樣值在程序中的比重,有時(shí)為了提高濾波效果,將各次采樣值取不同的比例系數(shù),然后再相加, 這種方法又常被稱為加權(quán)平均濾波,其運(yùn)算表達(dá)式為Y一羅c。墨(4-3)式中q為比例系數(shù),它應(yīng)該滿足了q=1,一般情況下,采樣次數(shù)越靠后,Ci取的比例越大,這樣可提高新近采樣值在平均值中的比重。
4、一階慣性濾波程序
無(wú)源濾波器RC電路是模擬量輸入通道常用的濾波方法,但對(duì)于低頻干擾卻因?yàn)镽C參數(shù)難以實(shí)現(xiàn),往往不能取得良好的效果。而一階慣性濾波是一種以數(shù)字形式實(shí)現(xiàn)低通濾波的動(dòng)態(tài)濾波法。在濾波時(shí)間常數(shù)要求較大的場(chǎng)合,這種方法尤為實(shí)用。己知RC低通濾波器的濾波常數(shù)為GG)-l,6)/xG)-V∞s+1) (4.4) 其中,L-RC為低通濾波器的時(shí)間常數(shù)。將上式離散后可得YI一(1一aJyI_l+O口ft(4-5) 這就是一階慣性濾波的數(shù)字表達(dá)式。兒,兒。分別為第k次及t-1次采樣濾波后濾波器輸出值,濾波系數(shù)口-1-e—r/r1,T為采樣周期,當(dāng)r遠(yuǎn)小于L時(shí),口.r/L。在程序?yàn)V波時(shí),可通過(guò)實(shí)驗(yàn)選擇適當(dāng)?shù)腖值,直到被檢測(cè)的信號(hào)不產(chǎn)生明顯的紋波為止. 通過(guò)對(duì)上面幾種數(shù)字濾波方法的分析、探討,我們發(fā)現(xiàn)平均值濾波方法適用于對(duì)流量信號(hào)的平滑處理。流量信號(hào)總是在某一數(shù)值范圍內(nèi)上下波動(dòng),有一個(gè)平均值存在,采樣一點(diǎn)是不準(zhǔn)確的,平滑程度取決于N,隨著N增大,平滑度提高, 但響應(yīng)速度降低。為了進(jìn)一步提高濾波效果,我們采用一種新的濾波方法,即將中值濾波法和平均值濾波法相結(jié)合,這種濾波方法稱為復(fù)合濾波。其設(shè)計(jì)思想是,連續(xù)采樣N 次,把采樣值按順序排隊(duì),去掉值和最小值后,把N-2次采樣求平均值。這樣既可以去掉脈沖性干擾,又可以濾掉慢隨機(jī)起伏信號(hào)。
三、電磁流量計(jì)LCD顯示№。”·61J
顯示器對(duì)于儀表來(lái)說(shuō)就像眼睛對(duì)于人來(lái)說(shuō)一樣。良好的顯示界面是智能化儀表的發(fā)展趨勢(shì)。在本項(xiàng)目的設(shè)計(jì)中,我們采用了TRULY sEMIcoNDucToRS LTD的MsD-G12864點(diǎn)陣圖形示液晶顯示器來(lái)顯示數(shù)據(jù)信息,此液晶顯示的工作原理方面, 可以見(jiàn)第三章第五節(jié)LCD液晶顯示模塊部分,在軟件部分的設(shè)計(jì)中,主要討論液晶模塊的初始化、流體流速的顯示,流體累積流量的顯示和漢字的顯示等信息。按設(shè)計(jì)的要求,在正常運(yùn)行和顯示狀態(tài)下,LCD能夠設(shè)置瞬時(shí)流量、累積流量及其單位,在查詢?cè)O(shè)置參數(shù)或參數(shù)設(shè)置狀態(tài)下,應(yīng)能顯示相應(yīng)的漢字提示、操作菜單和被顯示或修改的參數(shù)值。顯示功能模塊由鍵盤(pán)消息和運(yùn)算子程序后產(chǎn)生驅(qū)動(dòng), 并根據(jù)狀態(tài)變量做出不同的反應(yīng)。下面給出了液晶顯示清屏初始化部分的程序: void IxdInitCs(unsigned char CS.unsigned int WrCommandAddr,unsigned洫WrDataAddr)unsigned char x,y; unsigned char+led; led=(u∞igned char’)WrCommandAddr, *lcd=0x3£,/控制顯示開(kāi)關(guān),0011111x,O表示關(guān),1表示開(kāi); *lcd;OxcO; ,,設(shè)置顯示的起始行。llxxxxxx for(xfOxbS;x<fOxbf;x++) ,,設(shè)置頁(yè)值1011 lxxx { . LcdWaitBusyC_,s(cs); led=(unsigned char+)WrConl】mandAddg ’led=x: for(yfOx40;y<=Ox7f;y++1 ,/設(shè)置列值01xx xxxx, { lxdWaitBusyCs(cs); led=(unsigned char’)WICommandAddr, ‘led2 y; lxaWCaimusyCs(cs); led=(unsigned char’)WrDataAddr, ’lcd=Ox00; ) ’
相關(guān)產(chǎn)品
免責(zé)聲明
客服熱線: 13199863987
加盟熱線: 13199863987
媒體合作: 0571-87759945
投訴熱線: 0571-87759942
下載儀表站APP
Ybzhan手機(jī)版
Ybzhan公眾號(hào)
Ybzhan小程序