logo资料库

ad9850使用总结.pdf

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
AD9850 DDS 模块使用说明 By Violet AD9850 串行输入时序 前 32 位为 DDS 生成的频率数字,对于模块中的 125M 晶振,每单位间隔为 d= 125 10 32 × 2 6 z H ,每单位对应的频率 那么,对应32000H ,前32位就是32000/d取整后的二进制数字 z 相位信息在这里不做要求,所以后8位全部设置为0 Codes: unsigned char i; long int y; double x; u8 wdata; x=4294967295U/125;//适合 125M 晶振 //如果时钟频率不为 180MHZ,修改该处的频率值,单位 MHz !!! frequence=frequence/1000000; frequence=frequence*x; y=frequence; //写 w4 数据 串行写入时序 wdata=(y>>=0); for(i=0;i<8;i++) { if(wdata&0x01) AD9850_DATA_H; else AD9850_DATA_L; AD9850_WCLK_H; wdata=wdata>>1; AD9850_WCLK_L; } wdata=(y>>8);
for(i=0;i<8;i++) { if(wdata&0x01) AD9850_DATA_H; else AD9850_DATA_L; AD9850_WCLK_H; wdata=wdata>>1; AD9850_WCLK_L; } wdata=y>>16; for(i=0;i<8;i++) { if(wdata&0x01) AD9850_DATA_H; else AD9850_DATA_L; AD9850_WCLK_H; wdata=wdata>>1; AD9850_WCLK_L; } wdata=y>>24; for(i=0;i<8;i++) { if(wdata&0x01) AD9850_DATA_H; else AD9850_DATA_L; AD9850_WCLK_H; wdata=wdata>>1; AD9850_WCLK_L; } wdata=w0;//写入相位信息 等 for(i=0;i<8;i++) { if(wdata&0x01) AD9850_DATA_H; else AD9850_DATA_L; AD9850_WCLK_H; wdata=wdata>>1; AD9850_WCLK_L; } AD9850_FQUD_H;
AD9850_FQUD_L; 硬件设置串行输入初始化,pin2=0 pin3=pin4=1 芯片引脚说明
芯片手册来自于 ALLDATASHEET 网站 RF-out 为正弦波输出口 VOUTP 和 VOUTN 为方波输出口 VIN_P 和 VIN_N 的作用是将 RF-OUT 输出的正弦波送到一个施密特触发器(I guess)进行 波形变换(sin——square)
仔细观察布线可以发现短接跳线后即为 pin2=0 pin3=pin4=1 硬件串行的初始化。 关于代码中的是 stm32 GPIO 配置,我这里使用的是野火 MINI 的 GPIO B ,按照模块次 序排列。见下图 stm32 MINI 资源图 #ifndef _AD9850_H #define _AD9850_H #include "stm32f10x.h" #define AD9850_CONTROL_PORT GPIOB #define AD9850_DATA GPIO_Pin_11 #define AD9850_WCLK GPIO_Pin_9 #define AD9850_FQUD GPIO_Pin_7 #define AD9850_RST GPIO_Pin_5 #define AD9850_WCLK_H GPIO_SetBits(AD9850_CONTROL_PORT,AD9850_WCLK) #define AD9850_WCLK_L GPIO_ResetBits(AD9850_CONTROL_PORT,AD9850_WCLK) #define AD9850_FQUD_H GPIO_SetBits(AD9850_CONTROL_PORT,AD9850_FQUD) #define AD9850_FQUD_L GPIO_ResetBits(AD9850_CONTROL_PORT,AD9850_FQUD) #define AD9850_DATA_H GPIO_SetBits(AD9850_CONTROL_PORT,AD9850_DATA) #define AD9850_DATA_L GPIO_ResetBits(AD9850_CONTROL_PORT,AD9850_DATA) #define AD9850_RESET_H GPIO_SetBits(AD9850_CONTROL_PORT,AD9850_RST) #define AD9850_RESET_L GPIO_ResetBits(AD9850_CONTROL_PORT,AD9850_RST) void AD9850_Delay(unsigned int z); void AD9850_Write(u8 w0,double frequence); void AD9850_Init(void); #endif 主函数 #include "stm32f10x.h" #include "AD9850.h" int main(void) { AD9850_Init();//初始化,主要为时序 AD9850_Write(0x00,320000);//写入频率 while(1); }
另外注意的是: 不知道为什么,GPIO B3 总有一个较高电平输出,所以弃用 B3 口 使用 stlink 时,因为 MINI 没有对应的专用接口;可以使用 SWD/JTAG 同时 AD9850 模块供电 5V,可以直接接到 ST-link 供电端口。
ST-link 下载器 波形输出
320K 正弦 20K 正弦
分享到:
收藏