本文为明德扬原创及录用文章,转载请注明出处!

1.1 总体设计

1.1.1 概述

学习了明德扬至简设计法和明德扬设计规范,本人设计了一个基于FPGA的可调频调相而且可以输出不同波形的DDS信号发生器。该信号发生器实现了通过按键控制输出不同类型的波形,并可以通过按键改变波形频率和初始相位。将此设计与明德扬的波形采集设计相结合,可以实现示波器功能,并且还可拓展实现波形频率计算、峰峰值计算、频谱分析等功能,有很大的设计空间。同时本设计以及其扩展功能在现实生活中也具有比较广泛的应用。在本案例的设计过程中,包含了按键定义和消抖、计数器、ROMIP的应用等技术。经过逐步改进、调试等一系列操作之后,完成了此设计,下面将完整的设计记录与大家分享。

1.1.2 设计目标

此设计可以通过按键进行波形类型的切换,并且波形的频率还可以进行改变,具体需求如下:

1)按键1按下时可以改变波形的类型,实现波形的切换,顺序为正弦波、锯齿波、三角波;

2)按键2按下时可以改变波形的频率,每按下一次,频率增大2倍,达到一定值后跳回初始频率值,以此循环;

3)按键3按下时可以改变波形的初始相位,每按下一次,初始相位加30,达到一定值后跳回初始相位值,以此循环。

1.1.3 系统结构框图

系统结构框图如下所示:

1.1.4 模块功能

  • 按键模块实现功能

将外来异步信号打两拍处理,将异步信号同步化;

实现20ms按键消抖功能,并输出有效按键信号。

  • DDS模块实现功能

通过有效按键信号实现切换波形类型、改变波形频率、调整波形初始相位;

从ROM中读取波形数据并输出按键控制下的波形数据。

1.1.5 信号定义

  • 顶层模块mdy_DDS.v
  • 按键模块key_delay.v
  • DDS模块DDS.v

1.1.6 工作原理

在系统整体结构中,通过按键控制输出波形类型,并通过按键改变波形频率控制字和初始相位控制字,得到ROM的读地址。ROM为只读存储器,只要给它一个地址,就能读出该地址中相应的数据,从已经初始化好的ROM读取相应的波形数据。

DDS的原理如下图,累加器每次累加一个频率控制字,调节频率控制字的数值,可以改变累加器的累加速度,进而可以调节从ROM查找表中读取波形数据的速度。即频率控制字越大,频率越高。相位控制字可以用来调节初始相位,即ROM地址自加的初始值。

1.2 按键电路

1.2.1 按键电路

独立式按键工作原理如上图所示,4条输入线接到FPGA的IO口上,当按键K1按下时,VCC通过电阻R1再通过按键K1最终进入GND形成一条通路,这条线路的全部电压都加在R1上,则引脚P14是低电平。当松开按键后,线路断开,就不会有电流通过,P14和VCC就应该是等电位,为高电平。我们可以通过P14这个IO口的高低电平状态来判断是否有按键按下。其它按键原理与K1一致。

从图中可以看出,如果我们按下按键,那么按键就会接通并连接到低电平GND,如果我们没有按下,那么按键就会断开并接到VCC,因此按键为低电平有效。通常的按键所用开关为机械弹性开关,当机械触点断开或者闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而机械式按键在闭合及断开的瞬间均伴随有一连串的抖动,如果不进行处理,会使系统识别到抖动信号而进行不必要的反应,导致模块功能不正常,为了避免这种现象的产生,需要进行按键消抖的操作。

1.2.2 按键消抖

按键消抖主要分为硬件消抖和软件消抖。两个“与非”门构成一个RS触发器为常用的硬件消抖。软件方法消抖,即检测出键闭合后执行一个延时程序,抖动时间的长短由按键的机械特性决定,一般为5ms~20ms,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认按下按键操作有效。当检测到按键释放后,也要给5ms~20ms的延时,待后沿抖动消失后才能转入该键的处理程序。经过按键消抖的行人优先按键,判断按键有效后,按键信号传递给控制系统,控制系统再进入相应的处理程序。如还不明白之处,见实验的PDF。

