999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于FPGA和STM32的脈寬頻率測量方法

2017-04-12 09:20:59
實驗室研究與探索 2017年2期
關鍵詞:測量信號檢測

潘 宇

(白城師范學院 物理學院, 吉林 白城 137000)

基于FPGA和STM32的脈寬頻率測量方法

潘 宇

(白城師范學院 物理學院, 吉林 白城 137000)

為準確測量高頻信號的頻率,克服STM32F103輸入捕獲模式下測得頻率最高為80 kHz的缺點。提出用FPGA對高頻信號進行分頻,用軟件編程調整分頻因子,將輸入高頻信號分頻到80 kHz以下,然后輸入給STM32F103,采用脈寬測量法測得頻率。為提高測量精度,采用多次采集,并冒泡排序,去掉部分最大、最小值,用剩余值取均值的濾波算法提高測量頻率的精度。最后將測量值與FPGA的分頻倍數相乘即可得到實際頻率。測試結果表明:該方法實現簡單、測量精度高、頻率高,有一定的實用價值。

頻率測量; 脈寬測量法; 均值濾波算法; 分頻

0 引 言

在儀器儀表應用中,經常要檢測信號的頻率。目前,常用的檢測方法有以下幾種:① 閘門法,即1 s內測得的信號跳變的次數,由于毛刺等干擾信號,會存在一定的誤差。② 等精度測量法,設置2個同步閥門,同時對測量信號和基準信號進行測量,其計數比就是頻率比。因為基準信號頻率已知,所以乘以頻率比就是測量信號的頻率。該方法對硬件電路設計要求較高,要求嚴格同步。③ 測量正脈寬方法,要求正脈寬的占空比已知,一般為50%。測得正脈寬的寬度后乘以2就是周期,對周期取倒數,就可得到頻率[1-3]。

以上方法都要用到計數器,計數器的頻率與處理器的主頻相關。比如STM32F103,其主頻達到72 MHz,通過實驗測試可知,用捕獲正脈寬的方法測試輸入信號的頻率時,最高只能達到80 kHz。用其他處理器也會遇到這個問題。因此,為了有效提高測量信號的頻率,采用對高頻信號分頻的方法來降低頻率,通過FPGA的軟件編程實現任意分頻。又因為FPGA技術發展迅速,主頻最高可以到GHz。因此將FPGA與STM32相結合,可使測量的頻率范圍大大提高,可達到幾十MHz甚至上百MHz。 為了進一步提高測量的精確度,加入均值濾波算法,連續采集100次,然后冒泡排序,將最大值和最小值各去掉20個,用剩余的60個取平均值。這樣就可有效去除干擾,大大提高測量頻率的精度。

1 系統設計

1.1 設計框圖

系統設計框圖如圖1所示。圖中首先對輸入的信號分頻,分頻因子用VHDL編程語言實現。將分頻后得到的低頻信號輸入處理器STM32F103RBT6,采用正脈寬測量法和改進的均值濾波算法測得該信號的頻率,將其通過串口送到電腦上顯示[4-8]。

圖1 系統框圖

1.2 FPGA分頻軟件設計

將要檢測的信號作為輸入信號輸入FPGA。分頻器就是將高頻信號進行分頻,得到較低頻率的信號。分頻系數為

(1)

式中:Fin為輸入信號頻率;Fout為輸出信號頻率[9-12]。

在VHDL語言程序設計時,定義一個N位的計數器,對輸入的時鐘脈沖進行計數,計數結果的第N-1位就是對輸入時鐘的2的N次冪分頻。將相應的位數取出即可得到分頻時鐘。在VHDL下編寫的程序代碼如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY test IS

PORT (clk : IN STD_LOGIC;

clk_div2 : OUT STD_LOGIC;

clk_div4 : OUT STD_LOGIC;

clk_div8 : OUT STD_LOGIC;

clk_div16 : OUT STD_LOGIC);

END test;

ARCHITECTURE rtl OF test IS

SIGNAL count:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS(clk)

BEGIN

