馮曉偉,李正生
(第二炮兵工程學(xué)院101教研室,陜西西安710025)
傳統(tǒng)的頻率測量方法有兩種[1-2]:直接測頻法和測周期法。直接測頻法[3]是在給定的閘門信號中填入被測脈沖,通過必要的計(jì)數(shù)電路,得到填充脈沖的個(gè)數(shù),從而獲得待測信號的頻率。測周期法[4]是在一個(gè)信號周期內(nèi)記錄下基準(zhǔn)定時(shí)脈沖的個(gè)數(shù),然后換算成頻率f。而測信號幅度則采用峰值保持電路加ADC完成。筆者在進(jìn)行課題設(shè)計(jì)時(shí),遇到了這樣一個(gè)問題:對某裝備輸出的頻率19±1 kHz、幅度4.3~5.5 V的非標(biāo)準(zhǔn)方波信號,需要測試它的幅度值和頻率。對于非標(biāo)準(zhǔn)方波信號幅度和頻率的測量,傳統(tǒng)方法是采用峰值保持電路和ADC測量幅度值,用脈沖整形電路和計(jì)數(shù)器測量頻率,這樣雖然可以完成測試任務(wù),但是測量電路復(fù)雜且分離,測量方法不能統(tǒng)一。采用幅度和頻率值一體化測量的方法,可以精簡測試電路,簡化測試方法。
單片微型計(jì)算機(jī)的廣泛應(yīng)用,促進(jìn)了測量儀表和測量系統(tǒng)的自動(dòng)化、智能化[5]。使用ADC(Analog-to-Digital Converter,模數(shù)轉(zhuǎn)換器)進(jìn)行數(shù)據(jù)采集是單片機(jī)的一個(gè)典型應(yīng)用。
假如某次對被測周期信號采樣結(jié)果如圖1所示(圖中“*”為采樣點(diǎn))。
圖1 采樣示意圖Fig.1 Sketch map of sampling
這里先定義一個(gè)特征點(diǎn)的概念,特征點(diǎn)是這樣的一個(gè)點(diǎn),它的數(shù)值大于或等于設(shè)定閾值,而它前一個(gè)點(diǎn)的數(shù)值小于閾值,如圖1中的e點(diǎn)和p點(diǎn)。
程序從第一個(gè)測得的點(diǎn)開始,逐點(diǎn)尋找特征點(diǎn),當(dāng)找到一個(gè)特征點(diǎn)后從該點(diǎn)開始計(jì)數(shù)(如圖1中點(diǎn)e),繼續(xù)向后逐點(diǎn)查詢,直到下一個(gè)臨近的特征點(diǎn)(如圖1中點(diǎn)p),則視兩點(diǎn)的時(shí)間間隔為一個(gè)脈沖周期,該周期值與采樣周期和計(jì)數(shù)值的關(guān)系為:
其中,T為被測周期,n為計(jì)數(shù)值,t為采樣周期,其誤差為±t,為減小誤差可多采樣幾個(gè)脈沖周期,然后取平均值。而這些采樣值中的最大值就是被測信號幅度值。
根據(jù)Nyquist抽樣定理[6],只要抽樣頻率大于兩倍信號最高頻率,則整個(gè)連續(xù)信號就可以完整地用它的抽樣值來代替,而不會(huì)丟失掉任何信號。工程中通常以信號最高頻率的8倍以上采樣,這對于普通的信號采集來說已經(jīng)足夠了,然而本系統(tǒng)為了獲得較高的測頻精度,采用ADC以最高頻率的500倍,即10 MHz的采樣頻率對被測信號進(jìn)行采樣。
由PC104通過CPLD譯碼控制ADC以一定的頻率采樣,由FIFO存儲(chǔ)采樣結(jié)果,采樣結(jié)束后進(jìn)行數(shù)據(jù)處理并顯示處理結(jié)果,系統(tǒng)總體設(shè)計(jì)方案如圖2所示。
圖2 系統(tǒng)總體設(shè)計(jì)方框圖Fig.2 Block diagram of sytem overall design
系統(tǒng)電原理圖如圖3所示,U1為ADC1175,它是一種最大采樣速率達(dá)20 MHz的8位高速ADC,其模擬電壓輸入范圍為0~2.5 V,而被測信號的幅值為4.3~5.5 V,故需要先對信號幅度進(jìn)行調(diào)理,系統(tǒng)采用一級減法電路將信號幅度減去3.3 V,得到幅值為1.0~2.2 V的方波信號,方波信號的底端經(jīng)減法器后變?yōu)樨?fù)電壓值,而負(fù)電壓值經(jīng)ADC轉(zhuǎn)換得到的數(shù)值為0,故不影響測頻及測幅結(jié)果,U3為CY7C4261,它是一種容量為16 kB、讀寫速度達(dá)100 MHz的高速FIFO(先進(jìn)先出存儲(chǔ)器),用于存儲(chǔ)ADC的采樣結(jié)果。3.3 V參考電壓由ADR366提供,2.5 V參考電壓由ADR361提供,10 MHz高精度采樣時(shí)鐘信號由有源晶振提供。U2是高密度、高性能的CPLD[7],其型號為EPM7128STC100-10,主要用于對PC104的地址譯碼,完成對ADC芯片的控制及數(shù)據(jù)存儲(chǔ)工作,1JP2為PC104的ISA總線,完成測試板與PC104的通信工作。
圖3 系統(tǒng)原理圖Fig.3 System schematic diagrams
上位機(jī)軟件基于C++Builder 6.0[8]編寫,主要完成系統(tǒng)初始化設(shè)置、總線通信控制、數(shù)據(jù)采樣控制、數(shù)據(jù)的讀取與計(jì)算、結(jié)果顯示等工作,ADC以10 MHz的頻率對被測信號進(jìn)行多個(gè)周期的采樣并同步存儲(chǔ)在FIFO中,當(dāng)FIFO存滿后自動(dòng)停止存儲(chǔ),并由軟件從FIFO中讀取數(shù)據(jù)。由于采樣頻率較高,故在采樣開始后FIFO會(huì)很快存滿,因此不用等待FIFO的中斷信號,而是稍作延遲即可開始讀取數(shù)據(jù)。采樣結(jié)束后的頻率計(jì)算流程圖如圖4所示。
上位機(jī)系統(tǒng)對ISA總線的端口讀寫控制最簡單的就是使用inport(…)和outport(…)函數(shù),或者通過內(nèi)嵌匯編語言的方式來實(shí)現(xiàn),這兩種端口讀寫操作方法在Windows 95/98下面工作很正常,但是在Windows NT/2000/XP上就會(huì)出現(xiàn)非法指令調(diào)用問題,這些非法指令來自于底層對IO端口的直接地址訪問。在Windows 95/98時(shí)代,這些操作是沒有受到保護(hù)的,而在Windows NT/2000/XP就會(huì)出現(xiàn)保護(hù)問題,為了解決這個(gè)問題需要使用第三方提供的WinIO程序庫[9]。WinIO程序庫允許在32位的Windows應(yīng)用程序中直接對I/O端口和物理內(nèi)存進(jìn)行存取操作。通過使用一種內(nèi)核模式的設(shè)備驅(qū)動(dòng)器和其他幾種底層編程技巧,它繞過了Windows系統(tǒng)的保護(hù)機(jī)制。
在需要開始采樣前,程序首先調(diào)用WinIO函數(shù)庫提供的InitializeWinIo()函數(shù)初始化WinIO函數(shù)庫,當(dāng)需要采樣時(shí),程序利用SetPortVal(…)函數(shù)通過CPLD譯碼向ADC、FIFO芯片發(fā)出控制命令,系統(tǒng)進(jìn)行高速采樣存儲(chǔ),采樣完畢再利用GetPortVal(…)函數(shù)讀取FIFO中的采樣結(jié)果并進(jìn)行相應(yīng)處理,處理全部結(jié)束后調(diào)用ShutdownWinIo()清除WinIO庫。
圖4 軟件流程圖Fig.4 Flow chart of software
由于C++Builder的定時(shí)器組件定時(shí)最小單位僅為1 ms,遠(yuǎn)小于系統(tǒng)對ADC 10 MHz的采樣頻率頻率要求,故不能依靠上位機(jī)直接對ADC進(jìn)行采樣控制,而需要采用FIFO作為高速采樣存儲(chǔ)器。
本系統(tǒng)中使用CPLD作為地址譯碼譯碼器,可進(jìn)行高速采樣存儲(chǔ)控制,當(dāng)需要采樣時(shí),上位機(jī)給出正確的地址碼,當(dāng)CPLD檢測到地址碼后,便以控制ADC以10 MHz的頻率控制采樣,并將采樣結(jié)果存儲(chǔ)在FIFO存儲(chǔ)器中,采樣完畢后再由上位機(jī)將FIFO中存儲(chǔ)的數(shù)據(jù)讀出并進(jìn)行后續(xù)處理。
為了驗(yàn)證所述方法的正確性與可行性,制作了硬件電路,并對F05型函數(shù)發(fā)生器輸出的方波信號進(jìn)行實(shí)際測試,測試結(jié)果如表1所示。
表1 ADC頻幅同測法測試結(jié)果Tab.1 The test result of Frequency and Amplitude Measurement by ADC
本文論述了在windows XP系統(tǒng)環(huán)境下基于PC104總線對非標(biāo)準(zhǔn)方波信號頻幅同測的方法。該方法測試簡便、接口簡單、可擴(kuò)展性強(qiáng),由表1所示測試結(jié)果可見,該方法還具有測試精度高等優(yōu)點(diǎn)。工程應(yīng)用中需要同時(shí)測量方波信號[10]的幅度和頻率的場合較多,此方法具有較寬的應(yīng)用前景。
[1] 周霞,趙雪飛,張紅芳,等.基于ARM的等精度測頻技術(shù)在機(jī)組轉(zhuǎn)速測控中的應(yīng)用[J].水電自動(dòng)化與大壩監(jiān)測,2010,34(1):18-20.ZHOU Xia,ZHAO Xue-fei,ZHANG Hong-fang.Application of ARMbased equal precision frequency measurement method to rotational speed measuring and control system[J].Hydropower Automation and Dam Monitoring,2010,34(1):18-20.
[2] 劉國華,何華鋒,田鵬飛,等.基于PC104總線和CPLD的測頻模件設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2010,33(2):86-89.LIU Guo-hua,HE Hua-feng,TIAN Peng-fei,et al.Design of frequency measuring module based on PC104 and CPLD[J].Modern Electronic Technique,33(2):86-89.
[3] 魏鐘記,劉峰,汪銘東.數(shù)字測頻方法及實(shí)現(xiàn)[J].電子測量技術(shù),2006,29(4):28-29.WEI Zhong-ji,LIU Feng,WANG Ming-dong.Digital measure method of frequency and it’s reality[J].Electronic Measurement Technology,2006,29(4):28-29.
[4] 王宏利,程旭德,徐兵,等.基于AT89C51的智能測頻儀設(shè)計(jì)[J].計(jì)算機(jī)測量與控制,2007,15(3):410-412.WANG Hong-li,CHENG Xu-de,XU Bing,et al.Design of intelligent cymometer based on single chip microcomputer AT89C51[J].Computer measurement and Control,2007,15(3):410-412.
[5] 求是科技.單片機(jī)典型模塊設(shè)計(jì)實(shí)例導(dǎo)航[M].2版.北京:人民郵電出版社,2008.
[6] 程佩青.數(shù)字信號處理教程[M].3版.北京:清華大學(xué)出版社,2007.
[7] 宋萬杰,羅豐,吳順君.CPLD技術(shù)及其應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2004.
[8] 程展鵬.Borland C++Builder應(yīng)用開發(fā)技術(shù)解析[M].北京:清華大學(xué)出版社,2003.
[9] 李桂巖,魏賓,賈瑞鳳.在C++Builder中實(shí)現(xiàn)I/O端口的讀寫操作[J].硅谷,2009(17):70-71.LI Gui-yan,WEI Bin,JIA Rui-feng.Realization of I/O port read and writes in C++builder[J].Silicon Valley,2009(17):70-71.
[10] 王坤.基于SVPWM的STATCOM設(shè)計(jì)及實(shí)現(xiàn)[J].陜西電力,2011,39(1):11-15.WANG Kun.SVPWMbased design and realization of STATCOM[J].Shaanxi Electric Power,2011,39(1):11-15.