DDS信号发生器(stm32+ad9850)

这篇具有很好参考价值的文章主要介绍了DDS信号发生器(stm32+ad9850)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

硬件

正点原子精英板、ad9850、杜邦线
ad9850连接stm32,STM32,DDS,AD9850,stm32,单片机,嵌入式硬件,ad9850

软件

/********************************************
函数名称:AD9850_Delay
功    能:AD9850延时函数
参    数:z - 延时长度
返回值  :无
*********************************************/
void AD9850_Delay(unsigned int z)
{
    for(;z>0;z--)
    {;}
}

/*--------------------并行模式-----------------------*/
#ifdef MODE_PARALLEL   
/********************************************
函数名称:AD9850_Reset_Parallel
功    能:在并行模式下复位AD9850
参    数:无
返回值  :无
*********************************************/
void AD9850_Reset_Parallel(void)
{
    AD9850_WCLK_CLR ;
    AD9850_FQUD_CLR ;
    //RST信号
    AD9850_RST_CLR ;
    AD9850_RST_SET ;
    AD9850_Delay(0xFFFF) ;
    AD9850_RST_CLR ;
}

/********************************************
函数名称:AD9850_Write_Parallel
功    能:在并行模式下写AD9850寄存器
参    数:W0 - W0寄存器的值
          freq - 频率值
返回值  :无
*********************************************/
void AD9850_Write_Parallel(unsigned char W0,unsigned long freq)//W0是用来设置相位的
{
    unsigned char wdata ;//写入数据(一次8位)
        unsigned long  y ;
			y=4294967296.0/125;//4294967296是2的32次方
			y*=(((float)freq)/1000000); //y(频率控制字)的计算公式:y = (freq * 4294967296)/125M
	
    wdata=W0 ;  //写w0
    GPIO_Write(AD9850_DATA_PORT ,wdata) ;   
		AD9850_WCLK_SET ;  
		AD9850_WCLK_CLR ;
		delay_ms(1);
    
    wdata=y>>24 ;  //写w1(从高位开始写入)
    GPIO_Write(AD9850_DATA_PORT ,wdata) ; 
		AD9850_WCLK_SET ;  
		AD9850_WCLK_CLR ;
	 
    	delay_ms(1);
    wdata=y>>16 ;  //写w2
    GPIO_Write(AD9850_DATA_PORT ,wdata) ;
		AD9850_WCLK_SET;
    AD9850_WCLK_CLR ;
		
    	delay_ms(1);
    wdata=y>>8 ;  //写w3
    GPIO_Write(AD9850_DATA_PORT ,wdata) ;
		AD9850_WCLK_SET;
		AD9850_WCLK_CLR ;
		
    	delay_ms(1);
    wdata=y>>0 ;  //写w4
		GPIO_Write(AD9850_DATA_PORT ,wdata) ;  
		AD9850_WCLK_SET;		
    AD9850_WCLK_CLR ;
	
    	delay_ms(1);
		 AD9850_FQUD_SET ;   //移入使能
    AD9850_Delay(0xFFFF) ;
		AD9850_FQUD_CLR ;  
   
}
#endif /* MODE_PARALLEL */
/*------------------------并行模式-------------------------*/
/*---------------------------------------------------------*/

