AD9833模块电路原理图如下:
AD9833引脚图及pdf资料:
实验操作:
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模块需共地。
浮空 ------ 其他 所有未说明但模块有留出管脚,未使用可直接浮空,功能请参考数据手册
单片机源程序如下:- 作者:康威电子,大家可以找他获得模块
- /**********************************************************
- 功能:参考时钟25MHz,stm32f103rct6控制AD9833点频调相位输出,正弦波范围0-10M,
- 方波:0-500K,三角波:0-1M 。
- 接口:控制引脚接口请参照AD9833.h
- 时间:2023/06/08
- 版本:2.1
- 作者:康威电子
- 其他:本程序只供学习使用
- AD9833 单片机
- 硬件连接: SYKC——PA3;
- CLK ——PA4;
- DATA——PA5;
- V+——(3.3V,5V均可)
- GND--GND(0V)
- **********************************************************/
- #include "stm32_config.h"
- #include "stdio.h"
- #include "AD9833.h"
- int main(void)
- {
- MY_NVIC_PriorityGroup_Config(NVIC_PriorityGroup_2); //设置中断分组
- delay_init(72); //初始化延时函数
- delay_ms(500);//延时一会儿,等待上电稳定,确保AD9833比控制板先上电。
-
- //代码移植建议
- //1.修改头文件AD9833.h中,自己控制板实际需要使用哪些控制引脚。如AD9833_FSYNC脚改成PA1控制,则定义"#define AD9833_FSYNC PAout(1)"
- //2.修改C文件AD9833.c中,AD983_GPIO_Init函数,所有用到管脚的GPIO输出功能初始化
- //3.完成
-
- AD9833_Init();//IO口及AD9833寄存器初始化
-
- //频率入口参数为float,可使信号的频率更精确
- AD9833_SetFrequencyQuick(1000.0,AD9833_OUT_SINUS);//写输出频率1000.0Hz,输出正弦波
- // AD9833_SetFrequencyQuick(1000.0,AD9833_OUT_TRIANGLE);//写输出频率1000.0Hz,输出三角波
- // AD9833_SetFrequencyQuick(1000.0,AD9833_OUT_MSB);//写输出频率1000.0Hz,输出方波
- while(1)
- {
- AD9833_SetPhase(AD9833_REG_PHASE0,0); //设置0°相位,范围:0-4095(0-360°)
- delay_ms(2);
- AD9833_SetPhase(AD9833_REG_PHASE0,2048);//设置180°相位,范围:0-4095(0-360°)
- delay_ms(2);
-
- }
- }
复制代码- #include "AD9833.h"
- #include "delay.h"
- //时钟速率为25 MHz时, 可以实现0.1 Hz的分辨率;而时钟速率为1 MHz时,则可以实现0.004 Hz的分辨率。
- //调整参考时钟修改此处即可。
- #define FCLK 25000000 //设置参考时钟25MHz,板默认板载晶振频率25Mhz。
- #define RealFreDat 268435456.0/FCLK//总的公式为 Fout=(Fclk/2的28次方)*28位寄存器的值
- /************************************************************
- ** 函数名称 :void AD983_GPIO_Init(void)
- ** 函数功能 :初始化控制AD9833需要用到的IO口
- ** 入口参数 :无
- ** 出口参数 :无
- ** 函数说明 :无
- **************************************************************/
- void AD983_GPIO_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure ;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
- GPIO_Init(GPIOA ,&GPIO_InitStructure) ;
- }
- /**********************************************************************************************
- ** 函数名称 :unsigned char AD9833_SPI_Write(unsigned char* data,unsigned char bytesNumber)
- ** 函数功能 :使用模拟SPI向AD9833写数据
- ** 入口参数 :* data:写入数据缓冲区,第一个字节是寄存器地址;第二个字节开始要写入的数据。
- bytesNumber: 要写入的字节数
- ** 出口参数 :无
- ** 函数说明 :无
- ************************************************************************************************/
- unsigned char AD9833_SPI_Write(unsigned char* data,unsigned char bytesNumber)
- {
- unsigned char i,j;
- unsigned char writeData[5] = {0,0, 0, 0, 0};
-
- AD9833_SCLK=1;
- AD9833_FSYNC=0 ;
- for(i = 0;i < bytesNumber;i ++)
- {
- writeData[i] = data[i + 1];
- }
-
- for(i=0 ;i<bytesNumber ;i++)
- {
- for(j=0 ;j<8 ;j++)
- {
- if(writeData[i] & 0x80)
- AD9833_SDATA=1;
- else
- AD9833_SDATA=0;
- AD9833_SCLK=0;
- writeData[i] <<= 1;
- AD9833_SCLK=1;
- }
- }
- AD9833_SDATA=1;
- AD9833_FSYNC=1;
-
- return i;
- }
- /************************************************************
- ** 函数名称 :void AD9833_Init(void)
- ** 函数功能 :初始化控制AD9833需要用到的IO口及寄存器
- ** 入口参数 :无
- ** 出口参数 :无
- ** 函数说明 :无
- **************************************************************/
- void AD9833_Init(void)
- {
- AD983_GPIO_Init();
- AD9833_SetRegisterValue(AD9833_REG_CMD | AD9833_RESET);
- }
- /*****************************************************************************************
- ** 函数名称 :void AD9833_Reset(void)
- ** 函数功能 :设置AD9833的复位位
- ** 入口参数 :无
- ** 出口参数 :无
- ** 函数说明 :无
- *******************************************************************************************/
- void AD9833_Reset(void)
- {
- AD9833_SetRegisterValue(AD9833_REG_CMD | AD9833_RESET);
- delay_ms(10);
- }
- /*****************************************************************************************
- ** 函数名称 :void AD9833_ClearReset(void)
- ** 函数功能 :清除AD9833的复位位。
- ** 入口参数 :无
- ** 出口参数 :无
- ** 函数说明 :无
- *******************************************************************************************/
- void AD9833_ClearReset(void)
- {
- AD9833_SetRegisterValue(AD9833_REG_CMD);
- }
- /*****************************************************************************************
- ** 函数名称 :void AD9833_SetRegisterValue(unsigned short regValue)
- ** 函数功能 :将值写入寄存器
- ** 入口参数 :regValue:要写入寄存器的值。
- ** 出口参数 :无
- ** 函数说明 :无
- *******************************************************************************************/
- void AD9833_SetRegisterValue(unsigned short regValue)
- {
- unsigned char data[5] = {0x03, 0x00, 0x00};
-
- data[1] = (unsigned char)((regValue & 0xFF00) >> 8);
- data[2] = (unsigned char)((regValue & 0x00FF) >> 0);
- AD9833_SPI_Write(data,2);
- }
- /*****************************************************************************************
- ** 函数名称 :void AD9833_SetFrequencyQuick(float fout,unsigned short type)
- ** 函数功能 :写入频率寄存器
- ** 入口参数 :val:要写入的频率值。
- ** type:波形类型;AD9833_OUT_SINUS正弦波、AD9833_OUT_TRIANGLE三角波、AD9833_OUT_MSB方波
- ** 出口参数 :无
- ** 函数说明 :时钟速率为25 MHz时, 可以实现0.1 Hz的分辨率;而时钟速率为1 MHz时,则可以实现0.004 Hz的分辨率。
- *******************************************************************************************/
- void AD9833_SetFrequencyQuick(float fout,unsigned short type)
- {
- AD9833_SetFrequency(AD9833_REG_FREQ0, fout,type);
- }
- /*****************************************************************************************
- ** 函数名称 :void AD9833_SetFrequency(unsigned short reg, float fout,unsigned short type)
- ** 函数功能 :写入频率寄存器
- ** 入口参数 :reg:要写入的频率寄存器。
- ** val:要写入的值。
- ** type:波形类型;AD9833_OUT_SINUS正弦波、AD9833_OUT_TRIANGLE三角波、AD9833_OUT_MSB方波
- ** 出口参数 :无
- ** 函数说明 :无
- *******************************************************************************************/
- void AD9833_SetFrequency(unsigned short reg, float fout,unsigned short type)
- {
- unsigned short freqHi = reg;
- unsigned short freqLo = reg;
- unsigned long val=RealFreDat*fout;
- freqHi |= (val & 0xFFFC000) >> 14 ;
- freqLo |= (val & 0x3FFF);
- AD9833_SetRegisterValue(AD9833_B28|type);
- AD9833_SetRegisterValue(freqLo);
- AD9833_SetRegisterValue(freqHi);
- }
- /*****************************************************************************************
- ** 函数名称 :void AD9833_SetPhase(unsigned short reg, unsigned short val)
- ** 函数功能 :写入相位寄存器。
- ** 入口参数 :reg:要写入的相位寄存器。
- ** val:要写入的值。
- ** 出口参数 :无
- ** 函数说明 :无
- *******************************************************************************************/
- void AD9833_SetPhase(unsigned short reg, unsigned short val)
- {
- unsigned short phase = reg;
- phase |= val;
- AD9833_SetRegisterValue(phase);
- }
- /*****************************************************************************************
- ** 函数名称 :void AD9833_Setup(unsigned short freq, unsigned short phase,unsigned short type)
- ** 函数功能 :写入相位寄存器。
- ** 入口参数 :freq:使用的频率寄存器。
- phase:使用的相位寄存器。
- type:要输出的波形类型。
- ** 出口参数 :无
- ** 函数说明 :无
- *******************************************************************************************/
- void AD9833_Setup(unsigned short freq, unsigned short phase,unsigned short type)
- {
- unsigned short val = 0;
-
- val = freq | phase | type;
- AD9833_SetRegisterValue(val);
- }
- /*****************************************************************************************
- ** 函数名称 :void AD9833_SetWave(unsigned short type)
- ** 函数功能 :设置要输出的波形类型。
- ** 入口参数 :type:要输出的波形类型。
- ** 出口参数 :无
- ** 函数说明 :无
- *******************************************************************************************/
- void AD9833_SetWave(unsigned short type)
- {
- AD9833_SetRegisterValue(type);
- }
复制代码
Keil代码和pdf资料下载:
AD9833模块驱动+PDF-V2.1.7z
(1.7 MB, 下载次数: 63)
|