图5.1.2按键消抖示意图

1.2.3 按键消抖代码实现

使用明德扬的计数器模板,可以很快速很熟练地写出按键消抖模块。

每20ms扫描一次按键输入key_in,可以达到消抖的目的,再用寄存器缓存一下,按键为低电平有效;所以检测当检测到按键有下降沿变化时,代表该按键被按下,按键有效,输出1。

代码如下:

1.3 DDS模块设计

1.3.1 控制波形类型

消抖过后的按键输入到本模块,同样使用明德扬至简设计法和计数器模板,可以秒速写出控制波形类型的代码。按键1每按下一次,即key_done[0]有效时,wave_cnt加1,加到3时归0,否则保持不变。wave_cnt为0时输出正弦波,1时输出三角波,2时输出锯齿波,默认时输出正弦波;至简设计法和计数器模板有多好用,越用越绝精妙。

完整代码如下:

1.3.2 改变波形频率

话不多说,反手又是一个明德扬计数模板。按键2每按下一次,即key_done[1]有效时,i乘以2,加到64时归0,否则保持不变。这里通过i可以改变频率的原理是ROM中512个数据为一个周期,i等于1的话,采集一个周期需要512次,clk/512即为频率,i为2时,只需要采集256次即完成一个周期,频率为clk/256。

当然也可以直接通过分频改变clk,从而达到改变频率的效果。

完整代码如下:

1.3.3 改变波形相位

依旧是百用不厌的计数器模板,按键3每按下一次,即key_done[2]有效时,初始相位加30,加到360时归0,否则保持不变。达到改变相位的目的。

因此,通过至简设计法、计数器模板,可以轻松达到设计目标。

完整代码如下:

1.3.4 mif文件的生成

程序中我们会用到一个ROM用于存储512个8位的波形数据,首先我们需要准备ROM的初始化文件(mif文件)。以下为生成正弦波数据mif文件的方法:首先打开Guagle_wave工具,选择菜单"查看"->”全局参数设置”,设置参数如下:

调用ROMIP核,并将mif导入ROM,其他波形同理。

1.4 在线逻辑分析仪查看波形数据

  • 不同频率正弦波:
  • 三角波
  • 锯齿波

观看上面的现象,可以发现,各项功能正常,可以通过按键改变波形类型、频率、相位,成功完成设计目标。

在这个设计案例中,至简设计法和明德扬计数器模板发挥了至关重要的作用,使我能够快速准确完成设计。本设计拓展加上ADDA采集和VGA显示,可以实现基于FPGA的示波器设计,之前明德扬论坛已经发布了波形采集并VGA显示的案例,希望有兴趣的同学可以运用至简设计法和明德扬模板尝试一下拓展设计哦。