/*------------------------串行模式-------------------------*/
#ifdef MODE_SEIAL
/********************************************
函数名称:AD9850_Reset_Sreial
功    能:在串行模式下复位AD9850
参    数:无
返回值  :无
*********************************************/
/********************************************
函数名称:AD9850_Write_Serial
功    能:在串行模式下写AD9850寄存器
参    数:W0 - W0寄存器的值
          freq - 频率值
返回值  :无
*********************************************/
void AD9850_Write_Serial(unsigned char W0,unsigned long freq)
{
    unsigned char i,wdata ;
     unsigned long  y ;
	y=4294967296.0/125;
	y*=(((float)freq)/1000000);
	    
    wdata = y>>0 ;   //写w4
	    AD9850_WCLK_CLR ;
    AD9850_FQUD_CLR ;
    //RST信号
    AD9850_RST_CLR ;
    AD9850_RST_SET ;
//    AD9850_Delay(0xFFFF) ;
	delay_ms(3);
    AD9850_RST_CLR ;
    //WCLK信号
    AD9850_WCLK_CLR ;
    AD9850_WCLK_SET ;
//    AD9850_Delay(0xFFFF) ;
	delay_ms(3);
    AD9850_WCLK_CLR ;
    //FQUD信号
    AD9850_FQUD_CLR ;
    AD9850_FQUD_SET ;
//    AD9850_Delay(0xFFFF) ;
	delay_ms(3);
    AD9850_FQUD_CLR ;
    for(i=0 ;i<8 ;i++)
    {
        if(wdata & 0x01)
          AD9850_DATA_Write_1 ;
        else
          AD9850_DATA_Write_0 ;
        AD9850_WCLK_SET ;
        wdata >>= 1 ;
        AD9850_WCLK_CLR ;
    }
    wdata = y>>8 ;  //写w3
     for(i=0 ;i<8 ;i++)
    {
        if(wdata & 0x01)
          AD9850_DATA_Write_1 ;
        else
          AD9850_DATA_Write_0 ;
        AD9850_WCLK_SET ;
        wdata >>= 1 ;
        AD9850_WCLK_CLR ;
    }
    wdata = y>>16 ;  //写w2
     for(i=0 ;i<8 ;i++)
    {
        if(wdata & 0x01)
          AD9850_DATA_Write_1 ;
        else
          AD9850_DATA_Write_0 ;
        AD9850_WCLK_SET ;
        wdata >>= 1 ;
        AD9850_WCLK_CLR ;
    }
    wdata = y>>24 ;  //写w1
     for(i=0 ;i<8 ;i++)
    {
        if(wdata & 0x01)
          AD9850_DATA_Write_1 ;
        else
          AD9850_DATA_Write_0 ;
        AD9850_WCLK_SET ;
        wdata >>= 1 ;
        AD9850_WCLK_CLR ;
    }
    wdata = W0 ;  //写w0
     for(i=0 ;i<8 ;i++)
    {
        if(wdata & 0x01)
          AD9850_DATA_Write_1 ;
        else
          AD9850_DATA_Write_0 ;
        AD9850_WCLK_SET ;
        wdata >>= 1 ;
        AD9850_WCLK_CLR ;
    }
    
    AD9850_FQUD_SET ;  //移入使能
//    AD9850_Delay(0xFFFF) ;
    AD9850_FQUD_CLR ;
}
#endif /* MODE_SERIAL */

/*------------------------串行模式-------------------------*/
/*---------------------------------------------------------*/

/********************************************
函数名称:Init_AD9834(主要是初始化GPIO)
功    能:初始化AD9834
参    数:无
返回值  :无
*********************************************/
void Init_AD9850(void)
{
#ifdef MODE_SEIAL   //串行模式
    GPIO_InitTypeDef GPIO_InitStructure ;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
    GPIO_InitStructure.GPIO_Pin = AD9850_WCLK | AD9850_FQUD | AD9850_RST | AD9850_DATA ;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(AD9850_CONTROL_PORT ,&GPIO_InitStructure) ;
    
#endif
    
#ifdef MODE_PARALLEL //并行模式
	
    GPIO_InitTypeDef GPIO_InitStructure ;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO , ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);//?
    GPIO_InitStructure.GPIO_Pin = AD9850_WCLK | AD9850_FQUD | AD9850_RST ;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
    GPIO_Init(AD9850_CONTROL_PORT ,&GPIO_InitStructure) ;
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All ;//可以
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(AD9850_DATA_PORT ,&GPIO_InitStructure);
    
    AD9850_Reset_Parallel() ;//并行模式下复位AD9850
#endif
    
}

效果

ad9850连接stm32,STM32,DDS,AD9850,stm32,单片机,嵌入式硬件,ad9850
ad9850连接stm32,STM32,DDS,AD9850,stm32,单片机,嵌入式硬件,ad9850

程序链接

https://download.csdn.net/download/qq_45974939/87672298文章来源地址https://www.toymoban.com/news/detail-590910.html

