明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 7509|回复: 0

【至简设计案例系列】基于FPGA的频率、电压测量

[复制链接]
发表于 2020-3-20 10:38:57 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
作者:造就狂野青春
本文为明德扬原创及录用文章,转载请注明出处


一、总体设计

1.概述

     本文基于明德扬至简设计法和明德扬设计规范,设计了一个基于FPGA的频率、电压测量仪器,实现了测量AD采集后的波形频率和电压(峰峰值),并将数值显示在数码管上。这个案例通过扩展还可结合明德扬的波形采集显示案例实现显示波形频率、峰峰值功能,还可拓展结合上次DDS案例产生的已知波形的频率峰峰值,验证本设计的正确性。本案例的扩展和应用在现实生活中具有重大意义。在本案例的设计过程中,应用了至简设计法、状态机模板应用等,在经过逐步改进、调试等一系列工作之后,最终达到了设计目标。


2. 设计目标

1) AD采集后的数据转换成同频率的方波,并测量出波形实际频率
2) 能够实现测量出波形的周期
3) 能够实现测量波形的峰峰值或者某个信号的电压值
4) 数码管显示频率或电压值,并通过按键控制切换决定数码管显示频率或电压值

3. 模块功能

1) 频率测量模块实现功能:

    将AD采集后的数据转换成同频率的方波;
      测量出波形的实际频率;
      测量出波形的周期

2) 电压测量模块实现功能:

   将AD采集后的数据进行缓冲;
    记录数据最大值和最小值;
    根据公式得出波形的峰峰值(电压)

3) 数码管显示模块实现功能

    数码管显示频率值或者电压值
   通过按键1实现切换决定数码管显示频率还是电压

4) 按键模块实现功能:

    将外来异步信号打两拍处理,将异步信号同步化;
   实现20ms按键消抖功能,并输出有效按键信号;

4. 信号定义

1)顶层模块Freq_Volt_Top.v

信号
定义
clk
系统时钟
rst_n
低电平复位信号
ad_data
AD采集输入
seg_sel
数码管位选信号
Seg_ment
数码管显示信号



2)频率测量模块Frequency.v

信号
定义
clk
系统时钟
rst_n
低电平复位信号
ad_data
AD采集输入
Freq
频率值
Period
周期

3)电压测量模块Voltage.v

信号
定义
clk
系统时钟
rst_n
低电平复位信号
ad_data
AD采集输入
Volt
电压值(峰峰值)

5) 数码管显示模块sel_disp.v

信号
定义
clk
系统时钟
rst_n
低电平复位信号
din
显示数据
seg_sel
数码管位选信号
Seg_ment
数码管显示信号

6)按键模块key_module.v

信号
定义
clk
系统时钟
rst_n
低电平复位信号
key_in
按键输入
key_vld
有效按键

5.频率测量代码
40.png

41.png
        利用明德扬的四段式状态机模板,可以很熟练地写出状态的转换,先将ad_data取最高位,得到同频率的方波,再分别计算方波高电平和低电平的时间,就可以得出一个周期的时间,从而计算出频率值和峰峰值。利用wave的高低电平控制状态机进入高电平计数或低电平计数状态

42.png


     S1状态:即wave=1时开始进行高电平计数,wave=0时证明变为低电平,记录下high_cnt的最大值,代表高电平的时间。

43.png

    S2状态:即wave=0时开始进行低电平计数,wave=1时证明变为高电平,记录下low_cnt的最大值,代表低电平的时间。
    得到高电平和低电平的时间,相加即得到一个周期的时间,可以算出频率值和周期值
44.png

    FPGA原则上不能直接进行除法运算,因此调用除法器IP进行除法运算可以算出频率值,取整数部分。


6.电压测量

45.png

        AD数据和初始的最大值最小值相比较,如果AD数据大则赋值给fengzhi_max,如果AD数据小则赋值给fengzhi_min,经过一段时间后可以得出数据的最大值和最小值。如果是8位AD9280,则255代表+5V,0代表-5V;

则可以得到峰峰值计算公式;

        值得注意的是,记录下最大最小值后,fengzhi_maxfengzhi_min将不变,为了能够实时记录数据最大最小值,需要定时刷新,因此设置1sRST信号,定时初始化fengzhi_maxfengzhi_min。

46.png

7.数码管显示
47.png
     通过按键切换决定数码管显示频率值还是电压值。

     动态扫描数码管,同时显示多个不同数字,显示频率和电压信息。数码显示原理和案例具体请学习明德扬论坛上资料。

48.png

  这个设计案例中,至简设计法和明德扬计数器模板、状态机模板发挥了至关重要的作用,使我能够快速准确完成设计。本设计可以加以拓展:

1) 结合明德扬AD采集波形案例,将计算出的频率值、电压值显示在VGA屏幕上;


对于初学者而言,流水灯太简单,复杂项目又太难,不如尝试一下这些相对简单而又酷炫的案例,并一步步拓展成大项目。赶紧动手尝试吧。

最后附上此设计的源码: Freq_Volt_meter.zip (130.25 KB, 下载次数: 656)
FPGA视频课程  培训班 FPGA学习资料
吴老师 18022857217(微信同号) Q1241003385
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-11-23 00:08 , Processed in 0.056525 second(s), 24 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

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