当前位置:首页 > 公众号精选 > 大鱼机器人
[导读]‍‍摘要:原定于7月28日才发布的器件清单,提前2天在26号就发布了。感觉大家现在应该猜题预测,与其猜题,不如静下心来做题。盲目猜题是没有必要的,熟悉相关器件倒尤为重要。不要到处去水群聊天,听风就是雨,题目要是能被猜中了,那只能说题目出的很差,都能被我们猜到。既然猜不到,那就别浪...

摘要:原定于7月28日才发布的器件清单,提前2天在26号就发布了。感觉大家现在应该猜题预测,与其猜题,不如静下心来做题。盲目猜题是没有必要的,熟悉相关器件倒尤为重要。不要到处去水群聊天,听风就是雨,题目要是能被猜中了,那只能说题目出的很差,都能被我们猜到。
既然猜不到,那就别浪费时间,相反,把这些时间好好利用起来,把手上的事情继续完成,把该买的元器件买好,买晚了就贵了。买回来之后每个组件尽可能的去熟悉使用,准备好相关程序。

1、电赛清单

其实国赛年的电赛仪器设备和主要元器件清单基本都差不多,只有很小的改动。2019年国赛年同样有DDS模块,今年照样有DDS模块。

2、什么是DDS

DDS直接数字式频率综合器 DDS(Direct Digital Synthesizer),实际上是一种分频器:通过编程频率控制字来分频系统时钟(SYSTEM CLOCK)以产生所需要的频率。DDS有两个突出的特点,一方面,DDS工作在数字域,一旦更新频率控制字,输出的频率就相应改变,其跳频速率高;另一方面,由于频率控制字的宽度宽(48bit 或者更高),频率分辨率高。说人话:可以把他理解为一个信号源即信号发生器。
高配版DDS模块
电赛肯定不会让你自己搞这样的仪器做信号源,用你的DDS代替它。

3、DDS工作原理

DDS主要分成3 部分:相位累加器 , 相位幅度转换 , 数模转换器(DAC)。
  • 相位累加器
一个正弦波,虽然它的幅度不是线性的,但是它的相位却是线性增加的。DDS 正是利用了这一特点来产生正弦信号。根据DDS的频率控制字的位数N,把 360° 平均分成了2的N次方等份。
  • 相位幅度转换
通过相位累加器,我们已经得到了合成Fout 频率所对应的相位信息,然后相位幅度转换器把 0°~360°的相位转换成相应相位的幅度值。比如当DDS选择为2Vp-p的输出时,45°对应的幅度值为 0.707V,这个数值以二进制的形式被送入DAC。这个相位到幅度的转换是通过查表完成的。
  • DAC输出
代表幅度的二进制数字信号被送入DAC中,并转换成为模拟信号输出。DAC的位数并不影响输出频率的分辨率。输出频率的分辨率是由频率控制字的位数决定的

4、怎么做出一个DDS

注意电赛清单说的是:DDS芯片或模块。也就是意味着你可以买芯片自己设计电路板,也可以自己买DDS模块。如果你有能力当然是直接买芯片自己画板子,这样你做出来的DDS肯定你那些直接买DDS模块的同学更有优势。当然如果你觉得难度比较大还是买一个DDS模块吧!
聪明如我

如何选择DDS

怎么选择具体的哪一款DDS芯片还是要看你自己的预算和你的需求。今天主要讲的DDS模块是安富莱家的AD9833这一款DDS模块。至于为啥选择一款,因为19年电赛购买过这一款,价格也还便宜,电路和编程相对来说还是比较简单的。强调一点这不是打广告啊!

5、AD9833简介

AD9833是ADI公司生产的一款低功耗,可编程波形发生器,能够产生正弦波、三角波、方波输出。波形发生器广泛应用于各种测量、激励和时域响应领域,AD9833无需外接元件,输出频率和相位都可通过软件编程,易于调节,频率寄存器是28位的,主频时钟为25MHz时,精度为0.1Hz,主频时钟为1MHz时,精度可以达到0.004Hz。可以通过3个串行接口将数据写入AD983,这3个串口的最高工作频率可以达到40MHz,易于与DSP和各种主流微控制器兼容。AD9833的工作电压范围为2.3V-5.5V。AD9833还具有休眠功能,可使没被使用的部分休眠,减少该部分的电流损耗,例如,若利用AD9833输岀作为时钟源,就可以让DAC休眠,以减小功耗,该电路采用10引脚MSOP型表面贴片封装,体积很小。

