标题:
AD9833+STM32单片机驱动程序 电路原理图 引脚图PDF资料
[打印本页]
作者:
像风一样54
时间:
2023-8-2 14:11
标题:
AD9833+STM32单片机驱动程序 电路原理图 引脚图PDF资料
AD9833模块电路原理图如下:
51hei.png
(56.33 KB, 下载次数: 31)
下载附件
2023-8-2 14:41 上传
AD9833引脚图及pdf资料:
51hei.png
(135.85 KB, 下载次数: 33)
下载附件
2023-8-2 14:41 上传
实验操作:
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)
2023-8-2 14:45 上传
点击文件名下载附件
驱动模块
下载积分: 黑币 -5
作者:
timeabcd
时间:
2023-8-12 15:25
好东西,我之前是用51程序改的,试试这个怎么样!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1