0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

16位单片机对AD9854控制的探讨

姚小熊27 来源:网络整理 2018-05-16 16:16 次阅读

AD9854优势和特点

300 MHz内部时钟速率

FSK、BPSK、PSK、线性调频、AM操作

两个集成式12位数模转换器DAC

超高速比较器,均方根抖动:3 ps

出色的动态性能:80 dB SFDR (100 MHz ± 1 MHz AOUT)

4×至20×可编程基准时钟乘法器

两个48位可编程频率寄存器

两个14位可编程相位偏移寄存器

12位可编程振幅调制和开关输出形键控功能

单引脚FSK和BPSK数据接口

通过输入/输出接口提供PSK功能

线性或非线性FM线性调频功能,具有单引脚频率保持功能

AD9854电路图

下面给出一种用AD9854开发高精度频率信号发生器的简易方法,开发者只需要熟悉MCS-51单片机编程即可。该系统具有开发周期短,开发成本低的特点,也可以作为探索AD9854功能的一种方法,它的电路原理图见图2。

16位单片机对AD9854控制的探讨

系统主要由DDS芯片AD9854、单片机AT89C51、看门狗定时器X25045和LED显示驱动芯片MAX7219组成。在这个系统中提供了8位七段LED显示器,其中前五位为输出频率值,显示范围为00.000~99.999MHz,后三位为幅度显示位,显示范围为0~999,表示幅值从零幅度到满幅度的变化。

16位单片机对AD9854控制的实现

采用对AD9854进行控制的单片机是凌阳公司的SPCE061A,它是一款16位的微处理器CPU的时钟频率可达0.32MHz-49.152MHz,32K字的闪存,2K字的工作静态存储器,总共有32位的I/O端口,分为16位的IOA口和16位的IOB口,每个口都可以单独地进行输入输出设置。但是这款单片机不具有其他单片机的读写时序控制引脚,因此在对AD9854的控制中,需要单独拿出一个引脚作为读写时序引脚。

16位单片机对AD9854控制的探讨

由图1所示,要对其进行控制,首先要搭建好其外部电路,根据我们的实验要求,将REFCLKB脚接上电源,实行单端输入方式。再将S/PSE2LECT管脚设置为1,采用并行输入输出方式。

搭建好外部电路后,开始对AD9854的I/Oupdate信号进行设置,对信号控制是否正确关系着AD9854是否能正常工作。I/Oupdate信号是为了将操作输入的数据从I/O口缓冲寄存器转移到DDS的核心寄存器中而产生的一个由低到高的上升沿。这个信号可以从外部提供,也可以由内部产生。当此信号由外部提供时,我们应将控制寄存器中的INT/EXTUpdateClk位设置为0,此时内部的系统时钟将会与之同步以防止程序寄存器中的数据部分的转移而造成程序执行错误。如要内部自行产生,则要将INT/EXTUpdateClk位设置为1,此时默认的I/OUpdate信号的周期为65×(SYS2TEMCLOCKPERIOD×2)。同样内部产生的I/Oupdate信号也可以由32位的UpdatedClock寄存器(地址为16-19)控制,信号的周期公式是(N+1)×(SYSTEMCLOCKPERIOD×2),其中SYS2TEMCLOCKPERIOD是1/SYSTEMCLOCK,N是需要往32位寄存器中输入的数值,它的适用范围是1至(232-1)。I/OUpdate信号的高电平的持续时间是8个时钟周期。

接下来,对AD9854中的内部的40个寄存器进行设置。其中地址为1D-20的寄存器为32位的控制寄存器,分别对工作模式,比较器,输出幅度,系统时钟等进行了控制。

首先,对地址为1D的寄存器进行设置,此寄存器主要控制比较器开关和各个输出通路的开关。在实验中,没有使用到比较器,而且要求各个通路都有输出,因此1D地址的控制寄存器保持默认值10h。

地址为1E的寄存器主要控制芯片内部PLL倍乘器的开关以及倍乘器倍数。在实验中,对AD9854的外部使用20MHz的晶振作为振荡源,并将系统工作时钟设定为200MHz,因此要将1E寄存器中的PLLRange位设置为1,由于用到了AD9854的内部PLL倍乘器,所以BypassPLL位设置为0,倍乘器倍数应设置为10,因此1E地址的控制器中的内容应为4Ah。

地址为1F的控制寄存器主要控制芯片的工作模式以及I/Oupdate的内外部方式,我们采用的仍然是single-tone模式,而且用的也是内部产生I/Oupdate信号,因此寄存器采用的是默认值01h

