【良心出品】基于STM32的 AD9850 驱动程序
ad9850 例程
P1=s;
w_clk2= 1;
DDSLE_1=0;
}
fq_ud2=0;
fq_ud2=1;
AD9850_sc=0;
}
void Main(void)
{
uint pl=0;
uint x=0;
P0=0;
P1=0;
AD9850_Rset(); //复位AD9850
AD98501_kzz(); //制AD9850控制字
sbit DDSLE_1 =P1^7; //AD9850的数据锁存器控制端上升沿有效
uchar code AD9850[61]={0,0x01,0x4f,0x8d,0x02,0x9f,0x16,0x03,0xee,0xa1,0x05,0x3e,0x2c,0x06,0x8d,0xb7,
0x07,0xdd,0x42,0x09,0x2c,0xcd,0x0a,0x7c,0x58,0x0b,0xcb,0xe3,0x0d,0x1b,0x6e,
Rset1= 0;
Rset2= 0;//AD9850_2的复位上升沿有效
Rset2= 1;
Rset2= 0;
}
void AD98501_kzz(void) //将8bit的频率控制字加载到AD9850_1
{
w_clk1= 0;//将8bit的频率控制字加载进入AD9850_1的数据锁存器上升沿有效
DDSLE_1=1;
#define uint unsigned int//"uint"用来定义无符号整型数。
sbit w_clk1= P1^0;//AD9850_1的将8bit的频率控制字加载进入数据锁存器上升沿有效
sbit fq_ud1=P1^1; //AD9850_1将40bit的控制字加载进入相位累加器上升沿有效
基于AD9850的全数控函数信号发生器设计
一种基于AD9850的全数控函数信号发生器设计引言 (2)1问题的提出 (2)一、产品的调研 (2)二、简介 (3)三、项目的功能定义 (3)四。
产品的适用人群及使用要求 (3)五、产品的关键技术点 (3)AD9850简介 (4)AD9850原理 (4)控制字与时序 (5)简介 (5)1系统设计方案 (7)2 DDS的基本原理 (7)3硬件电路设计 (8)3.1DDS信号产生电路 (8)3硬件电路设计 (8)3.1DDS信号产生电路 (8)3.2键盘输入接口及LCD接口电路 (9)3.3信号幅度数控预置电路 (10)3.4积分电容自动切换控制电路 (11)2单片机与AD9850的接口 (11)3系统设计 (12)3.1输入 (12)3.2输出 (12)3.3算法 (12)结束语本 (12)4系统软件设计 (14)4.1主程序 (14)4.2键盘扫描子程序 (15)4.3信号频率数字预置子程序 (15)5结束语 (16)4结论 (18)引言信号源是电子产品测量与调试、部队设备技术保障等领域的基本电子设备。
随着科学技术的发展和测量技术的进步,普通的信号发生器已无法满足目前日益发展的电子技术领域的生产调试需要。
而DDS技术是一种新兴的直接数字频率合成技术,具有频率分辨率高、频率切换速度快、切换相位连续、输出信号相位噪声低、可编程、全数字化易于集成、体积小、重量轻等优点,因而在雷达及通信等领域具有广泛的应用前景。
本作品设计由AD9850作为核心部件,STC89C52RC单片机作为控制部件的信号发生器。
该系统体积小、稳定性好、精度高,适用于尖端的通信系统和精密的高精度仪器以及高频无线传输系统等。
一、问题的提出正弦信号源在实验室和电子工程设计中有着十分重要的作用,而传统的正弦信号源根据实际需要一般价格昂贵,经调查发现高频的信号发生器价格都是高的吓人,而且低频输出时性能不好且不便于自动调节,工程实用性较差。
本文的设计以较低的成本制作正弦信号发生器,可用作核磁共振中引发磁场测量仪的激励一般的正弦信号,也可作为调制用的教学演示信号源。
AD9850模块使用说明
3、与单片机的硬件连接及程序(串行送控制字方式)
-2-
DDS 模块使用说明书 2009-07
无忧电子工作室资料
-3-
串行读写程序:该程序实现的是固定频点的输出 1KHZ
#include<regx51.h>
#include <intrins.h>
sbit FQ_QD_AD9850 = P1^0;
-3-
DDS 模块使用说明书 2009-07
无忧电子工作室资料
-4-
FQ_QD_AD9850 = 0; } void Set_Freq(unsigned long int Freqency) {
freq= (unsigned long int)(34.36*Freqency); // SYSCLK = 125 MHz 2^32/125000000=34.36
W3=(unsigned char)freq&0xff; freq=freq>>8;
W2=(unsigned char)freq&0xff;
-5-
DDS 模块使用说明书 2009-07
freq=freq>>8;
W1=(unsigned char)freq&0xff;
Parallel2Serial_AD9850(); } void main(void) {RST_AD9850=1;//复位模块电路 RST_AD9850=1; RST_AD9850=0;
-7-
DDS 模块使用说明书 2009-07
无忧电子工作室资料
-8-
6、输出波形及频率特性(频谱仪测量) 10HZ 波形输出
基于STM32和AD9851的多功能信号发生器
3.2 FSMC简介
3.2.1 FSMC型号
在STM32中,FSMC拥有四种型号,主要是根据闪存存储器的容量进行区分,不同的型号对应不同的处理器。闪存存储器的容量在16k-32k之间的称为小容量产品,闪存存储器的容量在64k-128k之间的称为中容量产品,闪存存储器的容量在256k-512k之间的称为大容量产品。最后还有一种特殊型号是互联型,主要针对于STM32F105XX和STM32F107XX系列的微控制器。
⑥每一个存储器块都有独立的片选控制、每一个存储器块都可以独立配置。⑦时序可编程以支持各种不同的器件。⑧等待周期可编程(多达15个周期)、总线恢复周期可编程(多达15个周期)。⑨输出使能和写使能延迟可编程(多达15周期)、独立的读写时序和协议,可支持宽范围的存储器和时序。
2.3按键方案
本应用系统需通过按键来完成功能的选择,包括波形的选择和频率值得选择。
方案一,按键模块采用矩阵式键盘电路,矩阵键盘电路当今使用最为广泛的按键电路。矩阵式键盘电路的电路复杂程度高,软件编写和识别较为困难。它的驱动方式主要是利用不同的I/O口分别作为键盘的行线和列线,在行线和列线的交叉点上设置为按键。这种方法提高了I/O口的使用效率,但也相应的增加了电路和软件编程的复杂程度,由于本系统所需按键较少,如果使用该方案,会造成大量资源浪费。
AD9850模块使用说明
1、在您收到鑫悦电子AD9850模块后,请先大致熟悉AD9850模块:
SINA、SINB是正弦波形输出
QN、QP是方波输出
发光二极管是VCC电源指示灯(如果通电后,LED1不亮,请立即断电检查) 该模块可以用作并行和串行两种模式。
如何使用并行模式,请参考文件夹“并行”
2、按照下图连接好硬件。
然后把串行鑫悦电子ad9850模块测试程序
“ad9850.hex”烧到单片机AT89S52。
如果一切都顺利,那么您用示波器马上就能测出波形了。
3、
如果没有波形输出,请按照以下办法解决。
是不是掌柜把AD9851的资料发给你了?那样肯定没有波形。
测试程序是按照A T89S52来写的,您是不是用别的单片机了。
程序运行了吗?如果单片机没有跑起来,那肯定没波形。
AD9850说明书
AD9850/AD9851模块说明概述=================================================================AD9850/AD9851模块是采用ADI应用最广泛的DDS(AD9850和AD9851)制作的模块。
ADI的性能就不用多说了。
模块主要参考AD9850和AD9851的资料做的。
主要功能特点:* 模块能够输出正弦波和方波,2个正弦波和2个方波输出。
AD9850:0-40MHzAD9851:0-70MHz频率在20-30MHz后谐波越来越大,波形会越来越不干净。
方波:0-1MHz* 采用70MHz的低通滤波器,使波形的SN比更好* 并口和串口数据输入自动选择* 产生DA基准的管脚(PIN12)引出,方便做输出波形的幅度调节应用。
* 比较器的基准输入端电压由可变电阻产生,调节该电阻可以得到不同的占空比方波* AD9850模块采用125MHz的有源晶振,AD9851模块采用30MHZ的有源晶振AD9850和AD9851主要区别* AD9850的时钟频率最高125MHz,AD9851的时钟频率最高180MHz。
输出最高频率AD9851要比AD9850高。
* AD9850没有6倍频,AD9851有说明:1、串行数据引脚DATA 排针和并口中的D7 排针是同一根信号线。
2、串口和并口切换是靠程序操作不同的IO,自动切换的。
无需硬件切换。
3、51单片机,串口模式接线:VCC ----> +5VGND ----> 地W_CLK ----> P2.2FU_UD ----> P2.1RESET ----> P2.0DATA或D7 ----> P1.74、51单片机,并口模式接线:VCC ----> +5VGND ----> 地W_CLK ----> P2.2FU_UD ----> P2.1RESET ----> P2.0DATA或D7 ----> P1.7D6 ----> P1.6D5 ----> P1.5D4 ----> P1.4D3 ----> P1.3D2 ----> P1.2D1 ----> P1.1D0 ----> P1.01:下载对应的HEX程序见AD9850_1_V4_C程序文件夹OUT1和OUT2端能测试到对应输出1KHz信号。
基于AD9850的信号发生器设计_毕业设计 推荐
基于AD9850的信号发生器设计摘要介绍ADI 公司出品的AD9850 芯片,给出芯片的引脚图和功能。
并以单片机AT89S52 为控制核心设计了一个串行控制方式的正弦信号发生器的可行性方案,给出了单片机AT89S52 与AD9850 连接电路图和调试通过的源程序以供参考。
直接数字合成(DDS)是一种重要的频率合成技术,具有分辨率高、频率变换快等优点,在雷达及通讯等领域有着广泛的应用前景。
系统采用AD9850为频率合成器,以单片机为进程控制和任务调度的核心,设计了一个信号发生器。
实现了输出频率在10Hz~1MHz范围可调,输出信号频率稳定度优于10-3的正弦波、方波和三角波信号。
正弦波信号的电压峰峰值V opp能在0~5V范围内步进调节,步进间隔达0.1v,所有输出信号无明显失真,且带负载能力强。
该电路设计方案正确可行,频率容易控制,操作简单灵活,且具有广阔的应用前景。
关键词:信号发生器;直接数字频率合成;AD9850芯片;AT89S52单片机AbstractOn the basis of direct digital synthesis(DDS)principle, a signal generator was designed , using AT89S52 single chip machine as control device and adopting AD9850 type DDS device .Hardware design parameters were given .The system can output sine wave ,square wave with wide frequency stability and good waveform .The signal generator has stronger market competitiveness , with wide development prospect ,in frequency modulation technology and radio communication technology fields.Key words: signal generator ;direct digital synthsis;AD9850;AT89S52目录第一章绪论 (1)1.1背景 (1)1.2问题的提出 (2)1.3论证方案 (2)1.4总体设计框图 (3)第二章DDS技术产生信号的基本原理 (5)2.1DDS简介 (5)2.2频率预置与调节电路 (5)2.3累加器 (6)2.4控制相位的加法器 (6)2.5控制波形的加法器 (6)2.6波形存储器 (6)2.7D/A转换器 (7)2.8低通滤波器 (7)2.9数字波形合成的理论分析 (8)第三章芯片的简介 (9)3.1AD9850结构与性能 (9)3.2AD9850的控制字与控制时序 (11)3.3 AT89S52结构与性能 (12)3.4 24C02结构与性能 (15)3.5MAX232的结构与性能 (16)3.6RT1602结构与性能 (17)第四章主要硬件的总体设计 (19)4.1AD9850与单片机的接口电路 (19)4.2 LCD与单片机的连接 (20)第五章软件部分设计 (21)第六章用到的数学原理 (24)6.1数学原理 (24)6.2算法比较和选择 (26)6.2.1采样回放法 (26)6.2.2查表法 (27)6.2.3泰勒级数展开法 (27)6.2.4数字正弦振荡器法 (27)6.2.5递推数列法 (28)第七章电路原理图的绘制 (31)7.1一般步骤 (31)7.2原理图的绘制 (31)结束语 (32)致谢.................................................................................. 错误!未定义书签。
基于AD9850的信号发生器的设计_毕业设计论文 精品
摘要本设计使用51单片机对DDS芯片进行控制,利用DDS造波的方法产生需要的正弦信号,用户可以根据需要对芯片设定一个频率值或相位值,通过单片机传输芯片控制字对芯片输出的频率和相位进行调节,达到用户所需要的信号,本设计采用模块化设计的方法,不同的模块为实现不同的功能而设计,总体由单片机控制协调工作。
利用51单片机控制DDS芯片造波,具有如下优越性:1,造价低廉,51单片机应用广泛,价格低廉,比较容易购买,DDS芯片价格较单片机稍高,但与价格成百上千的成品信号发生器相比,本设计经济优势显著,2,电路简单,本设计利用单片机进行数字化控制,外围元件较少。
3,频率控制准确高效,数字化控制的最大优点即控制准确,分辨率高,响应快。
关键词:DDS 51单片机数字控制目录摘要 (i)目录 (ii)绪论 ............................................................................................................................................. - 1 - 第一章工作原理........................................................................................................................ - 2 -1.1 DDS工作原理............................................................................................................... - 2 - 第二章电路设计........................................................................................................................ - 3 -2.1设计思路........................................................................................................................ - 3 -2.2 元件选型....................................................................................................................... - 3 -2.3 系统总体框图............................................................................................................... - 3 - 第三章元器件介绍.................................................................................................................... - 5 -3.1 STC89C52RC单片机 ................................................................................................... - 5 -3.2 AD9850芯片.............................................................................................................. - 6 -3.3 液晶(LCD1602)介绍............................................................................................... - 7 - 第四章调试................................................................................................................................ - 8 -4.1 硬件调试....................................................................................................................... - 8 -4.2 软件调试..................................................................................................................... - 13 -绪论信号发生器使一种能产生所需要信号的一种仪器。
单片机控制AD9850的信号发生器C51程序可直接用
单片机控制AD9850的数字信号发生器C51程序单片机控制AD9850的数字信号发生器C51程序//-----------------------函数声明,变量定义------------------------------#include <reg51.h>#include <intrins.h>#include<ABSACC.H>//-----------------------定义管脚----------------------------------------#define data_OUT P1sbit FQ_UD=P3^0; //AD9850信号更新申请sbit W_CLK=P3^1; //写控制字时钟unsigned char CON_word[5];//Word data[7] data[6] data[5] data[4] data[3] data [2] data[1] data[0]//W0 Phase b Phase b3 Phase b2 Phase b1 Phase b0 Power Down Control Control//W1 Freq-b31 Freq-b30 Freq-b29 Freq-b28 Freq-b27 F req-b26 Freq-b25 Freq-b24//W2 Freq-b23 Freq-b22 Freq-b21 Freq-b20 Freq-b19 F req-b18 Freq-b17 Freq-b16//W3 Freq-b15 Freq-b14 Freq-b13 Freq-b12 Freq-b11 F req-b10 Freq-b9 Freq-b8//W4 Freq-b7 Freq-b6 Freq-b5 Freq-b4 F req-b3 Freq-b2//--------------------------------------------------------------------------------------------------// 函数名称: delay// 入口参数: N// 函数功能:延时子程序,实现(16*N+24)us的延时// 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动//--------------------------------------------------------------------------------------------------void delay(unsigned int N){int i;for(i=0;i<N;i++);}//--------------------------------------------------------------------------------------------------// 函数名称: WRITE_AD9850// 函数功能:将控制字写入AD9850//--------------------------------------------------------------------------------------------------void WRITE_AD9850(void){unsigned char i;FQ_UD=0;W_CLK=0;delay(0);CON_word[0]=CON_word[0]&0xFC; //置工作方式选择位为00for(i=0;i<5;i++){data_OUT=CON_word[i]; //送控制字W_CLK=0;delay(0);W_CLK=1; //上升延delay(0);}FQ_UD=1; //上升延要求AD9850改变输出}//--------------------------------------------------------------------------------------------------// 函数名称:main// 用户主函数// 函数功能:主函数//--------------------------------------------------------------------------------------------------void main(){FQ_UD=0;WRITE_AD9850();} <下面是总结的一些设计中应注意的问题,和单片机硬件设计原则,希望大家能看完(1)在元器件的布局方面,应该把相互有关的元件尽量放得靠近一些,例如,时钟发生器、晶振、CPU的时钟输入端都易产生噪声,在放置的时候应把它们靠近些。
基于ad9850的多波形发生器仿真与设计
2 多波形发生器的设计
2.1 多波形信号的产生原理
直接数字频率合成技术采用全数字化处理方式合成信
号。设频率为f的正弦波信号
,利用Δ(t)时域采样
定理,以作为采样间隔,将模拟信号离散为函数序列S(n)。
则S(n)可表示为:
(1) 当t1 = 0时,得到正弦信号的相位序列:
(2)
由于DDS合成信号过程中并不需要用到全部信息,只需
制直接数字频率合成芯片AD9850产生激励信号,通过低通滤波、电压放
大和功率放大后,经过阻抗匹配输送给超声波换能器。
1 超声波发生器的总体结构 超声波发生器的总体结构如图1所示。由控制模块、滤波及放大模
块、阻抗匹配模块、反馈模块和人机交互模块组成。其中,控制模块由 STM32单片机和DDS芯片AD9850组成,控制模块的作用是,对反馈模块 传送的采样信号进行分析和处理,进行频率跟踪;控制DDS芯片产生 正弦波、方波、三角波这三种信号,并通过输出频率控制字控制输出 信号的频率;与上位机进行通信,使用者可以通过上位机选择超声波 发生器输出的波形、频率和功率,并采集实时输出信号的频率、功率 和振幅等数据,传送给显示模块。滤波及放大模块的作用是将控制模 块输出的信号进行滤波及放大。阻抗匹配模块的作用是使超声波换能
随着现代电力电子技术的发展与进 步,电源技术的迅速发展,各学科间相 互渗透,同时也促进了新兴边缘学科的 不断出现。超声技术作为一门新兴的、 多学科交叉的、应用性极强的边缘科 学,已在中国、美国、德国、日本、加 拿大等国家引起了科研工作者的广泛高 度关注,并在国民经济生产、生活、科 研等各领域扮演着十分重要的角色。目 前小型化、通用化、智能化、高性能的 超声波发生器和简单、实用的数字控制 技术已成为国内外研究的热点。所以设 计采用微处理器控制、模块化电路的数
基于STM32的AD9851并行源代码
基于STM32的AD9851并行源代码#include"stm32f10x.h"#define ad9851_rest_l GPIO_ResetBits(GPIOC,GPIO_Pin_0)#define ad9851_rest_h GPIO_SetBits(GPIOC,GPIO_Pin_0)#define ad9851_fq_up_l GPIO_ResetBits(GPIOC,GPIO_Pin_1) #define ad9851_fq_up_h GPIO_SetBits(GPIOC,GPIO_Pin_1)#define ad9851_w_clk_l GPIO_ResetBits(GPIOC,GPIO_Pin_2)#define ad9851_w_clk_h GPIO_SetBits(GPIOC,GPIO_Pin_2)/*void RCC_HSE_Configuration(void){RCC_DeInit();//将外设RCC寄存器重设为缺省值RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE),HSE晶振打开(ON)if(RCC_WaitForHSEStartUp()==SUCCESS)//等待HSE起振,SUCCESS:HSE 晶振稳定且就绪{RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟(HCLK)RCC_SYSCLK_Div1--AHB时钟=系统时钟RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2)RCC_HCLK_Div1--APB2时钟=HCLKRCC_PCLK1Config(RCC_HCLK_Div2);//设置低速AHB时钟(PCLK1)RCC_HCLK_Div2--APB1时钟=HCLK/2FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//选择FLASH预取指缓存的模,预取指缓存使能FLASH_SetLatency(FLASH_Latency_2);//设置FLASH存储器延时时钟周期数FLASH_LATENCY_2 2延时周期RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_2);//设置PLL时钟源及倍频系数RCC_PLLCmd(ENABLE);//PLL使能while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//检查指定的RCC标志位(PLL准备好标志)设置与否RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置系统时钟SYSCLKwhile(RCC_GetSYSCLKSource()!= 0x08);//0x08:PLL作为系统时钟}}*/void AD9851_GPIOC_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE );GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_ Pin_2;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);}void AD9851_GPIOD_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE );GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_ Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOD,&GPIO_InitStructure);}void ad9851_reset_parrel(){ad9851_w_clk_l;ad9851_fq_up_l;//rest信号ad9851_rest_l;ad9851_rest_h;ad9851_rest_l;}void ad9851_wr_parrel(u8 w0,u32 frequence) {u8 w;frequence=frequence*4294967296/180000000; //写w0数据w=w0;GPIO_Write(GPIOD,w); //w0ad9851_w_clk_h;ad9851_w_clk_l;//写w1数据w=(frequence>>24);GPIO_Write(GPIOD,w); //w1ad9851_w_clk_h;ad9851_w_clk_l;//写w2数据w=(frequence>>16);GPIO_Write(GPIOD,w); //w2ad9851_w_clk_h;ad9851_w_clk_l;//写w3数据w=(frequence>>8);GPIO_Write(GPIOD,w); //w3ad9851_w_clk_h;ad9851_w_clk_l;//写w4数据w=(frequence>>=0);GPIO_Write(GPIOD,w); //w4ad9851_w_clk_h;ad9851_w_clk_l;//移入始能ad9851_fq_up_h;ad9851_fq_up_l;}int main(){// RCC_HSE_Configuration();AD9851_GPIOC_Configuration(); AD9851_GPIOD_Configuration(); GPIO_Write(GPIOC,0x0000); GPIO_Write(GPIOD,0x0000);//串行写1000Hz程序ad9851_reset_parrel();ad9851_wr_parrel(0x01,10000000); while(1);}。
基于STM32+AD9850的实用信号源的设计(一)
基于STM32+AD9850的实用信号源的设计(一)1.引言在通讯.电子测量.电视广播.雷达.遥控遥测.导航等领域都需要在一定频率范围内产生符合质量要求的频率信号.随着电子技术的发展,人们对信号源的频率精确度和频率稳定度以及其他方面的要求越来越高.目前,产生一定频率的信号一般是采用频率合成技术,随着技术的发展,频率合成器应运而生,这是实现频率合成技术的电路系统.而直接数字频率合成技术(Direct Digital FrequencySynthesis.简称DDS)频率转换速度快,频率分辨率精度高,被广泛使用.有王学凤等人使用DDS 芯片的信号源设计;有袁辉使用AD9854 和FPGA 基于DDS 理论设计并实现了多模式多波形雷达信号源;有刘健余等设计的基于DDS 和PLL 的Chirp 超宽带信号源[5]等.DDS 技术在各个领域的应用越来越多,越来越广.本系统设计制作一个能够产生正弦波和方波的信号源.其中要求信号频率在20Hz 到20KHz 的范围内实现程控步进,步长1Hz,幅度则要求在100mV 到3V间实现步长为100mV 的程控步进,而方波的占空比要在2%到98%间可实现步长为2%的程控调整,且要求波形性能良好.综合以上因素,可知本系统的核心是在于波形的产生(包括频率和占空比的程控)以及幅度的程控.2.DDS 芯片AD9850 简介要产生一定频率的信号源,有多种实现方法,如采用像8038 这样的函数信号发生器,或者是利用锁相环的跟踪和滤波作用将频率锁定在所需要的谐波分量或者组合频率分量中.但是这两种方法不是步长难以满足要求就是输出频率范围达不到要求,不适合产生低频信号.因此,本设计采用直接数字频率合成芯片.DDS(直接数字频率合成)是基于相位概念提出的一种直接合成所需波形的频率合成技术,特别适合于生成频率低.频带宽.频率稳定性和准确度较高及波形复杂的场合,可以很方便地生成符合要求的正弦波和方波.本系统使用美国AD 公司推出的高集成度频率合成器AD9850.其组成原理如图1 所示.AD9850 采用CMOS 工艺,供电在3.3V 左右.供电时功耗仅为155mW,采用28 脚SSOP 表面封装形式,具有125M 时钟频率.AD9850 在接上精密时钟源及写入频率相位控制字之后就可产生一个频率和相位都可编程控制的模拟正弦波输出,此正弦波可直接用作频率信号源或者经内部的高速比较器转换为方波输出.3.主要电路设计系统原理总图如图2 所示.3.1 正弦波及方波产生电路正弦波及方波产生的电路图如图3 所示.3.1.1 正弦波产生AD9850 的ROM 中已预先存入正弦函数表,其包含一个正弦波周期的数字幅度信息,每一个地址对应正弦波中0°-360°范围的一个相位点.查询表把输入地址的相位信息映射成正弦波幅值信号,驱动DAC 输出模拟量.工作时,用单片机送入频率码.AD9850 输入采用并行方式,8 位一个字节,分5 次输入,其中32 位是频率码,另8 位中的5 位是相位控制码,2 位是用于选择工作方式,1 位用于电源休眠.改变读取R O M 的数目,即可改变输出频率.AD9850 的频率输出频率的一般表达式为:式中,k 为频率码,是32 位的二进制数.tips:感谢大家的阅读,本文由我司收集整编。
AD9850 DDS控制子程序
AD9850 DDS控制子程序经常做其他的单片机实验,还没做过DDS的实验。
最近打算写个程序试验一下。
看了N久datasheet和别人的例子,就开始写程序了。
可到了控制字的计算,发现还真是麻烦。
由于我是用C写程序,所以一开始定义了long型变量,让它算,几行代码就解决了。
不过一想,单片机这样算也太慢了吧,要是一转编码器,频率变化几十次上百次,单片机还不累死了于是想换个查表方式吧。
搞了一上午,把算法搞好,表也算好做出来了,一编译,晕!长出了好几百字节(这其中包括表本身约200字节,再加上算法中多句的加法代码),看来2051里面别想放了。
看来,鱼和熊掌,不可兼得。
要速度,代码量就大。
要代码精简,速度就慢。
这大概就是单片机的真谛吧。
我的查表算法思路是这样的:1、构造N个二维数组(N=你需要输入的最大频率值位数,例如你需要精确到10HZ,最高30MHZ,那么就有10M位、1M位、100K位、10K位、1K位、100HZ 位、10HZ位,共7位,所以N=7)。
2、根据你所用的芯片型号,和晶振频率,计算出每个频率位0-9时的控制字。
3、使用时,把你频率的每一位控制字,查表读出,并相加(特别需要注意进位也需要处理)。
4、把加出的4字节控制字,送DDS。
此方法,理论最大控制字误差为N。
一般9851或9850DDS,常用的晶振频率值条件下,此误差实际表现在频率上时,小于1HZ的1到2个数量级。
查表部分具体程序(尚未进行硬件测试)程序代码/*******************************************AD9850 DDS控制子程序********************************************编写:BG4UVR描述: MCS51单片机控制AD9850/AD9851子程序。
提供如下5个常用DDS控制函数。
例子中DDS控制字表的DDS型号为AD9850,晶振为16MHZ。
基于AD9850的多功能信号源设计
基于AD9850的多功能信号源设计
任艳玲
【期刊名称】《电子科技》
【年(卷),期】2015(028)006
【摘要】AD9850以芯片为多功能信号源频率合成核心,以单片机(89C52)为控制和数据处理核心,实现了正弦波、方波及AM、FM、ASK、FSK、PSK等调制波形的产生和输出.结合键盘和显示部分,实现了任意频率值的选择和显示,构成了一个完整实用的信号发生器.该信号发生器可在10 Hz~40 MHz范围内实现任意频率的输出,步进值和输出幅值可调.经过对系统的最终测试与实验数据分析表明,该系统具有稳定性好、精度高、且范围宽等优点.
【总页数】6页(P179-183,186)
【作者】任艳玲
【作者单位】江苏理工学院电信学院,江苏常州213001
【正文语种】中文
【中图分类】TN741
【相关文献】
1.基于AD9850和MAX7490用于仪器校准信号源电路的设计 [J], 王亚磊;周静雷
2.基于MSP430单片机和AD9850的嵌入式信号源设计 [J], 何丙年;徐明
3.基于AD9850多功能信号源的设计与实现 [J], 赵杰英;王浩全
4.基于DDS技术AD9850的激励信号源设计 [J], 郭永彩;张春荣;高潮
5.基于AD9850的正交信号源的设计 [J], 潘凯;朱名日;姚鑫;刘文彬;郑丹平;周光祥因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//========================AD9850.h=============================///*--------------------------------------------AD9850驱动程序----------------------------------------------*/#ifndef __AD9850_H#define __AD9850_H/*选择数据通信方式,只能选择一个*///#define MODE_SEIAL //串行模式#define MODE_PARALLEL //并行模式#define AD9850_SYSTEM_COLCK 100000000/* AD9850 控制和数据引脚定义*/#define AD9850_CONTROL_PORT GPIOA#define AD9850_FQUD GPIO_Pin_2#define AD9850_WCLK GPIO_Pin_3#define AD9850_RST GPIO_Pin_4#ifdef MODE_PARALLEL //并行模式数据口0~7#define AD9850_DATA_PORT GPIOC#endif#ifdef MODE_SEIAL //串行模式数据口#define AD9850_DATA GPIO_Pin_5#defineAD9850_DATA_Write_1 GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_DATA, Bit_SET)#defineAD9850_DATA_Write_0 GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_DATA, Bit_RESET)#endif#defineAD9850_WCLK_SET GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_WCLK,Bit_ SET)#defineAD9850_WCLK_CLR GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_WCLK,Bit _RESET)#defineAD9850_FQUD_SET GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_FQUD,Bit_ SET)#defineAD9850_FQUD_CLR GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_FQUD,Bit_ RESET)#defineAD9850_RST_SET GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_RST,Bit_SE T)#defineAD9850_RST_CLR GPIO_WriteBit(AD9850_CONTROL_PORT,AD9850_RST,Bit_RE SET)/* 串行模式操作函数*/#ifdef MODE_SEIALextern void AD9850_Reset_Sreial(void) ;extern void AD9850_Write_Serial(unsigned char W0,unsigned long freq) ;#endif/* 并行模式操作函数*/#ifdef MODE_PARALLELextern void AD9850_Reset_Parallel(void) ;extern void AD9850_Write_Parallel(unsigned char W0,unsigned long freq) ;#endifextern void Init_AD9850(void) ;#endif /* AD8950_H *///==================================================================/ ///=========================AD9850.c=================================//#include "stm32f10x_lib.h"#include "AD9850.h"/********************************************函数名称: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){unsigned char wdata ;unsigned long y=(unsigned long)(4294967295/AD9850_SYSTEM_COLCK) ;y *= freq ;wdata=W0 ; //写w0GPIO_Write(AD9850_DATA_PORT ,wdata) ;AD9850_WCLK_SET ;AD9850_WCLK_CLR ;wdata=y>>24 ; //写w1GPIO_Write(AD9850_DATA_PORT ,wdata) ;AD9850_WCLK_SET ;AD9850_WCLK_CLR ;wdata=y>>16 ; //写w2GPIO_Write(AD9850_DATA_PORT ,wdata) ;AD9850_WCLK_SET ;AD9850_WCLK_CLR ;wdata=y>>8 ; //写w3GPIO_Write(AD9850_DATA_PORT ,wdata) ;AD9850_WCLK_SET ;AD9850_WCLK_CLR ;wdata=y>>0 ; //写w4GPIO_Write(AD9850_DATA_PORT ,wdata) ;AD9850_WCLK_SET ;AD9850_WCLK_CLR ;AD9850_FQUD_SET ; //移入使能AD9850_Delay(0xFFFF) ;AD9850_FQUD_CLR ;}#endif /* MODE_PARALLEL *//*------------------------并行模式-------------------------*/ /*---------------------------------------------------------*//*------------------------串行模式-------------------------*/ #ifdef MODE_SEIAL/********************************************函数名称:AD9850_Reset_Sreial功能:在串行模式下复位AD9850参数:无返回值:无*********************************************/void AD9850_Reset_Sreial(void){AD9850_WCLK_CLR ;AD9850_FQUD_CLR ;//RST信号AD9850_RST_CLR ;AD9850_RST_SET ;AD9850_Delay(0xFFFF) ;AD9850_RST_CLR ;//WCLK信号AD9850_WCLK_CLR ;AD9850_WCLK_SET ;AD9850_Delay(0xFFFF) ;AD9850_WCLK_CLR ;//FQUD信号AD9850_FQUD_CLR ;AD9850_FQUD_SET ;AD9850_Delay(0xFFFF) ;AD9850_FQUD_CLR ;}/********************************************函数名称: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 = (unsigned long )268435456.0/AD9850_SYSTEM_COLCK*freq ;wdata = y>>0 ; //写w4for(i=0 ;i<8 ;i++){if(wdata & 0x01)AD9850_DATA_Write_1 ;elseAD9850_DATA_Write_0 ;AD9850_WCLK_SET ;wdata >>= 1 ;AD9850_WCLK_CLR ;}wdata = y>>8 ; //写w3for(i=0 ;i<8 ;i++){if(wdata & 0x01)AD9850_DATA_Write_1 ;elseAD9850_DATA_Write_0 ;AD9850_WCLK_SET ;wdata >>= 1 ;AD9850_WCLK_CLR ;}wdata = y>>16 ; //写w2for(i=0 ;i<8 ;i++){if(wdata & 0x01)AD9850_DATA_Write_1 ;elseAD9850_DATA_Write_0 ;AD9850_WCLK_SET ;wdata >>= 1 ;AD9850_WCLK_CLR ;}wdata = y>>24 ; //写w1for(i=0 ;i<8 ;i++){if(wdata & 0x01)AD9850_DATA_Write_1 ;elseAD9850_DATA_Write_0 ;AD9850_WCLK_SET ;wdata >>= 1 ;AD9850_WCLK_CLR ;}wdata = W0 ; //写w0for(i=0 ;i<8 ;i++){if(wdata & 0x01)AD9850_DATA_Write_1 ;elseAD9850_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功能:初始化AD9834参数:无返回值:无*********************************************/void Init_AD9850(void){#ifdef MODE_SEIAL //串行模式GPIO_InitTypeDef GPIO_InitStructure ;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) ;AD9850_Reset_Sreial() ;#endif#ifdef MODE_PARALLEL //并行模式GPIO_InitTypeDef GPIO_InitStructure ;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() ;#endif}//================================================================// 写得一般,希望大家能给出点建议!。