本發(fā)明涉及流量檢測領(lǐng)域,是一種基于fpga的科氏質(zhì)量流量計數(shù)字驅(qū)動系統(tǒng),特別是一種對信號進行iir(無限沖擊響應(yīng))數(shù)字濾波,過零檢測判斷信號過零點,三點反向lagrange插值算法擬合過零點計算所需驅(qū)動信號頻率,非線性相位與線性相位結(jié)合做相位跟蹤,利用dds(直接數(shù)字式頻率合成器)輸出驅(qū)動信號的頻率、相位信息,非線性幅值控制算法做驅(qū)動幅值控制,利用mdac(乘法數(shù)模轉(zhuǎn)換器)輸出驅(qū)動信號的幅值信息的科氏質(zhì)量流量計數(shù)字驅(qū)動系統(tǒng)。
背景技術(shù):
:科里奧利質(zhì)量流量計(以下簡稱為科氏質(zhì)量流量計)可以直接測量質(zhì)量流量,是當前發(fā)展最為迅速的流量計之一,具有廣闊的應(yīng)用前景。科氏質(zhì)量流量計由兩部分組成,一是一次儀表,包括流量管、磁電式速度傳感器、激振器和溫度傳感器,二是變送器(又稱二次儀表),包括信號調(diào)理部分、處理部分和驅(qū)動部分。就驅(qū)動部分來說,要求驅(qū)動信號可以快速跟蹤一次儀表中磁電式速度傳感器的信號,使流量管工作在最佳狀態(tài)。驅(qū)動部分的工作方式可分為模擬驅(qū)動、半數(shù)字驅(qū)動和數(shù)字驅(qū)動。當氣液兩相流或多相流發(fā)生時,需要快速地更新驅(qū)動信號,以便及時地向流量管提供足夠的能量。合肥工業(yè)大學研究了基于dsp(數(shù)字信號處理器)的數(shù)字驅(qū)動系統(tǒng)(徐科軍,候其立等.一種科氏質(zhì)量流量計的數(shù)字驅(qū)動跟蹤方法和系統(tǒng),發(fā)明專利,專利號:zl201110331814.x,申請日:2011.10.28.,授權(quán)公告日:2013.5.1.)。在該系統(tǒng)中,dsp承擔流量管驅(qū)動、信號處理、流量計算和外設(shè)控制等任務(wù),正常工作時每500點(對于adc(模數(shù)轉(zhuǎn)換器)采樣頻率為3.75khz,流量管固有頻率為135hz的科氏質(zhì)量流量計來說為133ms,約18個周期)更新一次驅(qū)動信號。當發(fā)生氣液兩相流時,流量管的固有頻率會劇烈變化,驅(qū)動系統(tǒng)可能無法快速跟蹤磁電式速度傳感器信號,會使流量管振動幅值不穩(wěn)定且平均振動幅值偏低。若每隔27ms(約3.6個周期)更新一次驅(qū)動信號,可能會對質(zhì)量流量的計算造成影響。國內(nèi)外研究了采用fpga(fieldprogrammablegatearray,現(xiàn)場可編程門陣列)對科氏質(zhì)量流量計進行驅(qū)動。(1)基于fpga和奔騰ⅲ處理器的數(shù)字驅(qū)動方法英國牛津大學用fpga和奔騰ⅲ處理器雙核系統(tǒng)來做驅(qū)動部分(zamoram,henrymp.anfpgaimplementationofadigitalcoriolismassflowmeteringdrivesystem[j].ieeetransactionsonindustrialelectronics,2008,55(7):2820—2831.)。利用fpga控制adc采集磁電式速度傳感器信號,經(jīng)過數(shù)字濾波后,存于ram(易揮發(fā)性隨機存取存儲器)中;待采集到一定數(shù)據(jù)后,傳輸給奔騰ⅲ處理器;奔騰ⅲ處理器通過sin/cos(正弦/余弦)運算得出驅(qū)動信號所需的頻率和相位信息,通過pi(比例積分)控制得出驅(qū)動信號所需的幅值信息,然后,再傳輸給fpga;由fpga綜合出驅(qū)動信號,并控制dac(數(shù)模轉(zhuǎn)換器)輸出,由激振器控制流量管的振動。但是,這些sin/cos運算加大了軟件的運算量,并且需要開辟較大的存儲空間存放波形數(shù)據(jù);驅(qū)動信號由兩個處理器共同得出,奔騰ⅲ處理器在計算完質(zhì)量流量和密度后再去決定驅(qū)動參數(shù)值,然后傳輸給fpga控制外部dac輸出驅(qū)動信號,控制的及時性有所欠佳;選用的奔騰ⅲ處理器成本較高。(2)基于fpga的科氏質(zhì)量流量計數(shù)字閉環(huán)系統(tǒng)。國內(nèi)北京航空航天大學設(shè)計了基于fpga的科氏質(zhì)量流量計數(shù)字閉環(huán)系統(tǒng)(田婧,樊尚春,鄭德智.基于fpga的科氏質(zhì)量流量計數(shù)字閉環(huán)系統(tǒng)設(shè)計[j].儀表技術(shù)與傳感器,2009,(z1):381-383,392.)。其采用單片fpga作為處理器,不僅承擔了數(shù)字驅(qū)動任務(wù),也承擔了信號處理任務(wù)。fpga需完成數(shù)字濾波、數(shù)據(jù)緩存、fft計算幅值、幅值增益控制、驅(qū)動波形合成等任務(wù),對于單片fpga來說,需要占用較多的邏輯資源,算法運算量大且需要較多的存儲空間;其未給出驅(qū)動信號的更新速度,在流量管固有頻率和阻尼比劇烈變化的氣液兩相流下,若驅(qū)動信號更新的不夠快,驅(qū)動效果不會好。(3)基于fpga+dsp的半數(shù)字式驅(qū)動方法。北京化工大學設(shè)計了基于fpga+dsp的數(shù)字式科氏質(zhì)量流量變送器(許爽.基于fpga和dsp的科氏質(zhì)量流量計變送器設(shè)計[d].北京:北京化工大學,2013.)。其采用模擬電路與數(shù)字電路相結(jié)合的方式,由fpga通過pid(比例積分微分)算法得出驅(qū)動信號幅值的增益,再通過mdac(乘法數(shù)模轉(zhuǎn)換器)讓驅(qū)動信號乘以增益來實現(xiàn)驅(qū)動控制。其乘以增益前的驅(qū)動信號取自磁電式速度傳感器,所以,屬于半數(shù)字驅(qū)動方式,導致流量管啟振速度較慢,而且還難以避免“磁電式速度傳感器小幅值”乘以大增益仍為“小驅(qū)動幅值”的情況,即兩相流發(fā)生時可能會導致停振。(4)合肥工業(yè)大學也研究過基于fpga的科氏質(zhì)量流量計數(shù)字驅(qū)動方法(劉錚.科氏質(zhì)量流量計驅(qū)動系統(tǒng)中關(guān)鍵技術(shù)研究[d].合肥:合肥工業(yè)大學,2016)。其對驅(qū)動系統(tǒng)做了概述,但是,只完成了單路信號采集和頻率計算部分,其中,頻率計算采用了等精度測量的方法。等精度測頻法無法找到信號實際過零點,測頻結(jié)果精度較低,會導致驅(qū)動信號不穩(wěn)定。技術(shù)實現(xiàn)要素:本發(fā)明為了解決上述問題,采用以下技術(shù)方案:基于fpga的科氏質(zhì)量流量計數(shù)字驅(qū)動系統(tǒng),包括放大濾波電路、模數(shù)轉(zhuǎn)換器adc1、模數(shù)轉(zhuǎn)換器adc2、電壓基準源、電壓跟隨器、模數(shù)轉(zhuǎn)換器adc3、dds、mdac、功率放大電路、fpga最小系統(tǒng)、dsp最小系統(tǒng)、saram(單向訪問隨機存取存儲器)、fram(鐵電存儲器)、人機接口、4~20ma電流、串口通信、脈沖輸出和電源模塊。系統(tǒng)上電后,fpga控制dds與mdac發(fā)出具有一定頻率(流量管固有頻率附近)、相位、幅值的驅(qū)動信號至激振器,使流量管做小幅度振動。位于流量管兩側(cè)的兩個磁電式速度傳感器輸出兩路正弦波信號,兩路信號經(jīng)兩路參數(shù)相同的調(diào)理電路放大、濾波后分別被兩個相同型號的模數(shù)轉(zhuǎn)換器同時采樣并轉(zhuǎn)換為數(shù)字量,fpga通過io(輸入輸出)口讀取兩路采樣數(shù)值。由于fpga具有并行執(zhí)行的特性,一邊將兩路信號先存至片內(nèi)ram,待dsp需要數(shù)據(jù)時傳輸給dsp進行質(zhì)量流量計算、外設(shè)控制等;一邊對一路磁電式速度傳感器信號進行數(shù)字濾波,過零檢測,然后利用三點反向lagrange插值算法得出擬合過零點、計算單周期內(nèi)采樣點數(shù)得到信號頻率參數(shù),求取濾波器造成的非線性相位和其它的線性相位得到相位參數(shù),fpga通過io口控制dds輸出驅(qū)動信號的頻率、相位信息;在控制頻率、相位的同時,利用非線性幅值控制算法得到驅(qū)動信號的幅值參數(shù),fpga通過io口控制mdac輸出驅(qū)動信號的幅值信息;dds輸出的信號為驅(qū)動信號源,其輸出經(jīng)放大濾波后送入mdac的模擬輸入端,mdac對其進行增益控制后,再經(jīng)過功率放大,最終將驅(qū)動信號輸出到激振器上,使得流量管在固有頻率處穩(wěn)幅振動。本發(fā)明專利的優(yōu)點是:利用fpga的并行特性,快速更新驅(qū)動信號,半周期更新驅(qū)動信號的頻率、相位信息,單周期更新驅(qū)動信號的幅值信息;利用三點反向lagrange插值算法計算頻率參數(shù),非線性相位與線性相位結(jié)合計算相位參數(shù),用dds輸出驅(qū)動信號的頻率、相位信息,利用非線性幅值控制算法快速而穩(wěn)定的控制幅值增益,用mdac輸出驅(qū)動信號的幅值信息,相對于上述英國牛津大學和北京航空航天大學的驅(qū)動方法來說,本發(fā)明避免了波形合成需要的大量算法;fpga只負責驅(qū)動部分,無需計算質(zhì)量流量,相對于上述英國牛津大學和北京航空航天大學的驅(qū)動方法來說,本發(fā)明加快了驅(qū)動信號的更新速度。附圖說明圖1為本發(fā)明系統(tǒng)的硬件總體框圖。圖2為本發(fā)明系統(tǒng)的信號調(diào)理、采集部分基準源電路。圖3為本發(fā)明系統(tǒng)的數(shù)字驅(qū)動電路。圖4為本發(fā)明系統(tǒng)的信號調(diào)理、采集電路。圖5為本發(fā)明系統(tǒng)的fpga最小系統(tǒng)。圖6為本發(fā)明系統(tǒng)的dsp最小系統(tǒng)。圖7為本發(fā)明系統(tǒng)的fpga與dsp程序總體流程圖。圖8為本發(fā)明系統(tǒng)的fpga程序總體示意圖。圖9為本發(fā)明系統(tǒng)的信號采集傳輸過程示意圖。圖10為本發(fā)明系統(tǒng)的iir濾波算法的流程圖。圖11為本發(fā)明系統(tǒng)的過零檢測算法的流程圖。圖12為有負偏置的磁電式速度傳感器信號。圖13為本發(fā)明系統(tǒng)的lagrange插值算法三點取樣示意圖。圖14為本發(fā)明系統(tǒng)的計算正檢測過零點對之間采樣點數(shù)的流程圖。圖15為本發(fā)明系統(tǒng)的頻率計算算法的流程圖。圖16為磁電式速度傳感器信號與驅(qū)動信號的相位關(guān)系圖。圖17為本發(fā)明系統(tǒng)的相位跟蹤算法的流程圖。圖18為本發(fā)明系統(tǒng)的幅值控制算法的流程圖。本發(fā)明系統(tǒng)硬件框圖如圖1所示。本發(fā)明系統(tǒng)由科氏質(zhì)量流量傳感器(包括磁電式速度傳感器a、磁電式速度傳感器b、激振器、溫度傳感器)、放大濾波電路、adc1、adc2、電壓基準源、電壓跟隨器、adc3、dds、mdac、功率放大電路、fpga最小系統(tǒng)、dsp最小系統(tǒng)、saram、fram、人機接口、4~20ma電流、串口通信、脈沖輸出和電源模塊組成。本發(fā)明系統(tǒng)工作過程為:系統(tǒng)上電后,fpga控制dds與mdac發(fā)出具有一定頻率(流量管固有頻率附近)、相位、幅值的驅(qū)動信號至激振器,使流量管做小幅度振動。位于流量管兩側(cè)的兩個磁電式速度傳感器輸出兩路正弦波信號,兩路信號經(jīng)兩路參數(shù)相同的調(diào)理電路放大、濾波后分別被兩個相同型號的adc1和adc2同時采樣并轉(zhuǎn)換為數(shù)字量,fpga通過io口讀取兩路采樣值。由于fpga具有并行執(zhí)行的特性,一邊將兩路信號先存至片內(nèi)ram,待dsp需要數(shù)據(jù)時傳輸給dsp進行質(zhì)量流量的計算、外設(shè)控制等;一邊對一路磁電式速度傳感器信號進行數(shù)字濾波,過零檢測,然后利用三點反向lagrange插值算法得出擬合的過零點、計算單周期內(nèi)采樣點數(shù)得到信號頻率參數(shù),求取濾波器造成的非線性相位和其它的線性相位得到相位參數(shù),fpga通過io口控制dds輸出驅(qū)動信號的頻率、相位信息;在控制頻率、相位的同時,利用非線性幅值控制算法得到驅(qū)動信號的幅值參數(shù),fpga通過io口控制mdac輸出驅(qū)動信號的幅值信息。dds輸出的信號為驅(qū)動信號源,其輸出經(jīng)放大濾波后送入mdac的模擬輸入端,mdac對其進行增益控制后,再經(jīng)過功率放大,最終將驅(qū)動信號輸出到激振器上,使得流量管在固有頻率處穩(wěn)幅振動。圖2為信號調(diào)理、采集部分電壓基準源。u16為基準源,其輸出經(jīng)運放u17組成的電壓跟隨器,提高了電流輸出能力;c42、c43為輸入輸出濾波電容;c47與u16內(nèi)部電阻構(gòu)成rc濾波器,對輸出進行濾波;c44、c45、c46為輸出濾波電容;c48為退耦電容。圖3為數(shù)字驅(qū)動電路。u21的vout(10腳)發(fā)出具有一定頻率、相位和幅值的信號,磁珠l3、電容c57對電源濾波,電容c63、c60、c61、c62為退耦電容;u21的時鐘采用時鐘源u23,磁珠l4、電容c69對電源濾波,電容c66和電阻r34用于濾除時鐘信號中的高頻尖脈沖;r28、c56、r30為隔直電路,對u21的輸出信號隔直;u22a及r31、r32、c68對u21的輸出信號放大、濾波,磁珠l5、l6、電容c54、c64對電源濾波;u22a的輸出信號送至u19的vref(4腳),u19對其放大,c55為退耦電容,根據(jù)u19的數(shù)據(jù)手冊,設(shè)置u22b和c59進行電流至電壓轉(zhuǎn)換;c58和r29對u19的輸出信號隔直;u20及r33、r35對信號放大,電容c52、c53、c65、c67為退耦電容。圖4為磁電式速度傳感器信號調(diào)理、采集電路。信號rp+接入u2的輸入端,經(jīng)儀用放大器u2放大后送至由運放u3a及外圍電阻、電容構(gòu)成的二階低通濾波器濾波后,再經(jīng)r7、u32構(gòu)成的限幅保護電路送入adc(u30)的輸入端。通過r8輸入信號,r2設(shè)置u2的放大倍數(shù),c2、c5、c13、c15為退耦電容,r5、r6、r1、r11、c6、c10與運放u3a構(gòu)成二階低通濾波器,c3、c7、c12、c14為退耦電容,電容c11用來濾除u30中高頻開關(guān)器件產(chǎn)生的高頻干擾。u30為差分輸入adc1,信號接至ain0(6腳),另一輸入端ain1(7腳)接2.5v基準源;u30所需基準取至外部2.5v基準源;vrefp(4腳)接2.5v基準,vrefn(3腳)接地;u30的數(shù)據(jù)傳輸接口與fpga的io口連接,其中串聯(lián)的電阻r3、r4、r9與u30相應(yīng)管腳輸入寄生電容構(gòu)成rc濾波器,濾除尖峰脈沖;管腳dout接至fpga的io口;電容c8、c9為濾波電容,電容c1、c4、c16、c19為退耦電容。另一路信號lp+經(jīng)過相同原理和結(jié)構(gòu)的調(diào)理電路送到與u30相同型號的adc2(u31)中,不在贅述。u30、u31的時鐘采用相同的時鐘源:外部有源晶振u6;u6產(chǎn)生的時鐘經(jīng)施密特觸發(fā)器u5以提高驅(qū)動能力,然后分兩路送至u30和u31時鐘輸入管腳,磁珠l1、電容c26對電源濾波,電容c17和電阻r13用于濾除時鐘信號中的高頻尖脈沖,電阻r10、r22也是用于濾除尖脈沖。圖5為fpga最小系統(tǒng),包括晶振、jtag、as等。由于fpga引腳眾多,所以分兩幅圖畫出。其中,圖5.1為fpga(u0)的iobank2、iobank3、iobank4、iobank5、iobank6、vcc_int的電路圖,圖5.2包括fpga的iobank1、iobank7、iobank8、pll、config、gnd的電路圖和fpga最小系統(tǒng)相關(guān)的電路圖;u8為有源晶振,電阻r45、電容c58、c59、c60對電源濾波,電阻r46用于濾除時鐘信號中的高頻尖脈沖;u7a和u7b為as配置方式所用芯片,r51、r52、r55、r56均為相應(yīng)數(shù)據(jù)手冊中要求連接的電阻,c61為退耦電容,p5為as接口,r53、r54、r57、r59均為相應(yīng)數(shù)據(jù)手冊中要求連接的電阻,r58為限流電阻,s6為as配置按鍵;p4為jtag接口,r47、r48、r49、r50均為手冊中要求連接的電阻;d11至d21為數(shù)據(jù)手冊中要求連接的保護二極管;r60、r61、r62均為分壓電阻。圖6為dsp最小系統(tǒng),包括晶振、jtag、退耦電容等。u4為有源晶振,為dsp提供時鐘;磁珠l1、電容c37對電源濾波;c38、r15濾除時鐘信號中的尖峰脈沖;u1的57腳接的電阻r12為偏置電流提供通路,u1的的55腳、56腳為內(nèi)部adc基準輸出,需并聯(lián)電容c27、c28到地;p1為jtag接口,r9、r10、r11均是數(shù)據(jù)手冊中要求接的下拉、上拉電阻;電容c1至c10、c12至c26、c29至c34為退耦電容。本發(fā)明專利的程序工作流程如圖7所示為:fpga控制兩個相同型號的adc1和adc2同時采樣并讀取兩路采樣值,由于fpga具有并行執(zhí)行的特性,一邊將兩路信號先存至片內(nèi)ram,待dsp需要數(shù)據(jù)時傳輸給dsp進行質(zhì)量流量的計算、外設(shè)控制等;一邊對一路采樣信號進行iir濾波,過零檢測,然后利用三點反向lagrange插值算法得出擬合的過零點得到信號頻率參數(shù),從rom(只讀存儲器)讀取非線性相位信息、計算線性相位信息得到相位參數(shù),fpga控制dds輸出驅(qū)動信號的頻率、相位信息;在控制頻率、相位的同時,利用非線性幅值控制算法得到驅(qū)動信號的幅值參數(shù),fpga控制mdac輸出驅(qū)動信號的幅值信息。與采用順序執(zhí)行方式的處理器不同,fpga具有并行執(zhí)行的特點,在對信號進行數(shù)字濾波后,對頻率參數(shù)、相位參數(shù)的計算和對幅值參數(shù)的計算是并行執(zhí)行的。磁電式速度傳感器信號是一個正弦波,可根據(jù)信號的檢測過零點來對上述參數(shù)進行更新。對于頻率參數(shù)和相位參數(shù)來說,在磁電式速度傳感器信號的正檢測過零點與負檢測過零點都更新,例如,對于流量管固有頻率為135hz的科氏質(zhì)量流量計來說,其驅(qū)動信號的頻率、相位參數(shù)更新的頻率為270hz。對于幅值參數(shù),只在負檢測過零時更新,例如,對于流量管固有頻率為135hz的科氏質(zhì)量流量計來說,驅(qū)動信號的幅值參數(shù)更新的頻率為135hz。這些參數(shù)的計算不會影響與dsp的通信。這樣,頻率、相位參數(shù)的計算更新、幅值參數(shù)的計算更新和與dsp的通信都是并行執(zhí)行的,相較于順序執(zhí)行的處理器來說,自然可以加快驅(qū)動信號更新的速度。本發(fā)明系統(tǒng)中數(shù)字信號處理的任務(wù)主要是實時對采樣數(shù)據(jù)進行處理,得出驅(qū)動信號所需的參數(shù)后借助外部器件輸出驅(qū)動波形來維持流量管的振動。本發(fā)明系統(tǒng)除了完成驅(qū)動任務(wù)外,還將采集到的數(shù)據(jù)傳輸給dsp做進一步的流量計算、外設(shè)控制等。驅(qū)動程序以fpga為載體,使用veriloghdl硬件編程語言對整個系統(tǒng)進行了設(shè)計。設(shè)計fpga程序時,一般將其分為頂層文件和底層文件,在設(shè)計頂層文件時,采用原理圖輸入的方式,該方式便于識別各個組成功能塊的作用,直觀易懂。根據(jù)各部分的作用,頂層文件可分為多個模塊。如圖8所示,頂層文件中包含了整個驅(qū)動系統(tǒng)的內(nèi)容,有adc控制與數(shù)據(jù)整形組合模塊,dsp通信組合模塊,濾波組合模塊,過零檢測模塊,頻率、相位計算組合模塊,幅值控制組合模塊,dds輸出模塊和mdac輸出模塊。其中,通過adc控制與數(shù)據(jù)整形組合模塊控制兩片adc對兩路模擬磁電式速度傳感器信號進行同步采樣,并將讀回的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù);通過dsp通信組合模塊先將兩路adc采集的數(shù)據(jù)存儲到fpga的片內(nèi)ram中,再根據(jù)與dsp的應(yīng)答信號實時地將數(shù)據(jù)傳輸給dsp;通過濾波組合模塊對一路adc信號進行帶通濾波處理;通過過零檢測模塊檢測濾波后信號的正檢測過零點與負檢測過零點,并輸出相應(yīng)的方波便于后級模塊應(yīng)用;通過頻率、相位計算組合模塊計算出驅(qū)動信號所需的頻率參數(shù)和相位參數(shù);通過幅值控制組合模塊比較出磁電式速度傳感器信號正半周期內(nèi)的幅值,然后運用非線性幅值控制算法計算出驅(qū)動信號所需的幅值參數(shù);通過dds輸出模塊控制片外dds芯片合成具有相應(yīng)頻率、相位參數(shù)的驅(qū)動信號;通過mdac輸出模塊控制片外madc芯片合成具有相應(yīng)幅值參數(shù)的驅(qū)動信號。圖9為信號采集傳輸過程示意圖。本發(fā)明系統(tǒng)選取一款24位的adc,其以15khz的采樣頻率對磁電式速度傳感器信號進行采樣。fpga在向其寫命令以及讀取采樣值時都需通過spi通信方式。adc含有一個同步引腳sync,在對兩片adc控制時,先拉高它們的sync引腳進行初始化配置,完成配置后再將它們的sync引腳同時拉低,延時一段時間后再同時拉高,即可控制兩片adc同時采樣。模數(shù)轉(zhuǎn)換完成后,adc的drdy引腳電平會被拉低,此時由fpga發(fā)送串行時鐘至adc的sclk引腳,在每個串行時鐘的邊沿adc會將數(shù)據(jù)發(fā)送到dout引腳由fpga讀取,在sclk引腳接收完24個串行時鐘后drdy引腳電平會被拉高,等待下一次的轉(zhuǎn)換。利用fpga的并行特性,可同時讀取兩路數(shù)據(jù)。fpga需將采到的兩路數(shù)據(jù)傳輸給dsp做質(zhì)量流量的計算。由于運算速度的限制,dsp可以對采樣頻率為3.75khz的信號進行處理,而fpga控制的兩路adc的采樣頻率為15khz,所以,需對傳輸給dsp的數(shù)據(jù)做抽樣處理。例如,在每4個采樣點中,fpga取一個傳輸給dsp,dsp對抽樣后單路信號的每500點執(zhí)行一次數(shù)據(jù)處理任務(wù),兩路信號共1000個點。fpga先將抽樣后數(shù)據(jù)存至片內(nèi)ram中,待dsp需要時傳送出去。為此,以24位為一個單位,開辟兩個含有1024個單位的內(nèi)存空間ram1與ram2,ram1用于存取一路數(shù)據(jù),ram2用于存取另一路數(shù)據(jù)。dsp需要數(shù)據(jù)時,會向fpga發(fā)送start信號,假設(shè)fpga準備好兩路1000點數(shù)據(jù)并存至ram1和ram2的1至500地址空間,則先將ram1的500點發(fā)送至dsp,再將ram2的500點發(fā)送至dsp;在此期間會有新的抽樣點傳來,由于fpga的并行特性,新的數(shù)據(jù)從ram1和ram2的第501個地址開始存儲,待存至第1000個地址時可再次發(fā)送給dsp。由于1至500地址的數(shù)據(jù)已經(jīng)傳輸完成,有新的數(shù)據(jù)來時將從1地址開始存儲。這樣fpga即可連續(xù)與dsp通信。兩路磁電式速度傳感器信號頻率、幅值相同,相位差很小,一般僅有0至4度,驅(qū)動信號可根據(jù)一路信號得出?,F(xiàn)選取一路信號做相關(guān)驅(qū)動參數(shù)的計算。驅(qū)動任務(wù)用采樣頻率為15khz的數(shù)據(jù)來計算。由于各種干擾,adc采到的信號難免會混入噪聲,這時就需要對信號進行預(yù)處理。磁電式速度傳感器信號的頻率一般小于300hz,在滿水和滿氣的狀態(tài)下固有頻率一般相差不會超過10hz,為此設(shè)計三階iir帶通數(shù)字濾波器,其公式為例如,對于充滿水后流量管的固有頻率為135hz的科氏質(zhì)量流量計設(shè)置數(shù)字濾波器,采樣頻率為15khz,通帶范圍由110hz至160hz,利用matlab得濾波器系數(shù)為:b1=0.010363824637108;b2=0;b3=-0.010363824637108;a1=1;a2=-1.976216940281179;a3=0.979272350725784??梢?,濾波器系數(shù)皆為小數(shù)。小數(shù)可分為定點小數(shù)和浮點小數(shù)。浮點小數(shù)具有表示更加靈活的特點,其又可進一步分為單精度浮點小數(shù)和雙精度浮點小數(shù)。在fpga中無法直接計算小數(shù),需借助quartusⅱ(altera公司的綜合開發(fā)工具)中相應(yīng)的ip核函數(shù)(altera公司開發(fā)的供用戶二次使用的接口函數(shù))。浮點數(shù)計算要比整數(shù)計算消耗更多的資源,出于對計算精度和fpga資源消耗的考慮,本發(fā)明系統(tǒng)在進行小數(shù)運算時一般采用單精度浮點數(shù)的方式。在veriloghdl語言中需先將要計算的數(shù)轉(zhuǎn)換成符合ieee標準的二進制數(shù)后才可做小數(shù)運算。ieee對于單精度浮點數(shù)的表示格式如表1所示。表1單精度浮點數(shù)表示格式浮點數(shù)符號階碼尾數(shù)單精度32位寬[31]-1位[30…23]-8位[22…0]-23位在表1中,階碼表示整數(shù)部分,尾數(shù)表示小數(shù)點后的部分。濾波流程如圖10所示。由于fpga的并行特性,濾波算法的執(zhí)行不會打斷其它功能塊的進行,因此,每讀到一個采樣值后立刻進行濾波處理,實時性很強。從adc讀取來的是一個24位有符號的二進制數(shù),濾波器系數(shù)都是小數(shù),在進行濾波算法前,將adc的整數(shù)采樣值和濾波器系數(shù)都轉(zhuǎn)換為符合ieee標準的單精度浮點數(shù)格式。接著,在單精度浮點數(shù)的基礎(chǔ)上,根據(jù)濾波器差分方程y(n)=b1x(n-1)+b2x(n-2)+b3x(n-3)-a2y(n-1)-a3y(n-2)做相應(yīng)的運算。由于adc的采樣周期遠遠大于濾波算法的執(zhí)行時間,所以,只要有新的采樣點傳來,就可做新一點的濾波算法。在求得濾波結(jié)果后,由于表示形式仍然是單精度浮點數(shù)格式,需將其轉(zhuǎn)換為整數(shù)格式fil(n)傳輸給后級做相應(yīng)運算,而單精度浮點數(shù)格式的結(jié)果則可繼續(xù)做下一點的濾波運算。磁電式速度傳感器信號為一正弦信號,在做頻率、幅值控制的時候,最及時的控制開始時刻就是在信號的檢測過零點,此時剛好可以求得驅(qū)動信號的頻率、相位和幅值信息。如圖11所示為過零檢測流程圖,由于數(shù)據(jù)是24位的,且最高位為符號位,所以,將濾波后數(shù)據(jù)fil(n)的每一點與上一點fil(n-1)的符號位進行比較,若符號相反且當前點為正值則為正檢測過零點,相應(yīng)的標志位置0;若符號相反且當前點為負值則為負檢測過零點,相應(yīng)標志位置1。根據(jù)正檢測過零點和負檢測過零點則可以做后續(xù)算法的處理。驅(qū)動信號是根據(jù)磁電式速度傳感器信號來的,一次儀表處于單相工作狀態(tài)時,流量管會有一個固有頻率點,此時頻率易于跟蹤,但若發(fā)生氣液兩相流,固有頻率劇烈變化,需要驅(qū)動信號的更新速度能快速跟蹤上磁電式速度傳感器信號的變化速度。磁電式速度傳感器信號為正弦信號,單周期內(nèi)具有一個正檢測過零點和一個負檢測過零點,頻率可以半周期更新一次。信號傳輸需經(jīng)過硬件調(diào)理電路,可能會有偏置問題。假設(shè)磁電式速度傳感器信號的偏置為負,如圖12所示,t1、t2、t3、t4分別是信號的實際過零點。半周期更新時,假設(shè)在t2時刻計算t1至t2之間正半周信號的頻率,t3時刻計算t2至t3之間負半周信號的頻率,明顯看出,通過這兩個半周計算出來的頻率不相同,這樣計算出來的不是信號的真實頻率。同樣的,由于制作工藝的原因,在沒有偏置的情況下,有些科氏質(zhì)量流量計的磁電式速度傳感器信號的正半周期和負半周期的時間不一樣,若取半周期計算頻率也不合適。在半周期更新時,在t3時刻計算t1至t3之間一個周期信號的頻率,在t4時刻計算t2至t4之間一個周期信號的頻率,即使信號存在偏置或正半周期與負半周期時間不一致,這樣計算出的也都是單周期信號的頻率值,計算結(jié)果是符合真實信號頻率的。也就是說驅(qū)動信號的頻率信息每半周期更新一次,且更新的頻率值為磁電式速度傳感器信號前一個周期內(nèi)的頻率。傳統(tǒng)信號的頻率測量方法一般有測頻法、測周法、等精度測頻法等。對于低頻信號,一般采用等精度測頻法,但是,由于在系統(tǒng)中處理的都是離散信號,無法剛好得到實際過零點,對頻率的測量精度自然達不到要求。在這里采用三點反向lagrange插值算法進行曲線擬合尋找擬合過零點,從而計算頻率。如圖13所示,t1、t2、t3、t4為實際過零點,空心的點表示的是采樣點。在實際過零點處做三點lagrange插值處理,公式為若用其做插值算法,擬合的曲線是二階的,也就意味著要解二階方程,需要消耗更多的時鐘延時和fpga資源,所以,這里采用了三點反向lagrange插值算法來擬合過零點,將采樣信號的數(shù)值與其對應(yīng)的時刻值交換過來進行插值運算,即采樣值由因變量變?yōu)樽宰兞浚瑫r刻值由自變量轉(zhuǎn)變?yōu)橐蜃兞?。相?yīng)的插值公式為在每個實際過零點之前取兩個點,在實際過零點之后取一個點進行曲線擬合,計算時令x等于0,為了讓零點位置都在0至1之間,令n取1。這樣執(zhí)行插值算法后,擬合出來的過零點都在0至1之間。計算頻率還需求出檢測過零點對之間的濾波后采樣點數(shù)(以下所述采樣點皆為濾波后的),也就是求出正檢測過零點對之間的采樣點up_base和負檢測過零點對之間的采樣點數(shù)down_base。如圖14所示,當檢測到正過零點時,就將標志位up_flag置1,檢測到下一個正過零點后就將up_flag置0,然后在小于采樣周期的延時后將up_flag置1,進行下一輪的采樣點計數(shù)。由于fpga的并行特性,在檢測到up_flag置1后即進行采樣點base1的計數(shù),計數(shù)完成后將其賦給up_base,用于頻率計算;在up_flag置0后即將base1清零,準備下一信號周期的計數(shù)。同理,負檢測過零點對之間的采樣點數(shù)可由上述方法求得。計算采樣點數(shù)用整數(shù)即可完成,插值算法則需要整數(shù)計算和浮點數(shù)計算相結(jié)合。如圖15,正檢測過零點對之間的頻率計算過程如下:先檢測過零點,正檢測過零后開始執(zhí)行插值算法。在插值算法中將可以用整數(shù)運算的部分運算完成后,再用浮點數(shù)方式求出擬合過零點,由于是在正檢測過零點后計算的,此時應(yīng)處于正半周期,接著做正檢測過零點對的兩個擬合過零點位置的相關(guān)運算two_side_zero_up=[(1-zero_up2)+zero_up1]。此后一邊等待負檢測過零點,從而做負檢測過零點對的插值運算,一邊與正檢測過零點對的單周期采樣點數(shù)配合計算出頻率f=fs/[(upbase-1)+two_side_zero_up],其中,fs為采樣頻率。同理,負檢測過零點對之間的頻率可按上述方法算出。查閱dds的數(shù)據(jù)手冊可知,求出頻率值f后還得轉(zhuǎn)換成dds能識別的形式freqreg=f*228/fmclk,freqreg即為應(yīng)載入dds的值,fmclk為dds外接的晶振頻率值。相位補償值的大小與磁電式速度傳感器信號的頻率值有關(guān),每計算出一次頻率值就可得到一個相位補償值,所以驅(qū)動信號的相位信息也是半周期更新一次。磁電式速度傳感器信號與驅(qū)動信號一般要求是同相的,如圖16,t3為實際過零點。驅(qū)動信號1為不對驅(qū)動信號進行相位補償?shù)姆绞?,在t4時刻更新時,其相位從零開始,磁電式速度傳感器信號與驅(qū)動信號顯然不同相,驅(qū)動效果會大打折扣。驅(qū)動信號2對驅(qū)動信號進行了相位補償,在t4時刻更新時,其初始相位是經(jīng)過補償后的相位,并不是零相位,這樣磁電式速度傳感器信號與驅(qū)動信號會處在同相狀態(tài),驅(qū)動效果較佳。用fpga驅(qū)動時,由磁電式速度傳感器的信號計算出驅(qū)動信號的頻率、相位進而輸出到激振器上需經(jīng)過以下這些延時:(1)進入adc前的硬件延時以及adc的模數(shù)轉(zhuǎn)換延時;(2)3階iir數(shù)字濾波器造成的非線性相位滯后;(3)檢測過零點時,檢測出的離散信號的過零點與實際過零點之間的時間差;(4)dds的數(shù)模轉(zhuǎn)換延時及其輸出后級硬件造成的延時;(5)系統(tǒng)程序所造成的時鐘延時。除了濾波器造成的相位差phase_iir是非線性的,其余部分所造成的相位差都與頻率呈線性關(guān)系,即phase_other=(a+b)*f,f為磁電式速度傳感器信號的頻率。硬件延時、模數(shù)轉(zhuǎn)換延時、數(shù)模轉(zhuǎn)換延時和時鐘延時造成的系數(shù)a是固定值,根據(jù)相關(guān)延時可計算出來。實際過零點和檢測過零點的時間差造成的系數(shù)b是不定的,它需根據(jù)檢測出的過零點和lagrange插值求出的擬合過零點比較得出。求取iir數(shù)字濾波器的相頻特性得到其對信號造成的非線性相位差phase_iir為式中,f為信號頻率,fs為采樣頻率。若用fpga計算式(4),將消耗許多時鐘延時和fpga資源。為此,非線性相位差的求取可采用查表方式,在固有頻率點周圍每隔0.01hz存儲一個相位值。由于dds中將360度相位分成了4096份,即每一個單位代表360/4096=0.08789度。而每0.01hz造成的相位差是小于0.08789度的,所以,取0.01hz的分辨率是可以的。如圖17為相位跟蹤的流程圖,先由查表法得出數(shù)字濾波器造成的非線性相位,例如,對于固有頻率為135hz的科氏質(zhì)量流量計,在110hz至159.99hz之間(固有頻率變化不會超過此范圍)每隔0.01hz做一個相位補償。在fpga內(nèi)開辟一個容量為8192的16位單口rom,利用matlab得出每個頻率點對應(yīng)的相位值phase_iir,再根據(jù)phase_iir_dds=phase_iir*4096/360,將其轉(zhuǎn)換成dds可接受的值存入rom中。該rom地址從0開始至8191,每個頻率點對應(yīng)的相位值的地址rom_address=f*100-11000,f為求得的信號頻率。再研究phase_other=(a+b)*f,對于檢測過零點造成的系數(shù)b可這樣求出:設(shè)插值求得的擬合過零點為t,先求得時間差δt=(1-t)/fs,再由(δt*f*360)即可算出對應(yīng)的相位值,所以,就有b=δt*360。a可根據(jù)硬件延時、模數(shù)轉(zhuǎn)換延時、數(shù)模轉(zhuǎn)換延時和程序時鐘延時求得。由phase_other_dds=(a+b)*f*4096/360即可求得輸出給dds的線性相位。最后即可將phase_dds=phase_iir_dda+phase_other_dds寫入dds。fpga采用非線性幅值控制算法對流量管振動幅值進行靈活控制。磁電式速度傳感器信號為正弦波,正弦波是一個奇函數(shù),正幅值與負幅值絕對值大小相等,只需比較出正半周期的信號幅值。即便磁電式速度傳感器信號存在微小偏置,也沒什么影響。比較的方法為在正半周期內(nèi),每接收到一個新點則與上一點的值做大小比較,并保留較大的值,最后可得幅值ak。鑒于fpga的并行運算特性,對濾波后傳過來的每一點都實時處理,這樣就可以在單周期內(nèi)比較出驅(qū)動信號的幅值。也就是說單周期更新一次驅(qū)動信號的幅值信息。對于期望幅值a0與實際幅值ak,求取誤差一般為這樣算的誤差變化范圍小。為此,引入自然對數(shù),對期望幅值a0與實際幅值ak求取對數(shù)后再做差值,即ek=lna0-lnak,使得大時,ek更大;小時,ek更加小,以滿足對動態(tài)特性和穩(wěn)態(tài)特性的要求??刂破鱟(s)采用比例積分(pi)控制器。pi控制器是一種最常用的控制器。它的優(yōu)點是反應(yīng)快、控制及時,其缺點是控制結(jié)果有余差存在。積分控制的特點是控制緩慢,但是,能夠消除余差,只要存在偏差,控制器輸出就會不斷地變化,直至偏差被消除。所以,pi控制器的特點是控制既及時,又能消除余差。其輸出表達式為式中,tsam為采樣周期,kp為比例系數(shù),ki為積分系數(shù)。已知比例部分只與當前的偏差有關(guān),積分部分與過去所有的偏差都有關(guān)。由于小時會導致ek很小,若采用固定kp或與差值變化方向同向的變比例系數(shù)kp法則會使系統(tǒng)即將達到穩(wěn)態(tài)時的調(diào)節(jié)速度稍慢,故采用了與差值變化方向反向的變比例系數(shù)kp法,即ek越小,kp越大。如圖18為非線性幅值控制算法的流程圖。為了盡量減少fpga資源的消耗,算法的一部分采用單精度浮點數(shù)運算,一部分采用整數(shù)運算。檢測到負過零點后說明信號的正半周期已結(jié)束,正半周期內(nèi)的幅值已經(jīng)比較出,此時可取幅值。自然對數(shù)的求取必須要使用浮點數(shù),在此用單精度浮點數(shù)求取。求出的結(jié)果是小數(shù),先將其放大214倍,并轉(zhuǎn)換為整數(shù)。放大是為了后續(xù)算法都進行整數(shù)運算,而放大214倍的目的是其可使最后輸出給mdac的碼值最小變化量為1。對數(shù)誤差ek得出后,則可算出變比例系數(shù)kp,最后執(zhí)行pi算法,并將結(jié)果轉(zhuǎn)換為madc芯片可接受的值輸出。每半周期計算出一次頻率、相位參數(shù),dds更新一次驅(qū)動信號的頻率、相位信息;每單周期計算出一次幅值參數(shù),mdac更新一次驅(qū)動信號的幅值信息。其中對于頻率、相位的控制和對于幅值的控制是并行的,二者的輸出相乘后組成最終的驅(qū)動信號。驅(qū)動信號的更新頻率是以磁電式速度傳感器信號的頻率為依據(jù)的,也就是說磁電式速度傳感器信號的頻率越大,驅(qū)動信號更新的越快。當前第1頁12