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缺陷檢測中的應用
主站蜘蛛池模板: 精品无码视频在线观看| 国产一区二区精品福利| 欧美色综合网站| 免费观看欧美性一级| 99国产在线视频| 国产91视频观看| 高清欧美性猛交XXXX黑人猛交| 五月婷婷精品| 亚洲精品午夜天堂网页| 色综合天天视频在线观看| www.亚洲一区| 三级毛片在线播放| 国产欧美在线视频免费| 久久一色本道亚洲| 四虎精品国产AV二区| 亚洲欧美日韩中文字幕在线| 99在线观看国产| 国产黄视频网站| 四虎成人精品在永久免费| 老司机午夜精品视频你懂的| 婷婷丁香在线观看| 韩日免费小视频| 丰满人妻一区二区三区视频| 亚洲熟妇AV日韩熟妇在线| 久久久久亚洲精品成人网| 久久精品日日躁夜夜躁欧美| 国产日韩精品欧美一区喷| 久久久受www免费人成| 欧美国产在线看| 综合天天色| 99精品视频九九精品| 亚洲欧洲AV一区二区三区| 国产精品网址你懂的| 成人小视频网| 四虎成人精品| 黄色片中文字幕| 美女内射视频WWW网站午夜 | 国产自产视频一区二区三区| 中文字幕久久亚洲一区| 亚洲欧美日韩成人高清在线一区| 亚洲欧美日韩综合二区三区| 日韩欧美高清视频| 最新国产你懂的在线网址| 成人第一页| 天天爽免费视频| 国产高清国内精品福利| 欧美精品在线看| 国产丝袜第一页| 爱色欧美亚洲综合图区| 久久免费看片| 欧洲欧美人成免费全部视频 | 91精品啪在线观看国产60岁| 欧美日本激情| 蜜桃臀无码内射一区二区三区| 毛片大全免费观看| 狠狠色噜噜狠狠狠狠奇米777| 五月婷婷激情四射| 亚洲精品欧美日本中文字幕| 日韩午夜福利在线观看| 国产日韩精品欧美一区喷| 亚洲第一香蕉视频| 精品视频91| 亚洲男人天堂2018| 国产你懂得| 欧美在线黄| 在线综合亚洲欧美网站| 亚洲成AV人手机在线观看网站| 香蕉eeww99国产精选播放| 色天堂无毒不卡| 国内a级毛片| 毛片最新网址| 无码免费试看| 久久久久中文字幕精品视频| 国产精品综合久久久| 国产日韩欧美中文| 91精品国产自产在线老师啪l| 熟妇丰满人妻| 国产成人8x视频一区二区| 国产亚洲欧美在线人成aaaa| 中国一级特黄大片在线观看| 久久精品女人天堂aaa| 精品国产成人高清在线|