地址为20的控制寄存器主要是对输出波形幅值的控制以及在串行输入输出时的一些设置。在实验中,我们采用的是并行输入输出方式,因此对串行的一些设置都默认为0。对于幅值的设置,如果是要AD9854内部产生幅值,则OSKEN位设置为0,OSKINT位设置为1。如果是通过专门的幅值寄存器对输出幅值进行调控,则OSKEN位设置为1,OSKINT位设置为0。实验中,仍然将此控制寄存器的内容设置为默认值20h,通过专门的幅值寄存器对输出幅值进行调节。

设置完控制寄存器后,我们再对频率寄存器,幅度寄存器,相位寄存器进行设置。芯片中共有两个频率寄存器,两个相位寄存器。由于我们采用的Single-Tone模式,因此我们只用PhaseAdjust1和FrequencyTuningWord1这两个寄存器。

PhaseAdjust寄存器是对产生的波形的相位进行控制,地址为00和01,它是一个14位的寄存器,因此产生的波形的相位具有14位的精度。

FrequencyTuningWord寄存器是对波形的频率进行控制,地址为04至09,它的精度为48位,因此我们需要往里面输入48位的频率控制字,频率控制字的计算公式是:FTW=(DesiredOutputFrequency×2N)/SYSCLK。其中N是相位累加器的分辨率,我们在此取48,算出来的频率控制字是一个十进制数字,因此要把它转化为48位的二进制数。通过此寄存器控制的频率范围可从0至1/2的SYSCLK。SYSCLK是芯片的系统时钟。

对幅度进行控制的寄存器是地址为21至24的OutputShapeKeyI和OutputShapeKeyQ,它们都是12位的寄存器。

在AD9854进行读写操作时,重要的问题是要注意它的读写时序,在实验中,我们未对AD9854进行读操作,所以下面只介绍了写操作的时序。

16位单片机对AD9854控制的探讨

由2图所示,在进行写操作时,可将地址和数据同时写入,在WR引脚接收到一个高电平后,数据和地址被写入。

具体的写程序语句如下:

3P_IOB_Data=0x0001;

3P_IOA_Data=0x1e4a;

3P_IOB_Data=0x0000;

这条指令是对地址为1e的控制寄存器进行写操作,单片机的IOB0口连接到AD9854的WR引脚。

16位处理器对AD9854的控制程序

为了更好的说明 16位处理器对 AD9854的控制 ,这里写了一个程序 :

#define P_ IOA_Data ( volatile unsigned int 3 ) 0x7000

#define P_ IOA_Buffer ( volatile unsigned int 3 ) 0x7001

#define P_ IOA_D ir ( volatile unsigned int 3 ) 0x7002

#define P_ IOA_A ttrib ( volatile unsigned int 3 ) 0x7003

#define P_ IOB_Data ( volatile unsigned int 3 ) 0x7005

#define P_ IOB_Buffer ( volatile unsigned int 3 ) 0x7006

#define P_ IOB_D ir ( volatile unsigned int 3 ) 0x7007

#define P_ IOB_A ttrib ( volatile unsigned int 3 ) 0x7008

#define P_SystemClock ( volatile unsigned int 3 ) 0x7013

#define P_WatchDog_Clear ( volatile unsigned int 3 ) 0x7012 / /对单片机 I/O地址设置

void main ( )