AD9833特点

  • 频率和相位可数字编程
  • 工作电压为3V时,功耗仅为20mW
  • 输出频率范围为OHz-12.5MHz
  • 频率寄存器为28位(在25Mz的参考时钟下,精度为0.1Hz)
  • 可选择正弦波、三角波、方波输出
  • 无需外界元件
  • 3线SPI接口
  • 温度范围为-40℃- 105℃
总结一下就是:这个模块与单片机之间是通过SPI通信的方式,通过对芯片内部寄存器的操作可以调节模块的数据频率和相位。可输出的频率范围是0—12.5MHZ。可以输出正弦波、三角波和方波。

AD9833模块电路图

波形发生电路
运算放大输出电路
为了使大家比较好理解,我直接截取的成品模块原理图。可以看到AD9833是一块完全集成的DDS,仅需要1个外部参考时钟、1个低精度电阻器和一个解耦电容器就能产生高达12.5Mz的正弦波。AD933的核心是28位的相位累加器,它由加法器和相位寄存器组成,每来1个时钟,相位寄存器以步长增加,相位寄存器的输岀与相位控制字相加后输入到正弦査询表地址中。正弦査询表包含1个周期正弦波的数字幅度信息,每个地址对应正弦波中0°-360°范围内的1个相位点。下面这张图来自AD9833的数据手册,可以看到每个引脚的功能说明都非常详细,再配合上图的电路原理图就可以一目了然了!
管脚功能描述
接下来就是单片机如何与芯片的引脚相连,以及如何写驱动代码了。

6、AD9833驱动代码

一般你在网上买到模块后,卖家一都会送你实例代码,可能实例代码与你所用的单片机型号不同。但是大致的思路框架是一样的,下面就以安富莱家的AD9833代码为例。说明:他家的平台是STM32F407,也许你用的F103系列或者MSP430,但是驱动代码都是的。你完全可以把驱动代码的.c和.h文件导入到你的项目中即可。

功能描述

AD9833有3根串行接口线,与SPI、QSPI、DSP接口标准兼容,在串口时钟SCLK的作用下,数据是以16位的方式加载到设备上,FSYNC引脚是片选使能引脚,电平触发方式,低电平有效。进行串行数据传输时,FSYNC引脚必须置低,要注意 FSYNC有效到SCLK下降沿的建立时间的最小值。FSYNC置低后,在16个SCLK的下降沿数据被送到AD9833的输入移位寄存器,在第16个SCLK的下降沿FSYNC可以被置高,但要注意在SCLK下降沿到FSYC上升沿的数据保持时间的最小和最大值。当然,也可以在 FSYNC为低电平的时候,连续加载多个16位数据,仅在最后一个数据的第16个SCLK的下降沿的时将 FSYNC置高,最后要注意的是,写数据时SCLK时钟为高低电平脉冲,但是,在 FSYNC刚开始变为低时,(即将开始写数据时),SCLK必须为高电平(注意t11这个参数)。当AD9833初始化时,为了避免DAC产生虚假输出,RESET必须置为1(RESET不会复位频率、相位和控制寄存器),直到配置完毕,需要输出时才将 RESET置为0;RESET为0后的8-9个MCLK时钟周期可在DAC的输出端观察到波形。AD9833写入数据到输出端得到响应,中间有一定的响应时间,每次给频率或相位寄存器加载新的数据,都会有7-8个MCIK时钟周期的延时之后,输出端的波形才会产生改变,有1个MCLK时钟周期的不确定性,因为数据加载到目的寄存器时,MCLK的上升沿位置不确定。既然模块要与单片机相连那肯定首先要确定使用那几个引脚,因为他们之间是通过3线的SPI方式通信的。

初始化GPIO

* 定义GPIO端口 */
#define RCC_SCLK  RCC_AHB1Periph_GPIOB
#define PORT_SCLK GPIOB
#define PIN_SCLK GPIO_Pin_3

#define RCC_SDATA  RCC_AHB1Periph_GPIOB
#define PORT_SDATA GPIOB
#define PIN_SDATA GPIO_Pin_5

