找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1952|回复: 1
收起左侧

AD9833+STM32单片机驱动程序 电路原理图 引脚图PDF资料

[复制链接]
ID:1090397 发表于 2023-8-2 14:11 | 显示全部楼层 |阅读模式
AD9833模块电路原理图如下:
51hei.png

AD9833引脚图及pdf资料:
51hei.png

实验操作:
1、使用排线连接驱动板与AD9833模块,驱动板上排线方向唯一,驱动板以及DDS模块上,板子背面双排针,方形焊盘为双排针1脚,对应连接即可
2、使用5V电源连接AD9833模块,使用5V电源连接DDS驱动板,
3、AD9833模块侧面输出高频头,使用SMA屏蔽线,连接示波器
3、编译该代码,使用jlink下载器下载代码到驱动板
4、确保AD9833模块已上电。按下驱动板复位键(或驱动板重新上电),调整示波器时间档位到合适位置,即可观察到输出波形

5、如使用自己的STM32开发板,请按下方描述接线,如使用其他引脚请自行移植更改程序。
/*********************************************************************************************/

【*】 引脚分配
   
STM32控制板        模块丝印    芯片引脚名    功能
PA3        ----->    SYKC        FSYNC        低电平有效控制输入
PA4        <----->    CLK        SCLK        串行时钟输入
PA5        ----->    DATA        SDATA        串行数据输入
(3.3V,5V均可)    ----->    V+            控制板3.3V或5V与AD9833模块V+连接。
GND        <---->    GND            控制板与AD9833模块需共地。
浮空        ------    其他            所有未说明但模块有留出管脚,未使用可直接浮空,功能请参考数据手册   

单片机源程序如下:
  1. 作者:康威电子,大家可以找他获得模块
  2. /**********************************************************
  3. 功能:参考时钟25MHz,stm32f103rct6控制AD9833点频调相位输出,正弦波范围0-10M,
  4.                         方波:0-500K,三角波:0-1M 。
  5. 接口:控制引脚接口请参照AD9833.h
  6. 时间:2023/06/08
  7. 版本:2.1
  8. 作者:康威电子
  9. 其他:本程序只供学习使用

  10.                                         AD9833        单片机
  11. 硬件连接:        SYKC——PA3;     
  12.                                         CLK ——PA4;   
  13.           DATA——PA5;              
  14.           V+——(3.3V,5V均可)
  15.           GND--GND(0V)  

  16. **********************************************************/

  17. #include "stm32_config.h"
  18. #include "stdio.h"
  19. #include "AD9833.h"

  20. int main(void)
  21. {
  22.         MY_NVIC_PriorityGroup_Config(NVIC_PriorityGroup_2);        //设置中断分组
  23.         delay_init(72);        //初始化延时函数
  24.         delay_ms(500);//延时一会儿,等待上电稳定,确保AD9833比控制板先上电。
  25.         
  26.         //代码移植建议
  27.         //1.修改头文件AD9833.h中,自己控制板实际需要使用哪些控制引脚。如AD9833_FSYNC脚改成PA1控制,则定义"#define AD9833_FSYNC        PAout(1)"
  28.         //2.修改C文件AD9833.c中,AD983_GPIO_Init函数,所有用到管脚的GPIO输出功能初始化
  29.         //3.完成
  30.         
  31.         AD9833_Init();//IO口及AD9833寄存器初始化
  32.         
  33.         //频率入口参数为float,可使信号的频率更精确
  34.         AD9833_SetFrequencyQuick(1000.0,AD9833_OUT_SINUS);//写输出频率1000.0Hz,输出正弦波
  35. //        AD9833_SetFrequencyQuick(1000.0,AD9833_OUT_TRIANGLE);//写输出频率1000.0Hz,输出三角波
  36. //        AD9833_SetFrequencyQuick(1000.0,AD9833_OUT_MSB);//写输出频率1000.0Hz,输出方波


  37.         while(1)
  38.         {
  39.                 AD9833_SetPhase(AD9833_REG_PHASE0,0);        //设置0°相位,范围:0-4095(0-360°)
  40.                 delay_ms(2);
  41.                 AD9833_SetPhase(AD9833_REG_PHASE0,2048);//设置180°相位,范围:0-4095(0-360°)
  42.                 delay_ms(2);
  43.         
  44.         }
  45. }


