历史上的今天
返回首页

历史上的今天

今天是:2025年02月04日(星期二)

2020年02月04日 | 16位单片机对AD9854控制的探讨

2020-02-04 来源:elecfans

  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控制的实现


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,与初始设定值相一致 ,可知 ,实验程序是正确的。

推荐阅读

史海拾趣

ETA Electric Industry Co Ltd公司的发展小趣事

进入新世纪,ETA Electric Industry Co Ltd意识到技术创新是企业发展的关键。于是,公司开始加大研发投入,引进了一批高素质的研发人员。他们专注于开发新型电子元器件,特别是在微型化、高性能方面取得了显著成果。其中,他们研发的一种新型微型电容器,因其体积小、性能稳定而广受好评。这一技术创新不仅提升了公司的市场竞争力,还为公司赢得了更多的合作机会。

爱特姆(ATOM)公司的发展小趣事

随着电子行业的快速发展,爱特姆不断加大对技术研发的投入,致力于推出更先进、更稳定的连接器产品。公司成功研发出一系列具有自主知识产权的新产品,不仅提升了产品的性能和质量,也进一步巩固了其在行业内的领先地位。

Cotco公司的发展小趣事

在电子行业竞争日趋激烈的背景下,Cotco公司深知供应链管理和成本控制的重要性。公司与主要供应商建立了长期稳定的合作关系,确保原材料的稳定供应和成本控制。同时,Cotco不断优化生产流程和物流管理,降低生产成本和运营成本。这些举措使得Cotco的产品在价格上具有更强的竞争力,进一步巩固了其在市场上的地位。

Hi-Light Electronic Co Ltd公司的发展小趣事

随着产品线的不断丰富和市场需求的持续增长,Cotco公司开始加大市场拓展力度。公司积极参加国内外各类电子行业展览和交流活动,与潜在客户和合作伙伴建立了广泛的联系。同时,Cotco也注重品牌建设,通过赞助行业活动、开展公益事业等方式提升品牌知名度和美誉度。经过几年的努力,Cotco已经成为电子行业内一个响当当的名字。

Captive Fastener公司的发展小趣事

Captive Fastener公司深知产品质量是企业生存和发展的关键。公司建立了严格的质量管理体系,从原材料采购到生产加工、产品检验等各个环节都进行严格把关。此外,公司还定期对员工进行质量意识和技能培训,确保每一道工序都符合质量标准。这些措施有效提升了公司的产品质量和客户满意度。

Fischer Connectors公司的发展小趣事

随着全球市场的不断扩大,Captive Fastener公司意识到国际合作的重要性。公司积极寻求与国际知名电子制造商的合作机会,通过提供高质量的紧固件产品和技术支持,成功打入国际市场。同时,公司还与国外同行开展技术交流与合作,不断提升自身的技术水平和市场竞争力。

问答坊 | AI 解惑

数字钟原理图加程序

数字钟原理图加程序(c和汇编都有)…

查看全部问答>

揭露Altium公司的强卖行为

这里揭露Altium公司的强卖行为。Altium公司会从以下途径得到信息:1、展会留下的名片;2、注册Altium公司网站上的免费培训留下的个人信息。Altium得到这下信息之后,就佯装成其他公司给你打电话推销电子设计软件,首先会说有一款很好的软件,比Alti ...…

查看全部问答>

很详细的AVR 单片机熔丝配置

很详细的AVR单片机熔丝配置…

查看全部问答>

《自动识别技术基础知识》关于条码技术的

这是我今天在一个资料下载论坛注册后下载的,我就扫了一遍,没有仔细看, 我就传上来,让有兴趣的人看看,呵呵!贵在分享!!希望对大家有用! 一共两篇。…

查看全部问答>

TI 大举扩张ARM9、Cortex-A8,机会几何?

仍然感慨于这张图,同时据TI相关负责人介绍,未来TI MPU领域着重发展ARM9和Cortex-A8,ARM9 是目前市场上的主流,面向中低端应用,而Cortex-A8则更好地布局未来,面向高端应用。 在这里想和大家探讨的是: 1、在这两个领域,TI的竞争对手有哪些 ...…

查看全部问答>

GPRS NO dialtone

各位好:我的是基于wince5.0 用的GPRS模块是MC52I , 请问硬件上DCD DTR 是不是必须接到串口上啊? 还有到最后拨号×99# 出现 no dialtone ,请各位大侠指点一下 谢谢?…

查看全部问答>

关于AT89C51SND1C-IL的最小系统的问题

想做个AT89C51SND1C-IL的最小系统,我借鉴别人的图画了个PCB图,然后用感光板做了出来,把各个元件焊上后通过USB接口边上电脑,电脑提示发现新硬件,然后就是装驱动,装好后没想到电脑提示“该设备无法启动(代码10)”,我换了两台电脑,均出现同 ...…

查看全部问答>

请问:如何看驱动程序中的DBGPRINT信息

DriverMonitor可以,但只能够静态地看DriverEntry里面的DBGPRINT。然而,用户态程序运行以来后,会调用驱动程序,此时驱动程序中其他地方的DBGPRINT信息应该怎么样看到呢?谢谢!…

查看全部问答>

Linux设备驱动开发专业论坛--www.linuxdriver.cn诚征斑竹

www.linuxdriver.cn诚征斑竹,一起繁荣Linux设备驱动开发专业论坛的人气,共同致力于提高中国工程师的Linux设备驱动开发水平,普及Linux设备驱动开发知识。 www.linuxdriver.cn完全是公益性社区,因此斑竹没有任何经济收益。 要求:认真负责, ...…

查看全部问答>