请
登录
后使用快捷导航
没有帐号?
注册
首页
论坛
设计作品
全志V85x硬件设计大赛作品精选第一期
全志V85x硬件设计大赛作品精选第二期
瑞萨RA4M2物联网网关设计挑战赛作品集
国民技术N32开源移植挑战赛作品精选
2022福建省大学生人工智能创意赛作品合集
OpenHarmony开发者成长计划学生挑战赛优秀作品
精选帖子
【作品合集】龙芯2K0300蜂鸟开发板试用精选
【资源下载】英飞凌PSoC 6 RTT物联网开发板
【正点原子STM32精英V2开发板】HC-SR501红外人体感应
【沁恒CH32V208开发板试用】跳动的心脏-Systick
【鲁班猫创意氛围赛】现代化无线哨兵
【飞凌RK3588开发板试用】基于pyqt5的人脸识别
书籍评测
电子工程师必备丛书系列——电路板技能速成宝典
Proteus实战攻略:从简单电路到单片机电路的仿真
电子工程师必备丛书系列——九大系统电路识图宝典
OpenHarmony嵌入式系统原理与应用——基于RK2206芯片
深入理解微电子电路设计——数字电子技术及应用(原书第5版)
资深工程师十余年实战经验,PADS PCB设计指南
社区工程师专题
第一期:坚持兴趣成就嵌入式工程师
第二期:电子工程师需要在参赛中历练成长
第三期:创意源于生活,工具始于懒惰
第四期:工程师漫谈开发板评测的乐趣
第五期:硬件工程师的心路历程
第六期:宁精勿杂,在嵌入式领域做到优秀
版块
技术社区
FPGA开发者技术社区
RISC-V MCU技术社区
HarmonyOS技术社区
瑞芯微Rockchip开发者社区
OpenHarmony开源社区
嵌入式技术论坛
单片机及嵌入式
单片机/MCU论坛
ARM技术论坛
STM32/STM8技术论坛
RISC-V技术社区
FPGA|CPLD|ASIC论坛
DSP论坛
电源与无线技术
电源技术论坛
无线充电技术
WIFI技术
蓝牙技术
天线|RF射频|微波|雷达技术
EDA设计论坛
PCB设计论坛
DFM|可制造性设计论坛
Protel|AD|DXP论坛
PADS技术论坛
Allegro论坛
KiCad EDA 中文论坛
proteus论坛|仿真论坛
电路设计与测试
电路设计论坛
电子元器件论坛
LabVIEW论坛
Matlab论坛
传感技术
测试测量技术
DIY及创意
综合应用与活动
电机控制
发烧友官方/活动
模拟技术论坛
机器人论坛
USB论坛
音视频技术
综合技术交流
小组
厂商
龙芯技术社区
先楫半导体HPMicro
其利天下技术小组
瑞萨单片机论坛
芯海科技论坛
飞凌嵌入式论坛
国民技术论坛
飞腾派开发者社区
创龙科技论坛
米尔电子
技术
Linux论坛
单片机学习小组
嵌入式学习小组
电子行业动态
工程资源中心
电磁兼容设计与整改
物联网技术
汽车电子技术论坛
氮化镓技术社区
HiHope开发者社区
高校
东莞理工学院电子协会
西安电子科技大学西电实验室
深圳大学电子协会
桂林电子科技大学机电工程协会
湘潭大学电子科技协会
名人
张飞硬件学习小组
韦东山Linux嵌入式课程社区
黄工无刷电机学习
MILL小眼睛FPGA小组
龙哥 Labview 学习群
淘贴
开源硬件项目分享
开发板免费试用
沁恒微CH32V307试用合集
芯昇RISC-V开发板试用合集
乐鑫ESP32-C3试用合集
活动
设计大赛
瑞萨RA4M2物联网网关设计挑战赛
华秋电子x全志在线开源硬件设计大赛
RT-Thread 创新设计大赛
星核计划-高云FPGA开发者计划
OpenHarmony成长计划学生挑战赛
RT-Thread全球巡回线下培训
国民技术N32开源移植挑战赛
开发板试用
【创客营】新品Vision Board开发板免费评测
龙芯2K0300蜂鸟开发板免费试用
米尔-STM32MP135开发板-入门级MPU设计平台
风火轮YY3568开发板免费体验
【新品试用】英飞凌PSoC 6 RTT开发板试用
正点原子STM32战舰V4开发板
【有奖评测】为昕原理图设计EDA软件免费试用
社区之星
杨永胜:兴趣加努力,嵌入式工程师最好的前进之路
谢小龙:五年嵌入式开发,一个“博大”+“精深”的老鸟
罗大信:从工程师到创始人,我的20年嵌入式经验
刘建华:如果不想虚度一生,那就学习一辈子
贺婷婷:不退则进,遇到问题面对它,你会登上新台阶
罗除博士:共同携手,助力鸿蒙生态冲破牢笼
官方活动
【有奖征文】赢千元现金!发文章、上传资料送壕礼
每日打卡活动,赢取OH定制礼品
RISC-V MCU 技术社区打卡活动
【有奖打卡活动】2023年打卡计划
【书单评测】27本电子工程书籍
【书籍评测】PADS PCB设计指南
【精选集合】野火鲁班猫创意氛围赛作品
技术峰会/沙龙
2024 KiCon Asia KiCad 用户大会
2023 电子工程师大会暨第三届社区年度颁奖
开放原子开源基金会OH技术峰会
电子设计与制造技术研讨会
PCB设计与制造技术研讨会
2022 OH主题线下技术沙龙
2022开放原子全球开源峰会
专栏
技术原创
从编程到应用——从零开始学ARM
基于STM32设计的数码相册
基于DWC2的USB驱动开发-IAD描述符详解
基于CW32L083的线控器方案设计
RISC-V内核RC遥控车拆解:空心杯电机+2.4G跳频控制
最新资讯
SK海力士2023年HBM3营收增长5倍
夺得多项第一!问界M7冬测成绩大翻身
ASML 2023年末爆单,中国贡献营收翻倍
谁能打造最强车型?从OTA看车企的智能化之争有多激烈
首个石墨烯功能半导体面世,硅基的陌路?
企业
推荐企业号
Aigtek安泰电子
斯丹麦德电子
张飞实战电子
芯佰微电子
其利天下技术
扬兴科技
飞凌嵌入式
米尔电子
RA生态工作室
生态平台
OpenHarmony生态平台
RISC-V生态平台
瑞芯微Rockchip生态平台
精选内容
大咖齐聚,飞凌嵌入式技术创新日活动
米尔NXP i.MX 93开发板免费评测试用
Docker容器安装及运行测试方案详解
用时钟频率精度测量电路进行时间校验
基于Realtek的智能语音服务解决方案
问答
年度榜单
2022年度TOP榜单——模拟技术论坛问答
2021年度TOP榜单——电路设计论坛问答
2021年度TOP榜单——电源技术论坛问答
2021年度TOP榜单——电机控制技术论坛问答
高手问答
电子老顽童带你看懂电路设计
资深产品硬件研发工程师,与你讨论电路设计!
layout leader工程师任工谈PCB设计
与搞电源小哥一起揭秘电源设计那些难点
下载
电子书
电源技术知识总结
常用电源设计技巧图解
开关电源噪声-EMC(上)
开关电源噪声-EMC(下)
凡亿电路-PCB封装设计指导白皮书
精华资料
龙芯生态白皮书
中国物联网操作系统市场研究白皮书
AIGC(GPT-4)赋能通信行业应用白皮书
OPPO 《6G:极简多能 构建移动的世界》白皮书
智慧充电桩物联网技术白皮书
常用软件
Altium Designer21.9.2软件安装包下载
Cadence SPB OrCAD Allegro 17.4安装包及补丁下载
MATLAB 2020软件安装包下载
PADS 软件下载
LabVIEW 软件下载
学院
课程
直播
开发板购买
更多
电子发烧友
电子新闻
电子电路
技术文库
行业应用
电子标签
资料下载
电子元器件
技术研讨会
在线研讨会
特色服务
企业号
硬声APP
发烧友APP
产品库
积分商城
VIP会员
签到
经验
淘贴
华秋智造
PCB计价
SMT计价
元器件采购
BOM计价
Layout计价
钢网计价
PCB下单助手
工程师工具
PCB在线检查
华秋CAM
datasheet查询
替代料查询
免费样品申请
在线计算工具
工程师专区
品牌厂商查询
华秋DFM
帖子
搜索历史
清空
搜索热词
本版
帖子
用户
发 帖
提问题
发经验
发资料
发讨论
发视频
草稿箱
登录/注册
完善资料让更多小伙伴认识你,还能领取
20
积分哦,
立即完善>
3天内不再提示
每日签到
发烧友10周年庆典,全网超值优惠来袭!千元现金券,下单抽奖赶紧参与》》
电子发烧友论坛
/
嵌入式论坛
/
嵌入式论坛
电路图及DIY
电源技术论坛
综合技术与应用
无线通信论坛
EDA设计论坛
测试测量论坛
招聘/交友/外包/交易/杂谈
官方社区
FPGA|CPLD|ASIC论坛
ARM技术论坛
STM32/STM8技术论坛
嵌入式技术论坛
单片机/MCU论坛
RISC-V技术论坛
瑞芯微Rockchip开发者社区
DSP论坛
/
【小梅哥FPGA进阶教程】第九章 基于串口猎人软件的串口 ...
[经验]
【小梅哥FPGA进阶教程】第九章 基于串口猎人软件的串口示波器 下
梅雪松
2017-2-13 10:28:53
7373
示波器
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
0
5
4、DDS基本原理
注:本文内容摘抄自周立功编写的教材《EDA实验与实践》196~197页。
DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点,很容易实现频率,相位,和幅度的数控调制,广泛应用于
通信
领域。
DDS的基本结构图如图1所示:
图1 DDS的基本结构图
主要由相位累加器,相位调制器,正弦数据表,和D/A转换器构成,相位累加器由N位加法器与N位寄存器构成。每来一个时钟,加法器就将频率控制字,与累加寄存器输出的相位数据相加,相加的结果又反馈至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加,这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。由此可以看出,在每一个时钟脉冲输入时,相位累加器便把频率控制字累加一次。相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率,就是DDS输出的信号频率,用相位累加器输出的数据,作为波形存储器的相位采样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位到幅度的转换,波形存储器的付出送到D/A转换器,由D/A转换器将数字信号转换成模拟信号输出,DDS信号流程示意图如图4.51所示。
图2 DDS信号流程示意图
由于相位累加器为N位,相当于把正弦信号在相位上的精度定义为N位,(N的取值范围一般为24~32),所以其分辨率为1/2N,若系统时钟频率为Fclk,频率控制字fword为1,则输出频率为Fout=Fclk/2N,这个频率相当于“基频”,若fword为B,则输出频率为
当系统输入时钟频率,Fclk不变时,输出信号频率由频率控制字M所决定,由上式可得:
其中B为频率字,注意B要取整,有时会有误差,在本设计中,N取32位,系统时钟频率Fclk为120兆,
选取ROM的地址(即相位累加器的输出数据)时,可以间隔选通,相位寄存器输出的位数一般取10~16位,这种截取方法称为截断式用法,以减少ROM的容量,M太大会导致ROM容量的成倍上升,而输出精度受D/A位数的限制未有很大改善,在本设计中M取12位。
以上为周立功《EDA实验与实践》一书中对DDS原理的介绍
DDS原理再解释。
上面的对DDS原理的解释,还是有部分同学反映不够直观,读完之后还是不明白DDS究竟是怎么控制频率和相位的,那么,这里小梅哥再用更加通俗的方式给大家讲解一下。
如图3,为一个完整周期的正弦信号的波形,总共有33个采样点,其中第1点和第33点的
值相同,第33点为下一个周期的起始点,因此,实际一个周期为32个采样点(1~32)。因为是在
matlab
中生成的,因此起始点为1,而不是我们常见的0,这里对我们理解DDS的原理没有任何影响,因此不必过多纠结。
图3 32个采样点的正弦信号波形
图4 16个采样点的正弦信号波形
我们要使用
FPGA
控制DAC来输出这样一个周期的正弦信号,每1ms输出一个数值。如果每个点都输出,则总共输出这一个完整的周期信号需要输出32个点,因此输出一个完整的信号需要32ms,则输出信号的频率为1000/32Hz。
假如,我们现在用这一组数据来输出一个2*(1000/32)Hz的正弦信号,因为输出信号频率为2*(1000/32)Hz,那么输出一个完整的周期的正弦波所需要的时间为32/2,即16ms,为了保证输出信号的周期为16ms,那么,我们就需要对我们的输出策略进行更改,上面输出周期为32ms的信号时,我们采用的为逐点输出的方式,以32个点来输出一个完整的正弦信号,而我们FPGA控制DAC输出信号的频率固定为1ms,因此,我们要输出周期为16ms的信号,只能输出16个点来表示一个完整的周期。我们这里选择以每隔一个点输出一个数据的方式,例如,我们可以选择输出(1、3、5、7……29、31)这些点,因为采用这些点,我们还是能够组成一个完整的周期的正弦信号,而输出时间缩短为一半,则频率提高了一倍。最终结果如上图4所示。
如果我们需要输出频率为(1/2)*(1000/32)Hz,即周期为64ms,则只需要以此组数据为基础,每2ms输出一个数据即可,例如第1ms和第2ms输出第一个点,第3ms和第4ms输出第二个点,以此类推,第63ms和第64ms输出第32个点,即可实现周期加倍,即频率减半的效果。
对于相位的调整,则更加简单,我们只需要在每个取样点的序号上加上一个偏移量,便可实现相位的控制。例如,上面默认的是第1ms时输出第一个点的数据,假如我们现在在第1ms时从第9个点开始输出,则将相位左移了90度,这就是控制相位的原理。
实现DDS输出时,将横坐标上的数据作为ROM的地址,纵坐标上的数据作为ROM的输出,那么指定不同的地址就可实现对应值的输出。而我们DDS输出控制频率和相位,归结到底就是控制ROM的地址。
了解了以上原理之后,再来设计DDS系统就很容易了,以下为DDS信号发生器的代码:
4.1 DDS_Module
5、
仿真
验证:
以上分部分介绍了系统的各个关键模块的设计。接下来,我们来对该设计进行仿真验证。因为该实验是基于串口的,为了实现仿真验证,这里小梅哥分别编写了一个串口发送的仿真模型(Uart_Tx_Model)和一个串口接收的仿真模型(Uart_Rx_Model),两个仿真模型的设计都较为简单,但是我们却可以通过该模型模拟对我们的设计进行串口数据的发送和接收,并实时打印仿真模型发送的数据与接收到的数据。关于仿真模型的代码,这里只贴上代码,不做具体解释。(此贴回复超过100条我就专门开文讲解testbench的编写技巧)
以下为串口接收仿真模型的代码
以下为串口发送仿真模型的设计代码
以下为仿真顶层模块的设计
下图为系统仿真架构图:
这里,在我们提供的工程中,已经设置好了Na
ti
velink,用户只需要在Quartus II中点击tools—run rtl simulation tool—rtl simulation即可自动调用modelsim-altera并执行仿真,因为这里完全模拟真实时序进行仿真,因此运行完整个仿真大约需要5—10分钟。
仿真完成后,结果如图所示:
其中,Rx_Byte为串口接收仿真模型接收到的数据,这里以波形的方式展示。ADC_Data为ADC采样结果,DDS_Data为DDS输出的数据最下方为按键标志和按键结果,当按下按键1时,数据通道切换为ADC的采样结果,当按下按键2时,数据通道切换为DDS的输出数据。
(如果用户在进行仿真的过程中发现仿真无法运行,在modelsim中提示错误的话,请删除simulation—>modelsim文件夹下除wave.do和mydo.do文件外的其他所有文件,然后在quartus 中重新启动仿真)
6、基于串口猎人的板级验证
这里,我们使用一款功能非常强大的串口调试软件——串口猎人来调试我们的设计。串口猎人的安装这里不做过多的讲述。首先,我们将FPGA系统的sof文件配置到fpga中,然后运行串口猎人软件,串口猎人打开后界面如下所示:
我们点击图中的动画即可让该动画消失。
接下来我们载入预先设置好的配置文件,如下图所示:
我们点击右下角的“载入”按钮,在弹出的界面中,定位到我们本实验的根目录,选择“serialhunter.ini”文件,
点击打开。
切换到高级发码选项卡,显示如下所示:
点击启动自动发码。
回到基本功能选项卡,可以看到,窗口中开始连续不断的接收到数据,如下图所示:
此时,我们切换到波形显示选项卡,可看到如下所示的效果:
表明我们已经正确的接收到了波形数据。
切换到码表选项卡,效果如下图所示:
然后,我们切换到柱状显示选项卡,效果如下所示: