论坛风格切换切换到宽版
发帖 回复
返回列表  提醒:不能用迅雷等P2P下载,否则下载失败标(二级)的板块,需二级才能下载,没二级不要购买,下载不了
  • 3252阅读
  • 0回复

[技术文章]FPGA学习——等精度测频(转) [复制链接]

上一主题 下一主题
离线2dmin
 

性别:
帅哥
发帖
15760
金币
13894
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看楼主 倒序阅读 使用道具 0楼 发表于: 2012-08-25
KR6*)?c`  
由于最近一直在与队员一起攻克题目,所以没时间写博客,现在把最近做的东西总结一下,希望对大家有帮助。 G/Xa`4"_  
以前一直是用测频率法来测信号的频率,就是在一秒内测被测频率的个数,即为频率,这种方法在高频时还行,低频就误差比较大,无论是用FPGA还是单片机都差不多,所以我们这次用了一种相对更精确的测量方法——等精度测频法,主导思想是利用一个D触发器保证测量时间是被测频率的整数倍,对被测频率和基准频率进行计数,利用计数值求出被测频率,这种方法在高频低频段均适用,由于测量误差只与基准频率和闸门时间有关,与被测频率无关,故称之为等精度测频。 ?wR;"  
由于FPGA对数据处理有困难,所以我们用FPGA计数,然后把数据传给单片机处理,显示数据。我们这次的测频范围为0.01HZ到50MHZ,精确到小数点后两位,测频误差在10的-5次方以下。 eiF!yk?2  
我做的是FPGA的部分,先附上思路: !m#cneV  
等精度测频就是对基准频率和待测频率在一段时间内分别计数,通过一个D触发器确保计数时间是待测频率的整数倍,系统的误差只与门控时间和基准频率有关,与待测频率无关,达到等精度测频的目的。计数器是用两个32位二进制计数器,通过一个3—8选择器把64位变成8位,传给单片机,经单片机处理后恢复出两个计数值,计算出频率。 t?0D*!D  
RTL图 g& *pk5V>  
附上程序,欢迎探讨 >_biiW~x:  
分频模块——产生基准频率1MHZ方波 ZL`G<Mo;.  
LIBRARY IEEE; `1NxS35u  
USE IEEE.STD_LOGIC_1164.ALL; F` ifHO  
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 7FVu [Qu  
ENTITY FENPIN IS e_wz8]K)n  
PORT( =Po!\[SBU  
CLK:IN STD_LOGIC; [Pdm1]":(  
CLOCK:OUT STD_LOGIC q)ygSOtj  
); WRJ+l_81  
END ENTITY; 6?0 ^U 9  
ARCHITECTURE ART OF FENPIN IS |*N.SS  
SIGNAL COUNT :INTEGER RANGE 0 TO 10#49#; gkuI!=  
BEGIN +OF(CcA^  
PROCESS(CLK)IS ]rDf3_!m(  
BEGIN 1@Bq-2OD4  
IF(CLK'EVENT AND CLK='1')THEN ?'K}bmdt}.  
IF(COUNT=10#49#)THEN COUNT<=0; 'r%`(Z{~  
ELSE COUNT<=COUNT+1; QY2!.a^q  
END IF; 2k[i7Rl \c  
END IF; ,sk;|OAI  
END PROCESS; 0*%j6*XDq9  
PROCESS(COUNT)IS 5( lE$&   
BEGIN P sD+?  
IF(COUNT>=10#24#)THEN Ou; ]>FJ  
CLOCK<='1'; qeCx.Z  
ELSE CLOCK<='0'; )}?'1ciHI  
END IF; <>f  
END PROCESS; Mz<4P3"H  
END ARCHITECTURE;  y'Xg"  
D触发器模块——保证测量时间是被测频率整数倍 F]W'spF,  
LIBRARY IEEE; vhEPk2wD,  
USE IEEE.STD_LOGIC_1164.ALL; .bvB8VOrW  
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 0z."6 r  
ENTITY DCHUFA IS uG3t%CmN  
PORT( K$Y!d"D  
CLK:IN STD_LOGIC; @3[Z Q F  
CLR:IN STD_LOGIC; ;tI=xNre`1  
D:IN STD_LOGIC; IR>^U  
Q:OUT STD_LOGIC A $W,#`E  
); K/G|MT)  
END ENTITY; (]>c8;o#b  
ARCHITECTURE ART OF DCHUFA IS K2L+tw  
SIGNAL Q1:STD_LOGIC; sRo%=7Z  
BEGIN 6@!<' l%z  
PROCESS(CLR,CLK) K(Otgp+zb  
BEGIN [dsH0 D&T  
IF(CLR='0')THEN Q1<='0'; :n>m">4  
ELSE IF(CLK'EVENT AND CLK='1')THEN $dci?7q  
Q1<=D; PP&AF?C  
END IF; %Md;=,a:6  
END IF; l{aXX[E&1  
END PROCESS; Aa.bE,W  
Q<=Q1; @g""*T1:$  
END ARCHITECTURE; ]BCH9%zLj  
计数模块 Yv9(8  
LIBRARY IEEE; -sGfpLy<6  
USE IEEE.STD_LOGIC_1164.ALL; 52K3N^RgR  
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 'HkV_d[li  
ENTITY JISHU IS zF(I#|Vo  
PORT( +|Xx=1_?BK  
CLK:IN STD_LOGIC; ;hmy7M1%  
CLR,ENA:IN STD_LOGIC; <<v,9*h  
OQ:OUT STD_LOGIC_VECTOR(31 DOWNTO 0) O~-#>a  
); ;-@^G 3C:  
END ENTITY; lW?}jzuo  
ARCHITECTURE ART OF JISHU IS sju. `f>-r  
SIGNAL TMP:STD_LOGIC_VECTOR(31 DOWNTO 0); Oh~J yrZy  
BEGIN +K;(H']Z<-  
PROCESS(CLK,CLR,ENA)IS "m _wYX  
BEGIN MH`f!%c  
IF(CLR='0')THEN TMP<="00000000000000000000000000000000"; pb}QP  
ELSIF(ENA='1')THEN {?l#*XH;  
IF(CLK'EVENT AND CLK='1')THEN r3/H_Z  
TMP<=TMP+1; zhKb|SV  
END IF; )fpZrpLXE  
END IF; U9IN#;W  
END PROCESS; G*mk 19Z  
PROCESS(ENA) yu<sd}@  
BEGIN 5X nA.?F^  
IF ENA'EVENT AND ENA='0' THEN CG@ LYN  
OQ<=TMP; RXb+"/   
END IF; `K~300-hOb  
END PROCESS; ]k]P (w  
END ARCHITECTURE; 7 \!t/<  
64转8模块——方便单片机读取数据 5)2lZ(5.A#  
LIBRARY IEEE; )O"5dF1l  
USE IEEE.STD_LOGIC_1164.ALL; d>)*!l2,C  
USE IEEE.STD_LOGIC_UNSIGNED.ALL; L/"XIMI*Xg  
ENTITY JISHU IS 'F?T4  
PORT( 5"c#O U  
CLK:IN STD_LOGIC; 7$a,pNDw  
CLR,ENA:IN STD_LOGIC; W7S`+Pq  
OQ:OUT STD_LOGIC_VECTOR(31 DOWNTO 0) X&TTw/J!^  
); {b"V7vn,  
END ENTITY; GG5wiN*2S  
ARCHITECTURE ART OF JISHU IS gsqlWfa  
SIGNAL TMP:STD_LOGIC_VECTOR(31 DOWNTO 0); :7<spd(%"  
BEGIN n87B[R  
PROCESS(CLK,CLR,ENA)IS Nqk*3Q"f  
BEGIN - ~T LI&[  
IF(CLR='0')THEN TMP<="00000000000000000000000000000000"; u8v;O}#  
ELSIF(ENA='1')THEN Im+<oZ  
IF(CLK'EVENT AND CLK='1')THEN w{UVo1r:  
TMP<=TMP+1; 6OF&Q`*4  
END IF; *@S:f"i  
END IF; PP.QfY4  
END PROCESS; R^<li;Km  
PROCESS(ENA) _)yn6M'Dt  
BEGIN e]'ui<`  
IF ENA'EVENT AND ENA='0' THEN 8Sd<!  
OQ<=TMP; kKr7c4q  
END IF; d0"Hu^]  
END PROCESS; SHOg,#mV  
END ARCHITECTURE; Z O5_n  
顶层模块 b<P9@h~:  
LIBRARY IEEE; TIbiw  
USE IEEE.STD_LOGIC_1164.ALL; Waj6.PCFm  
USE IEEE.STD_LOGIC_UNSIGNED.ALL; s% 2w&Us*  
ENTITY FENPIN IS %(MaH  
PORT( 4%LGP h  
CLK:IN STD_LOGIC; :Gsh  
CLOCK:OUT STD_LOGIC GF*8(2h2  
); k(pI5N}pJZ  
END ENTITY; Fo=Icvo  
ARCHITECTURE ART OF FENPIN IS (, /`*GC  
SIGNAL COUNT :INTEGER RANGE 0 TO 10#49#; 3s<~}&"  
BEGIN c3W9"  
PROCESS(CLK)IS (/Lo44wT  
BEGIN pwtB{6)VH{  
IF(CLK'EVENT AND CLK='1')THEN {`2! 3= "  
IF(COUNT=10#49#)THEN COUNT<=0; ig5 d-A  
ELSE COUNT<=COUNT+1; c>#T\AEkF  
END IF; hCVe05  
END IF; 1@rI4U@D  
END PROCESS; }:<`L\8q\  
PROCESS(COUNT)IS D1rXTI$$  
BEGIN dQT A^m  
IF(COUNT>=10#24#)THEN +!h~T5Ck  
CLOCK<='1'; cVYDO*N2T  
ELSE CLOCK<='0'; >?aPX C  
END IF; XP'<\  
END PROCESS; o@*eC L=  
END ARCHITECTURE;


评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

一般

差劲
快速回复
限150 字节
 
上一个 下一个