复制代码
  1. #include "AD9833.h"               
  2. #include "delay.h"        

  3. //时钟速率为25 MHz时, 可以实现0.1 Hz的分辨率;而时钟速率为1 MHz时,则可以实现0.004 Hz的分辨率。
  4. //调整参考时钟修改此处即可。
  5. #define FCLK 25000000        //设置参考时钟25MHz,板默认板载晶振频率25Mhz。

  6. #define RealFreDat    268435456.0/FCLK//总的公式为 Fout=(Fclk/2的28次方)*28位寄存器的值

  7. /************************************************************
  8. ** 函数名称 :void AD983_GPIO_Init(void)  
  9. ** 函数功能 :初始化控制AD9833需要用到的IO口
  10. ** 入口参数 :无
  11. ** 出口参数 :无
  12. ** 函数说明 :无
  13. **************************************************************/

  14. void AD983_GPIO_Init(void)
  15. {

  16.     GPIO_InitTypeDef GPIO_InitStructure ;
  17.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         //使能PA端口时钟

  18.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5;

  19.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;

  20.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;

  21.     GPIO_Init(GPIOA ,&GPIO_InitStructure) ;
  22. }

  23. /**********************************************************************************************
  24. ** 函数名称 :unsigned char AD9833_SPI_Write(unsigned char* data,unsigned char bytesNumber)
  25. ** 函数功能 :使用模拟SPI向AD9833写数据
  26. ** 入口参数 :* data:写入数据缓冲区,第一个字节是寄存器地址;第二个字节开始要写入的数据。
  27.                                                 bytesNumber: 要写入的字节数
  28. ** 出口参数 :无
  29. ** 函数说明 :无
  30. ************************************************************************************************/
  31. unsigned char AD9833_SPI_Write(unsigned char* data,unsigned char bytesNumber)
  32. {
  33.   unsigned char i,j;
  34.         unsigned char writeData[5]        = {0,0, 0, 0, 0};
  35.         
  36.     AD9833_SCLK=1;
  37.     AD9833_FSYNC=0 ;

  38.         for(i = 0;i < bytesNumber;i ++)
  39.         {
  40.                 writeData[i] = data[i + 1];
  41.         }
  42.         
  43.         for(i=0 ;i<bytesNumber ;i++)
  44.         {
  45.     for(j=0 ;j<8 ;j++)      
  46.                 {
  47.         if(writeData[i] & 0x80)
  48.           AD9833_SDATA=1;
  49.         else
  50.           AD9833_SDATA=0;

  51.         AD9833_SCLK=0;
  52.         writeData[i] <<= 1;
  53.         AD9833_SCLK=1;
  54.     }
  55.         }
  56.     AD9833_SDATA=1;
  57.     AD9833_FSYNC=1;
  58.                
  59.                 return i;
  60. }

  61. /************************************************************
  62. ** 函数名称 :void AD9833_Init(void)  
  63. ** 函数功能 :初始化控制AD9833需要用到的IO口及寄存器
  64. ** 入口参数 :无
  65. ** 出口参数 :无
  66. ** 函数说明 :无
  67. **************************************************************/
  68. void AD9833_Init(void)
  69. {
  70.     AD983_GPIO_Init();
  71.     AD9833_SetRegisterValue(AD9833_REG_CMD | AD9833_RESET);
  72. }

  73. /*****************************************************************************************
  74. ** 函数名称 :void AD9833_Reset(void)  
  75. ** 函数功能 :设置AD9833的复位位
  76. ** 入口参数 :无
  77. ** 出口参数 :无
  78. ** 函数说明 :无
  79. *******************************************************************************************/
  80. void AD9833_Reset(void)
  81. {
  82.         AD9833_SetRegisterValue(AD9833_REG_CMD | AD9833_RESET);
  83.         delay_ms(10);
  84. }

  85. /*****************************************************************************************
  86. ** 函数名称 :void AD9833_ClearReset(void)  
  87. ** 函数功能 :清除AD9833的复位位。
  88. ** 入口参数 :无
  89. ** 出口参数 :无
  90. ** 函数说明 :无
  91. *******************************************************************************************/
  92. void AD9833_ClearReset(void)
  93. {
  94.         AD9833_SetRegisterValue(AD9833_REG_CMD);
  95. }

  96. /*****************************************************************************************
  97. ** 函数名称 :void AD9833_SetRegisterValue(unsigned short regValue)
  98. ** 函数功能 :将值写入寄存器
  99. ** 入口参数 :regValue:要写入寄存器的值。
  100. ** 出口参数 :无
  101. ** 函数说明 :无
  102. *******************************************************************************************/
  103. void AD9833_SetRegisterValue(unsigned short regValue)
  104. {
  105.         unsigned char data[5] = {0x03, 0x00, 0x00};        
  106.         
  107.         data[1] = (unsigned char)((regValue & 0xFF00) >> 8);
  108.         data[2] = (unsigned char)((regValue & 0x00FF) >> 0);
  109.         AD9833_SPI_Write(data,2);
  110. }

  111. /*****************************************************************************************
  112. ** 函数名称 :void AD9833_SetFrequencyQuick(float fout,unsigned short type)
  113. ** 函数功能 :写入频率寄存器
  114. ** 入口参数 :val:要写入的频率值。
  115. **                                                type:波形类型;AD9833_OUT_SINUS正弦波、AD9833_OUT_TRIANGLE三角波、AD9833_OUT_MSB方波
  116. ** 出口参数 :无
  117. ** 函数说明 :时钟速率为25 MHz时, 可以实现0.1 Hz的分辨率;而时钟速率为1 MHz时,则可以实现0.004 Hz的分辨率。
  118. *******************************************************************************************/
  119. void AD9833_SetFrequencyQuick(float fout,unsigned short type)
  120. {
  121.         AD9833_SetFrequency(AD9833_REG_FREQ0, fout,type);
  122. }

  123. /*****************************************************************************************
  124. ** 函数名称 :void AD9833_SetFrequency(unsigned short reg, float fout,unsigned short type)
  125. ** 函数功能 :写入频率寄存器
  126. ** 入口参数 :reg:要写入的频率寄存器。
  127. **                                                val:要写入的值。
  128. **                                                type:波形类型;AD9833_OUT_SINUS正弦波、AD9833_OUT_TRIANGLE三角波、AD9833_OUT_MSB方波
  129. ** 出口参数 :无
  130. ** 函数说明 :无
  131. *******************************************************************************************/
  132. void AD9833_SetFrequency(unsigned short reg, float fout,unsigned short type)
  133. {
  134.         unsigned short freqHi = reg;
  135.         unsigned short freqLo = reg;
  136.         unsigned long val=RealFreDat*fout;
  137.         freqHi |= (val & 0xFFFC000) >> 14 ;
  138.         freqLo |= (val & 0x3FFF);
  139.         AD9833_SetRegisterValue(AD9833_B28|type);
  140.         AD9833_SetRegisterValue(freqLo);
  141.         AD9833_SetRegisterValue(freqHi);
  142. }

  143. /*****************************************************************************************
  144. ** 函数名称 :void AD9833_SetPhase(unsigned short reg, unsigned short val)
  145. ** 函数功能 :写入相位寄存器。
  146. ** 入口参数 :reg:要写入的相位寄存器。
  147. **                                                val:要写入的值。
  148. ** 出口参数 :无
  149. ** 函数说明 :无
  150. *******************************************************************************************/
  151. void AD9833_SetPhase(unsigned short reg, unsigned short val)
  152. {
  153.         unsigned short phase = reg;
  154.         phase |= val;
  155.         AD9833_SetRegisterValue(phase);
  156. }

  157. /*****************************************************************************************
  158. ** 函数名称 :void AD9833_Setup(unsigned short freq, unsigned short phase,unsigned short type)
  159. ** 函数功能 :写入相位寄存器。
  160. ** 入口参数 :freq:使用的频率寄存器。
  161.                                                         phase:使用的相位寄存器。
  162.                                                         type:要输出的波形类型。
  163. ** 出口参数 :无
  164. ** 函数说明 :无
  165. *******************************************************************************************/
  166. void AD9833_Setup(unsigned short freq, unsigned short phase,unsigned short type)
  167. {
  168.         unsigned short val = 0;
  169.         
  170.         val = freq | phase | type;
  171.         AD9833_SetRegisterValue(val);
  172. }

  173. /*****************************************************************************************
  174. ** 函数名称 :void AD9833_SetWave(unsigned short type)
  175. ** 函数功能 :设置要输出的波形类型。
  176. ** 入口参数 :type:要输出的波形类型。
  177. ** 出口参数 :无
  178. ** 函数说明 :无
  179. *******************************************************************************************/
  180. void AD9833_SetWave(unsigned short type)
  181. {
  182.         AD9833_SetRegisterValue(type);
  183. }
复制代码

Keil代码和pdf资料下载: AD9833模块驱动+PDF-V2.1.7z (1.7 MB, 下载次数: 49)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:165291 发表于 2023-8-12 15:25 | 显示全部楼层
好东西,我之前是用51程序改的,试试这个怎么样!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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