OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8943|回复: 6

[ALTERA] 请大家给个开拓者测量频率的思路

[复制链接]

21

主题

243

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2015-3-12
在线时间
165 小时
发表于 2021-8-28 18:07:19 | 显示全部楼层 |阅读模式
1金钱
现在有一个频率范围300-9000Hz,想用开拓者FPGA采集,通过串口发送到上位机,每隔50ms更新一次。最好用什么方式采集?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

981

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
7807
金钱
7807
注册时间
2014-8-13
在线时间
1580 小时
发表于 2021-8-28 19:47:51 | 显示全部楼层
计数器定时读取并重置,采集上升沿或者下降沿。信号接个接地电容做个简单硬件滤波。
回复

使用道具 举报

21

主题

243

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2015-3-12
在线时间
165 小时
 楼主| 发表于 2021-8-30 08:45:02 | 显示全部楼层
我发现原子开拓者测频率的资料比较少。我拜度了一下资料。程序在这,https://download.csdn.net/download/VCA821/12899478
这个是等精度采集

频率计数模块:Fre_cnt.v
module Fre_cnt(
                input                 clk_measure,
                                         input                 rst_n,
                                         input                 clk_match,
                                          
                                         output[31:0]          fre_cnt      
              );
                                  
reg   [31:0]   fre_cnt_r1 = 32'b0;
reg   [31:0]   fre_cnt_r2 = 32'b0;


always@(negedge clk_match)
begin
        fre_cnt_r2 <= fre_cnt_r1;
end       


always@(posedge clk_measure or negedge rst_n)
begin
   if(!rst_n)
        fre_cnt_r1 <= 32'b0;
        else if(clk_match)
        fre_cnt_r1 <= fre_cnt_r1 + 32'b1;
        else
        fre_cnt_r1 <= 32'b0;
end

assign fre_cnt = fre_cnt_r2;

endmodule


0.5Hz方波产生(1s)高电平产生:Time_1s.v
module Time_1s(
                input       clk,
                input       rst_n,
                                         
                                         output reg  flag_1s=1'd0
                                         );

                                         
reg   [27:0]   timer;



always@(posedge clk or negedge rst_n)
begin
   if(!rst_n)
   timer <= 28'd0;
   else if(timer == 28'd49_999_999)
        begin
        flag_1s <= ~flag_1s;
   timer <= 28'd0;
        end
   else
   timer <= timer + 28'd1;
end

endmodul
————————————————
版权声明:本文为CSDN博主「VCA821」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/vca821/article/details/84960721
回复

使用道具 举报

21

主题

243

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2015-3-12
在线时间
165 小时
 楼主| 发表于 2021-8-30 11:24:09 | 显示全部楼层
mack13013 发表于 2021-8-28 19:47
计数器定时读取并重置,采集上升沿或者下降沿。信号接个接地电容做个简单硬件滤波。

你看一下子我找到的历程。我看到好多等精度测量频率都是用1S,如果我想要改成20MS的话,应该怎么改呢?
回复

使用道具 举报

21

主题

243

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2015-3-12
在线时间
165 小时
 楼主| 发表于 2021-8-30 19:20:53 | 显示全部楼层
HerryZ 发表于 2021-8-30 11:24
你看一下子我找到的历程。我看到好多等精度测量频率都是用1S,如果我想要改成20MS的话,应该怎么改呢?

我发现了一个问题,就是我需要50ms更新频率数据的话,没办法用等精度数方波的方法,因为我试了一下,如果频率在600以下时,得到的方波很少,几乎不能判断频率。必须要1S更新一次才行
回复

使用道具 举报

21

主题

243

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2015-3-12
在线时间
165 小时
 楼主| 发表于 2021-8-31 18:15:44 | 显示全部楼层
我终于又有新的进展了,间接测量法
3.1、概念
间接测量法也叫周期测量法,即在一个被测信号的周期内,测量基准时钟的个数,得到被测信号的周期,再将其转化为频率。

此种方法适用于测量低频信号,但同时也会带来测量速度过慢的问题,误差来自一个系统基准时钟。以下代码可以用。
module DPCL(        //低频测量模块
        input clk,
        input rst_n,
       
        input clk_fx,//待测信号
        output reg [31:0]data);
       
        reg [31:0]cnt,cnt_temp;
       
       
assign clk_fx_n=~clk_fx;
       
always @(posedge clk or negedge rst_n)begin       
        if(!rst_n)
                cnt<=0;
        else begin
                if(clk_fx)begin
                        cnt<=cnt+1;
                        cnt_temp<=cnt;
                end       
                else
                        cnt<=0;
        end
end



always @(posedge clk_fx_n or negedge rst_n )begin       
        if(!rst_n)
                data<=0;
        else       
                data<=1000_000_000/(20*cnt_temp*2);
end

endmodule
————————————————
版权声明:本文为CSDN博主「孤独的单刀」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wuzhikaidetb/article/details/112326945
回复

使用道具 举报

21

主题

243

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2015-3-12
在线时间
165 小时
 楼主| 发表于 2021-8-31 21:19:25 | 显示全部楼层
HerryZ 发表于 2021-8-31 18:15
我终于又有新的进展了,间接测量法
3.1、概念
间接测量法也叫周期测量法,即在一个被测信号的周期内,测 ...

我看了一下,这个是一个脉冲周期的时间,如果改成记录10个脉冲周期,测量的数值会不会好点?应该怎么改?大家给点意见
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 20:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表