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中文字幕| 国产精品久久久久无码网站| 国产尤物视频网址导航| 国产小视频网站| 久久午夜夜伦鲁鲁片无码免费| 九色视频最新网址| 99久久精品国产麻豆婷婷| 国产乱子伦视频三区| 日本在线国产| 尤物视频一区| 国产精品浪潮Av| 国产精品夜夜嗨视频免费视频| 国产成人a在线观看视频| 亚洲国产精品无码久久一线| 大学生久久香蕉国产线观看| 色妞www精品视频一级下载| 久久人人爽人人爽人人片aV东京热| 国产成人三级在线观看视频| 大学生久久香蕉国产线观看| 在线精品自拍| a级毛片一区二区免费视频| 伊人无码视屏| 亚洲精品大秀视频| 免费观看亚洲人成网站| 波多野结衣视频一区二区| 亚洲黄色网站视频| 手机精品福利在线观看| 五月婷婷精品| AV片亚洲国产男人的天堂| 青青操国产视频| 国产成人精品一区二区不卡| 亚洲成人网在线观看| 欧美性爱精品一区二区三区 | 国产内射一区亚洲| 国产在线视频欧美亚综合| 中文字幕在线播放不卡| 中文字幕第4页| 一级成人欧美一区在线观看| 青青草原偷拍视频| 茄子视频毛片免费观看| 国产精品美乳| 久草青青在线视频| 特级做a爰片毛片免费69| 91亚洲国产视频| 久久午夜影院| 国内a级毛片| 久久无码av三级| 中文字幕在线永久在线视频2020| 欧美日韩va| 一本大道香蕉久中文在线播放| 精品黑人一区二区三区| 久久青青草原亚洲av无码| 国内毛片视频| 欧美、日韩、国产综合一区| 日本黄色a视频| 午夜精品影院| 国产欧美日韩va另类在线播放| 亚洲成综合人影院在院播放| 国产97色在线| 欧美亚洲一二三区| 国产欧美日韩免费| 亚洲天堂.com| 99精品欧美一区| 国产91无毒不卡在线观看| 2021最新国产精品网站| 色偷偷综合网| 国产菊爆视频在线观看| 综合久久久久久久综合网| 91成人在线免费观看| 免费不卡在线观看av| 九九九精品成人免费视频7| 国产在线视频二区| 国产亚洲精久久久久久久91| 欧美日韩午夜视频在线观看| 国产精品污污在线观看网站| 国产va在线观看免费| 久草青青在线视频| 久久精品欧美一区二区|