{

3 P_ IOA_D ir = 0xffff;

3 P_ IOA_A ttrib = 0xffff;

3 P_ IOA_Data = 0x0000;

3 P_ IOB_D ir = 0xffff;

3 P_ IOB_A ttrib = 0xffff;

3 P_ IOB_Data = 0x0000; / /对单片机 I/O口的属性进行操作

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x1600;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x1700;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x1807;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x19CF;

3 P_ IOB_Data = 0x0000; / /对 update信号周期的设置

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x1d10;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x1e0a

P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x1f01;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x2020;

3 P_ IOB_Data = 0x0000; / /对控制寄存器的设置

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x210f;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x22ff;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x230f;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x24ff;

3 P_ IOB_Data = 0x0000; / /幅度控制

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x0400;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x05ff;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x06ff;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x07ff;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x08ff;

3 P_ IOB_Data = 0x0000;

3 P_ IOB_Data = 0x0001;

3 P_ IOA_Data = 0x09ff;

3 P_ IOB_Data = 0x0000; / /频率控制

while (1)

{

3 P_WatchDog_Clear = 0x0001;

}

程序中,将update信号的周期设置为20μs,得出的控制字为000007CF。将频率控制寄存器中写入00ffffffffff,此数字转换成十进制为1099511627775,代入到频率控制字的计算公式中得出可以得到781.25kHz的频率。用示波器进行测量观察,得到图3波形:

16位单片机对AD9854控制的探讨

由观察到的波形可以看出 , update信号的周期为 20μs,输出波形的频率为 782. 9kHz,与初始设定值相一致 ,可知 ,实验程序是正确的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620835
  • AD9854
    +关注

    关注

    12

    文章

    50

    浏览量

    27814
收藏 人收藏

    评论

    相关推荐

    基于AD9854的正交扫频信号源设计

    本文首先阐述了AD9854原理,其次介绍了AD9854引脚功能及工作过程,最后介绍了信号的产生及显示控制以及系统软件设计方法。
    发表于 05-18 08:29 4152次阅读
    基于<b class='flag-5'>AD9854</b>的正交扫频信号源设计

    4*4键盘输入频率数据,单片机写入AD9854,频率在LCD1602显示

    4*4键盘输入频率数据,单片机写入AD9854,频率在LCD1602显示,有谁会吗?不会编程···
    发表于 04-22 16:32

    ad9854

    ad9854的数据控制电压(5伏)超过他的供电电压(3.3v) 这个芯片还能正常工作吗
    发表于 09-01 22:34

    求430单片机控制ad9854产生6Mhz正弦信号的程序和硬件连接方式

    求430单片机控制ad9854产生6Mhz正弦信号的程序和硬件连接方式
    发表于 05-05 21:48

    求助C8051单片机控制DDS芯片AD9854产生一个线性调频信号的程序

    本帖最后由 elecfans 于 2015-5-17 16:04 编辑 求大神帮忙 我要用C8051单片机控制DDS芯片AD9854产生一个线性调频信号,求程序。。。。
    发表于 05-17 12:16

    AD9854产生正交信号的程序分享

    刚买了AD9854芯片,需用单片机控制产生正交信号,求大神给个程序
    发表于 10-31 15:28

    ad9854中文资料汇总(ad9854引脚图及功能_内部结构及应用电路)

    本文首先介绍了AD9854特征与内部结构框图,其次介绍了AD9854引脚功能和AD9854的编程,最后介绍了两款ad9854应用电路图。
    发表于 05-16 15:17 2.4w次阅读
    <b class='flag-5'>ad9854</b>中文资料汇总(<b class='flag-5'>ad9854</b>引脚图及功能_内部结构及应用电路)

    基于AD9854产生MSK调制信号详细说明

    AD9854数字合成器是高集成度的器件。本文首先介绍了AD9854的特征,其次介绍了AD9854构成的信号发生电路,最后介绍了AD9854产生MSK调制信号详细说明。
    发表于 05-16 15:50 4444次阅读
    基于<b class='flag-5'>AD9854</b>产生MSK调制信号详细说明

    ad9854应用电路图大全(五款ad9854信号发生/频率发生器/正交信号源电路)

    本文介绍了五款ad9854的应用电路图。其中包括了ad9854信号发生电路、ad9854高精度频率发生器、ad9854正交信号源和ad9854
    发表于 05-16 17:33 8520次阅读
    <b class='flag-5'>ad9854</b>应用电路图大全(五款<b class='flag-5'>ad9854</b>信号发生/频率发生器/正交信号源电路)

    ad9854单片机程序详细说明(ad9854结构框图及电路)

    本文首先介绍了ad9854的结构框图及特点,其次介绍了ad9854的两个应用电路图,最后介绍了ad9854单片机程序详情。
    的头像 发表于 05-17 08:32 2.1w次阅读
    <b class='flag-5'>ad9854</b><b class='flag-5'>单片机</b>程序详细说明(<b class='flag-5'>ad9854</b>结构框图及电路)

    stm32驱动ad9854程序分享_ad9854构成信号发生器电路

    AD9854数字合成器是高集成度的器件。本文首先介绍了ad9854优势和特点,其次介绍了ad9854构成的信号发生器电路,最后分享了stm32驱动ad9854程序。
    的头像 发表于 05-17 09:23 1.5w次阅读
    stm32驱动<b class='flag-5'>ad9854</b>程序分享_<b class='flag-5'>ad9854</b>构成信号发生器电路

    基于FPGA控制AD9854产生正弦波

    本文首先介绍了ad9854的工作原理,其次介绍了两款AD9854应用电路图,最后介绍了基于FPGA控制AD9854产生正弦波。
    发表于 05-17 09:53 6272次阅读
    基于FPGA<b class='flag-5'>控制</b><b class='flag-5'>AD9854</b>产生正弦波

    AD9854参考代码

    AD9854参考代码
    发表于 03-18 11:07 41次下载
    <b class='flag-5'>AD9854</b>参考代码

    AD9854评估板原理图

    AD9854评估板原理图
    发表于 04-23 13:48 19次下载
    <b class='flag-5'>AD9854</b>评估板原理图

    AD9854/AD9852评估板说明

    AD9854/AD9852评估板说明
    发表于 05-11 14:31 15次下载
    <b class='flag-5'>AD9854</b>/AD9852评估板说明