到了这里,关于DDS信号发生器(stm32+ad9850)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于AD9767高速DAC的DDS信号发生器(Verilog&Vivado)

    基于AD9767高速DAC的DDS信号发生器 提示:以下是本篇文章正文内容,下面案例可供参考 1.做一个双通道的信号发生器; 2.简单调整每个通道的频率输出; 3.能够调整每个通道的输出相位; 4.能够输出正弦波,三角波,方波。 代码如下(示例): 代码如下(示例): 【附件:】

    2024年02月06日
    浏览(57)
  • 基于vivado+Verilog FPGA开发 — 基于AD9767高速DAC的DDS信号发生器

    目录  一、功能定义 二、设计输入  1、主模块 2、DDS模块 3、 按键消抖模块 三、功能仿真  四、综合优化 五、布局布线 六、时序仿真 七、板级调试  代码规范:Verilog 代码规范_verilog代码编写规范-CSDN博客 开发流程:FPGA基础知识----第二章 FPGA 开发流程_fpga 一个项目的整个

    2024年03月18日
    浏览(73)
  • 基于STC89C52RC芯片 高频DDS信号发生器AD9851信号源方波正弦波系统设计

    一开始是使用按键进行频率输出数值的增加或者减少,后改进成使用EC11调节输出数值,使数值的输出更加顺滑流畅。 AD9851.c AD9851.h LCD12864.c LCD12864.h EC11.c EC11.h main.c

    2024年02月05日
    浏览(54)
  • DDS信号发生器Verilog波形发生器FPGA

    名称:DDS信号发生器Verilog波形发生器 软件:Quartus 语言:Verilog 要求:  1.可产生正弦波,锯齿波,三角波,方波4种波形,频率可调  2.具有波形选择、起动、停止功能。 代码下载:DDS信号发生器Verilog波形发生器_Verilog/VHDL资源下载 代码网:hdlcode.com 部分代码展示 设计文档

    2024年02月07日
    浏览(49)
  • 基于FPGA的DDS信号发生器

        两个礼拜前就像写这个文档了,但是一直鸽到现在,主要是人摆了。还有个技术上的原因是,我想用串口屏显示波形,在串口调试助手上返回的数据是对的,但是发到串口屏上啥反应没有,人就很麻,如果这个弄不出来,前面 HMI 串口屏的工程、人机交互界面就白做了。

    2024年02月06日
    浏览(46)
  • FPGA之简易DDS信号发生器设计

    设计一个能产生频率可变、相位可调的能产生正弦波、三角波、方波、锯齿波的信号发生器。 DDS 是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。与传统的频率合成器相比,DDS 具有低成本、低功耗、高分辨率和快速转换时间等优点,

    2024年02月02日
    浏览(47)
  • 基于vivado DDS ip核的DDS信号发生器(可调频调相)

    基于Vivado DDS ip核的DDS信号发生器: 在Vivado软件中调出DDS ip核进行设置,很多参数可以参考xilinx官方手册,比较重要的是System Clock系统时钟和Phase Widh相位宽度的设置,这是最终得到波形的频率和相位所需要的基础参数,在这里我分别设置为50Mhz和16bit。 在implementation页面设置频

    2024年02月12日
    浏览(34)
  • 基于FPGA的简易 DDS 信号发生器的设计

    DDS 是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。与传统的频率合成器相比, DDS 具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。作为设计人员,我们

    2024年02月07日
    浏览(54)
  • 毕设分享|基于51单片机DDS信号发生器设计

    在电子通信技术日益发展的时代潮流下,直接式(DFS)和锁相式(PLL)已经不能满足生活和科研方面对于频率技术的需求。经过科研人员的不断攻坚下,直接数字频率合成器(DDS)应运而生。它现在广泛运用于移动通信、电子雷达、航天等方面。本次设计主要通过FPGA模块+单片机最小

    2024年02月03日
    浏览(55)
  • 【毕业设计—DDS信号发生器】Quartus II 软件新建工程

    大学四年的时间转瞬即逝,2023年我将迎来我的本科毕业。为了记录自己的研究进展,我将在这儿分享我的毕业设计进度~~博客涉及的知识点,如有不对,欢迎大家及时纠正,共同进步! 我安装的是Quartus II 13.1 版本。 1.在电脑D磁盘下新建一个文件夹【DDS】,然后分别新建4个子

    2024年02月03日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包