IF (clk'event AND clk='1') THEN

IF(count="1111") THEN

Count <= (OTHERS =>'0');

ELSE

Count <= count +1;

END IF ;

END IF ;

END PROCESS;

clk_div2 <= count(0);

clk_div4 <= count(1);

clk_div8 <= count(2);

clk_div16 <= count(3);

END rtl;

上述代碼可實現2、4、8、16分頻。若想實現更高分頻,只需要適當的修改參數即可。

1.3 STM32F103軟件設計流程圖

主控采用STM32F103RBT6,基于Cortex-M3內核,是32位的微處理器。主頻為72 MHz,有TIM2、TIM3、TIM4、TIM5共4個通用定時器。每個定時器都有4個獨立的通道,這些通道都可以用來作為輸入捕獲通道使用。在軟件編程時使用TIM2的通道1作為檢測信號輸入端。串口與電腦相互連接,將測得的數值傳送到電腦上顯示。

軟件設計流程圖如圖2所示, 圖中將經過FPGA分頻的檢測信號接入STM32的TIM2的通道1,首先初始化串口為460800,N,8,1.然后初始化定時器TIM2為輸入捕獲模式,采用1 MHz的頻率計數,測到的計數初值剛好對應的是1 μs,如果測到計數值是10,則為10 μs。當檢測到上升沿時啟動定時器計數;當捕獲到下降沿時,停止計數。

圖2 軟件設計流程圖

1.4 初始化代碼

串口初始化代碼如下:

void uart_init(u32 pclk2,u32 bound)

{

float temp;

u16 mantissa;

u16 fraction;

temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV

mantissa=temp; //得到整數部分

fraction=(temp-mantissa)*16; mantissa<<=4;

mantissa+=fraction;

RCC->APB2ENR|=1<<2; //使能PORTA口時鐘

RCC->APB2ENR|=1<<14; //使能串口時鐘

GPIOA->CRH&=0XFFFFF00F;//IO狀態設置

GPIOA->CRH|=0X000008B0;//IO狀態設置

RCC->APB2RSTR|=1<<14; //復位串口1

RCC->APB2RSTR&=~(1<<14);//停止復位 USART1->BRR=mantissa; // 波特率設置

USART1->CR1|=0X200C; //1位停止,無校驗位.

if EN_USART1_RX //如果使能了接收

USART1->CR1|=1<<5; //接收中斷使能 MY_NVIC_Init(3,3,USART1_IRQn,2);//設置中斷優先級

endif

}

定時器2輸入捕獲初始化程序:

void TIM2_Cap_Set(u16 arr,u16 psc,u8 ch)

{

RCC->APB1ENR|=1<<0; //TIM2 時鐘使能

RCC->APB2ENR|=1<<2; //使能PORTA時鐘

TIM2->ARR=arr; //設定計數器自動重裝值

TIM2->PSC=psc; //預分頻器

switch (ch)

{

case 1: //select PA0 GPIOA->CRL&=0XFFFFFFF0; GPIOA->CRL|=0X00000008;

GPIOA->ODR|=0<<0;//PA0 下拉

TIM2->CCMR1|=1<<0;//CC1S=01 TIM2->CCMR1|=1<<4;

TIM2->CCMR1|=0<<2;

TIM2->CCER|=0<<1; /CC1P=0 BIT1=0 上升沿捕獲 BIT1=1 下降沿捕獲

TIM2->CCER|=1<<0; TIM2->DIER|=1<<1; //允許捕獲中斷CC1IE:BIT1=1 允許捕獲/比較1中斷 break;

}

TIM2->DIER|=1<<0; //允許更新中斷TIM2->CR1|=0x01; //使能定時器2

MY_NVIC_Init(2,0,TIM2_IRQn,2);

}

捕獲部分關鍵代碼:

if(TIM2CH1_CAPTURE_STA&0X80)//成功捕獲到了一次高電平

{temp=TIM2CH1_CAPTURE_STA&0X3F;

temp*=65536;

temp+=TIM2CH1_CAPTURE_VAL;//得到總的高電平時間

printf("HIGH:%d us ",temp/72);//打印總的高點平時間

TIM2CH1_CAPTURE_STA=0;//開啟下一次捕獲

}

對上述代碼重復調用100次,得到100次的值,然后冒泡排序,去掉最大值和最小值各20個,用剩余的值求均值,就可得到被測信號的周期,將其乘2取倒數,就可得到頻率[13]。

2 測試結果

2.1 FGPA分頻測試結果

在Quartus8.0下,用VHDL編程,并設置好相應的參數后,仿真運行,可得到如圖3所示[14-16]波形。在圖中,對輸入信號CLK分別實現了2、4、8和16分頻。

圖3 分頻圖

圖4所示是經16分頻后輸入給STM32的80 kHz波形。用示波器測得的頻率是80 kHz,由于示波器誤差,占空比測得是50.4%,而實際是50%。

圖4 分頻后產生的80 kHz波形

2.2 頻率測試結果

在Keil下用C語言編程,將80 kHz的方波輸入給STM32的PA0,對PA0輸入信號進行脈寬測量,并經過改進的均值濾波算法得到的頻率,通過串口助手顯示結果如圖5所示。從圖中可以看出,基本上沒有誤差。實際信號的頻率是:80×16=1 280 kHz。

圖5 串口顯示的測量頻率

3 結 語

本文提出了一種頻率檢測的新方法,為有效提高檢測頻率的范圍,采用高速FPGA軟件編程分頻的方法,將高頻信號頻率降低為低頻信號。輸入給STM32,利用STM32定時器的捕獲功能測量正脈寬的寬度,以此得到信號的周期,對其求倒數及得到頻率。為有效提高測量的精度,采用改進的均值濾波算法,經多次測量排序,并去除干擾比較大的數值后求均值,提高了測量的精度。經測試,該方法能夠有效提高測量頻率的范圍,可測量較高的頻率,并且精度較高,有一定的實用價值。

[1] 應毓海. FPGA 高精度測量頻率研究[J].低溫與超導,2014,42(3):79-82.

[2] 陳壽法,王中鵬. 等精度頻率測量的同步門電路改進設計[J]. 電測與儀表,2015,52(18): 90-95.

[3] 張天恒,葉 偉. 基于SOPC的便攜式高精度頻率儀設計[J].儀表技術與傳感器,2015(5):34-37.

[4] 江 修,經亞枝,張煥春.用等精度測頻方法實現振弦式傳感器頻率測量[J].傳感器技術,2001,20(6):53-55.

[5] 黃國剛,陳 明,張 朋.聲表面波CO氣體傳感器高精度頻率測量研究[J]. 計算機測量與控制,2009,17(6):1033-1038.

[6] 沈 偉,王軍政,汪正軍.一種基于信號補償的頻率測量方法[J].儀器儀表學報,2010,31(10):2192-2197.

[7] 劉 婭, 李孝輝, 王玉蘭. 一種基于數字技術的多通道頻率測量系統[J]. 儀器儀表學報,2009,30(9):1963-1968.

[8] 汪正軍,潘 磊,紀國瑞. 基于離散相位差檢測的頻率測量方法[J]. 儀器儀表學報,2013,34(5):994-999.

[9] 梁文海,麥 文,張 健,等. 一種高精度頻率測量的研究與實現[J]. 四川師范大學學報(自然科學版),2008,31(3): 376-378.

[10] 牟龍華,邢錦磊. 基于傅里葉變換的精確頻率測量算法[J].電力系統自動化,2008, 32(23):67-70.

[11] 杜玉環,郭迎清.基于LabVIEW的FFT光纖渦輪流量測量系統研究[J].儀表技術與傳感器,2015(11):56-58.

[12] 閆 珺, 王淑紅. 一種基于軟件鎖相環的電網頻率動態檢測方法[J]. 電測與儀表,2015,52(24): 56-59.

[13] 李月琴,裴 麗.多級高精度可調諧的瞬時頻率測量方法[J].中國激光,2015,52(24): 1-8.

[14] 孟 卓,溫 和. 基于復化梯形的準同步采樣頻率測量算法[J]. 中國電機工程學報,2015,35(10): 2445-2453.

[15] 易 藝,岳慶英.基于FPGA的便攜式課外實驗儀設計與實現[J]. 實驗技術與管理,2016,33(1): 86-90.

[16] 薛海東, 郭迎清.基于DSP的高精度測頻方法與軟件設計[J]. 傳感器與微系統,2016,35(1): 117-120.

Pulse Width Frequency Measurement Method Based on FPGA and STM32

PANYu

(Department of Physics, Baicheng Normal College, Baicheng 137000, Jilin, China)

In order to accurately measure the frequency of high frequency signals, overcome the shortcomings of the highest measured frequency is 80 kHz under the STM32F103 input capture mode. The paper proposed to use FPGA to divide the high frequency signal, and use software to adjust the factor of frequency division, the input high frequency signal can be divided and every component is below 80 kHz, then STM32F103 can measure them. In order to improve the measurement precision, we apply the repeated acquisition and bubble sorting, and then remove the maximum and minimum values, and take the average for the remaining values. The method improves the accuracy of frequency measurement. Finally, the measured value can be multiplied with the frequency division of FPGA to get the actual frequency. The test results show that the method is simple and has high precision and high frequency, it has certain practical value.

frequency measure; pulse width measurement; average filtering algorithm; frequency division

2016-05-12

潘 宇 (1982-), 男, 吉林白城人,碩士,講師, 主要研究方向:電子信息工程。

Tel.:15590795511; E-mail: 82048492@qq.com

TP 216

A

1006-7167(2017)02-0083-04

猜你喜歡
測量信號檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
信號
鴨綠江(2021年35期)2021-04-19 12:24:18
完形填空二則
把握四個“三” 測量變簡單
滑動摩擦力的測量和計算
基于FPGA的多功能信號發生器的設計
電子制作(2018年11期)2018-08-04 03:25:42
滑動摩擦力的測量與計算
小波變換在PCB缺陷檢測中的應用
主站蜘蛛池模板: 极品国产一区二区三区| 亚洲第一av网站| 欧美成人h精品网站| a免费毛片在线播放| 国产成人免费手机在线观看视频 | 色屁屁一区二区三区视频国产| 亚洲第一视频网| jizz在线观看| 999精品视频在线| 被公侵犯人妻少妇一区二区三区| 国产精品久线在线观看| 天天干天天色综合网| 日韩无码黄色| 亚洲香蕉在线| 三区在线视频| 日韩欧美国产另类| 精品成人一区二区三区电影| 中文无码精品a∨在线观看| 97久久超碰极品视觉盛宴| 国产一区亚洲一区| 亚洲啪啪网| 国产成人精品一区二区不卡| 国产激爽爽爽大片在线观看| 91成人精品视频| 亚洲综合第一页| 一区二区午夜| 亚洲无码四虎黄色网站| 国产伦精品一区二区三区视频优播 | 手机在线免费不卡一区二| 亚洲一区二区日韩欧美gif| 四虎影视8848永久精品| 亚洲激情99| 亚洲日本在线免费观看| 无码免费试看| 亚洲精品国产综合99| 亚国产欧美在线人成| 国产91视频免费观看| 国产91小视频在线观看| 国产综合另类小说色区色噜噜| 免费不卡视频| 波多野结衣视频一区二区 | 天堂av高清一区二区三区| 亚洲水蜜桃久久综合网站| 免费在线看黄网址| 国产成人亚洲无码淙合青草| 亚洲高清中文字幕在线看不卡| 亚洲欧美成人| 亚洲丝袜中文字幕| 亚洲首页国产精品丝袜| 日韩美女福利视频| 视频一本大道香蕉久在线播放| 97精品久久久大香线焦| 综合色区亚洲熟妇在线| 国产精品亚欧美一区二区三区| 狠狠色综合网| 911亚洲精品| 免费又黄又爽又猛大片午夜| 国产成人1024精品| 欧美午夜在线观看| 免费无遮挡AV| 婷婷开心中文字幕| 亚洲第一区在线| 毛片网站在线看| 久久人妻系列无码一区| 精品国产免费观看| 天天综合天天综合| 亚洲欧美日韩中文字幕在线一区| 久久人搡人人玩人妻精品| a欧美在线| 欧美午夜视频在线| 国产精品不卡片视频免费观看| 精品国产黑色丝袜高跟鞋| 免费A级毛片无码无遮挡| a毛片在线| 欧美www在线观看| 国产微拍精品| 国产呦精品一区二区三区下载| 毛片基地美国正在播放亚洲| 久久久久亚洲AV成人人电影软件 | 911亚洲精品| 久久黄色一级片| 丁香亚洲综合五月天婷婷|