两波形相位差的计算值_波形相位频率可调DDS信号发生器(设计分享)相关推荐

  1. 【原创】波形相位频率可调DDS信号发生器(设计分享)

    本文为明德扬原创及录用文章,转载请注明出处! 作者:造就狂野青春 1.1 总体设计 1.1.1 概述 学习了明德扬至简设计法和明德扬设计规范,本人设计了一个基于FPGA的可调频调相而且可以输出不同波形 ...

  2. 两波形相位差的计算值_正弦交流电的相位差,明白了吗?

    相位差 相位差φ:两个同频率正弦量的相位之差. 两个作周期变化的物理量的相之间的差值.它为正值时称前者超前于后者,为负值时则滞后于后者.它为零或π的偶数倍时,两物理量同相;为π的奇数倍时则称反相. 初 ...

  3. 两波形相位差的计算值_介绍正弦交流电的相位差

    相位差 相位差φ:两个同频率正弦量的相位之差. 两个作周期变化的物理量的相之间的差值.它为正值时称前者超前于后者,为负值时则滞后于后者.它为零或π的偶数倍时,两物理量同相;为π的奇数倍时则称反相. 初 ...

  4. 两波形相位差的计算值_光纤耦合器怎么计算

    光纤耦合器是一种定向耦合器,是光纤通信系统中重要器件之一.虽然目前光纤耦合器的大部分应用还只涉及到它的线性特性,但是耦合器中的非线性效应自1982年起就开始研究,其中一个重要应用是全光开关. 可调谐式 ...

  5. 两波形相位差的计算值_如何将您的计算机用作任意波形发生器

    了解您的计算机如何用作任意波形发生器.在本文中,我们将使用Scilab生成数字信号,这些信号可以通过计算机的音频硬件转换为模拟波形. 最近我一直在撰写文章,证明Scilab用于各种信号处理任务.在这种 ...

  6. Web的入侵防御系统的设计_服务器,Web的入侵防御系统的设计分享

    Web的入侵防御系统的设计分享 0引言 随着网络技术的不断发展和深入应用,人们对网络的安全性和可管理性的要求也越来越高,与此同时网络hacker的攻击方式,也变得越来越多样化,技术的复杂程度也越来越高 ...

  7. php中怎么判断输入密码与原密码一致_「每周FPGA案例」电子密码锁设计

    至简设计系列_电子密码锁 --作者:肖肖肖 --案例作者:WB_Yih 本文为明德扬原创及录用文章,转载请注明出处! 1.1 总体设计1.1.1 概述 随着生活质量的不断提高,加强家庭防盗安全变得非常 ...

  8. 74ls390设计任意进制计数器_利用数字频率合成技术设计高速任意波形发生器(上)...

    波形发生器为常用器件,正因如此,波形发生器具备较强现实意义.对于波形发生器,诸多朋友均存在一定兴趣.此外,小编在往期带来诸多波形发生器相关文章,热爱波形发生器的朋友可翻阅哦.本文中,小编对于波形发生器 ...

  9. 晶振波形不是正弦波_晶振的3种输出波形,你了解吗?

    对于晶振输出波形,相信一部分人可能认为只有两种波形,即无源晶振输出波形为正弦波,有源晶振输出波形为方波,小部分为正弦波. 由于在有源晶振内部加了整形电路,所以输出是方波,正弦波一般用的很少,普遍用的都 ...

最新文章

  1. 数据结构与算法:17 图
  2. 线性代数投影法在线性回归中的应用
  3. Windows7 UAC
  4. .net 文件类型 及说明
  5. html5仪表板可调节,使用HTML5画布实现的超棒javascript动画仪表板:gauge.js
  6. java切换jdk版本_切换JDK版本quick
  7. with在python中啥意思,“with”语句在Python中做什么?
  8. 一台服务器上使用docker安装redis6.0.10一主两从以及哨兵模式
  9. 数字图像处理(三) 图像的变换
  10. 「leetcode」131.分割回文串【回溯算法】详解!
  11. 2022官网下载jdk8教程
  12. ACPYPE中FAILED: [Errno 2] No such file or directory: 'FFF_AC.prmtop'的解决方法
  13. 计算机 先进事迹范文,计算机,先进事迹范文.doc
  14. 使用GDB和GEF进行调试
  15. 批量移动文件到以时间建立文件夹里
  16. 解析explain执行计划
  17. 线性代数拾遗(3)—— “系数矩阵的秩” 和 “齐次线性方程组基础解系向量个数” 的关系
  18. 双臂二指魔方机器人的制作(一)--总体设计
  19. Python创建使用虚拟环境
  20. python返回索引值_python 返回列表中某个值的索引方法

热门文章

  1. python自动化测试-Python实现性能自动化测试竟然如此简单
  2. python教程视频-私藏已久的7个Python视频教程
  3. python编程语言-python编程语言基础知识总结
  4. 线上python课程一般多少钱-Python在线培训课程费用是多少?值不值得报名?
  5. python有道-Python爬取有道词典
  6. python编程是啥-Python编程语言的特点是什么?老男孩Python学习
  7. 微信小程序实现语音识别功能
  8. 怎么用matlab显示噪声,怎么用MATLAB产生噪声调频信号
  9. java8 foreach 伟参_【java8】为java8的foreach正名
  10. 线上阿里云mysql慢_MySQL · 案例分析 · RDS MySQL线上实例insert慢常见原因分析-阿里云开发者社区...