/* 片选 */
#define RCC_FSYNC  RCC_AHB1Periph_GPIOF
#define PORT_FSYNC GPIOF
#define PIN_FSYNC GPIO_Pin_7

/* 定义口线置0和置1的宏 */
#define FSYNC_0() PORT_FSYNC->BSRRH = PIN_FSYNC
#define FSYNC_1() PORT_FSYNC->BSRRL = PIN_FSYNC

#define SCLK_0() PORT_SCLK->BSRRH = PIN_SCLK
#define SCLK_1() PORT_SCLK->BSRRL = PIN_SCLK

#define SDATA_0()  PORT_SDATA->BSRRH = PIN_SDATA
#define SDATA_1()  PORT_SDATA->BSRRL = PIN_SDATA

void bsp_InitAD9833(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;

 FSYNC_1(); /* FSYNC = 1 */

 /* 打开GPIO时钟 */
 RCC_AHB1PeriphClockCmd(RCC_SCLK | RCC_SDATA | RCC_FSYNC, ENABLE);

 /* 配置几个推挽输出IO */
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;  /* 设为输出口 */
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  /* 设为推挽模式 */
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; /* 上下拉电阻不使能 */
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz; /* IO口最大速度 */

 GPIO_InitStructure.GPIO_Pin = PIN_SCLK;
 GPIO_Init(PORT_SCLK, 
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

摘要:波形平滑、频率稳定的正弦信号是仿真研究的重要前提。为了能够方便地产生此信号,文章提出了一种基于DDS技术的正弦信号发生器的设计方法。该方法利用FPGA芯片及D/A转换器,采用直接数字频率合成(DDS)技术,设计并实...

关键字: 直接数字频率合成器 三相正弦信号 FPGA DDS

摘要:利用EDA技术实现硬件设计的最典型方法是用Quartusll设计完成的,但是此方法并不适用于涉及算法类或信号处理的设计项目。Altera公司2002年推出的DSPBuilder可以很好地帮助设计者完成此类设计项目。...

关键字: DSP/Builder Matlab Simulink DDS 数字滤波器

不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我没有信号发生器?自己做一个呗!买得起的…就不用看这篇文章了,开个玩笑,DDS实现波形输出的代码还是很值得一看的。STM32DDS是我能想到的自制信号发生器...

关键字: DDS STM32 信号发生器

不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我没有信号发生器?自己做一个呗!买得起的…就不用看这篇文章了,开个玩笑,DDS实现波形输出的代码还是很值得一看的。STM32DDS是我能想到的自制信号发生器...

关键字: DDS STM32 信号发生器

‍‍摘要:原定于7月28日才发布的器件清单,提前2天在26号就发布了。感觉大家现在应该猜题预测,与其猜题,不如静下心来做题。盲目猜题是没有必要的,熟悉相关器件倒尤为重要。不要到处去水群聊天,听风就是雨,题目要是能被猜中了...

关键字: DDS

通过这篇文章,小编希望大家可以对信号发生器的两类应用以及DDS信号发生器的功能的相关情况有所认识和了解。

关键字: 信号发生器 滤波器 DDS

专家描述了用于工业物联网的标准软件栈可以集成到现代自动化系统中的方式。 在大型工业系统中,集成是一项越来越大的挑战。过去,工业系统集成主要集中在设备,网络和其他硬件物理层。大多数情况下,

关键字: 工业物联网 软件 集成 DDS

4月22日,疫情发生以来,中国互联网络信息中心(CNNIC)采取多项措施助力抗击疫情、支持复工复产新基建。同时,继续在提升国家顶级域名服务运行水平上发力,持续提高服务水平协议(SLA)承诺,加速助力复

关键字: NI IC DDS 互联网

专家描述了用于工业物联网的标准软件栈可以集成到现代自动化系统中的方式。 在大型工业系统中,集成是一项越来越大的挑战。过去,工业系统集成主要集中在设备,网络和其他硬件物理层。大多数情况下,

关键字: 软件 集成 工业物联网 DDS

摘要:本文采用单片机控制DDS专用芯片(AD9854)设计了信号发生器。以AD9854芯片为核心,详细分析了该信号发生器的系统结构、软硬件设计和具体电路实现,并介绍了使用单片机STC12LE5A56S2对AD9854的控...

关键字: 上位机 DDS 任意波形发生器 AD9854
关闭
关闭