单片机驱动AD9850扫频程序

PoisonApple 发表于 2017-11-05 14:48:11 收藏 已收藏
赞(0) •  评论(0

单片机驱动AD9850扫频程序

PoisonApple 发表于 2017-11-05 14:48:11

  AD9850是AD公司生产的最高时钟为125 MHz、采用先进的CMOS技术的直接频率合成器,主要由可编程DDS系统、高性能数模变换器(DAC)和高速比较器3部分构成,能实现全数字编程控制的频率合成。

  AD9850采用直接数字合成(DDS)技术,内含可编程DDS 系统和高速比较器,可实现全数字编程控制的频率合成。可编程DDS系统的核心是相位累加器,由一个加法器和一个N位相位寄存器组成,N 一般为24~32。每来一个外部参考时钟,相位寄存器便以步长M递加。相位寄存器的输出与相位控制字相加后可输入到正弦查询表地址上。

  正原理框图弦查询表包含一个正弦波周期的数字幅度信息,每一个地址对应正弦波中0°~360°范围的一个相位点。查询表把输入地址的相位信息映射成正弦波幅度信号,然后驱动DAC 输出模拟量。

  单片机控制AD9850的数字信号发生器C51程序 //-----------------------函数声明,变量定义

  ------------------------------ #include 《reg51.h》 #include 《intrins.h》 #include《ABSACC.H》 //-----------------------定义管脚

  ---------------------------------------- #define data_OUT P1

  单片机驱动AD9850扫频程序

  sbit 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 Freq-b26 Freq-b25 Freq-b24

  //W2 Freq-b23 Freq-b22 Freq-b21 Freq-b20 Freq-b19 Freq-b18 Freq-b17 Freq-b16

  //W3 Freq-b15 Freq-b14 Freq-b13 Freq-b12 Freq-b11 Freq-b10 Freq-b9 Freq-b8

  //W4 Freq-b7 Freq-b6 Freq-b5 Freq-b4 Freq-b3 Freq-b2

  //-------------------------------------------------------------------------------------------------- // 函数名称: delay

  // 入口参数: N

  // 函数功能:延时子程序,实现(16*N+24)us的延时

  // 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动 //-------------------------------------------------------------------------------------------------- void delay(unsigned int N) { int i;

  单片机驱动AD9850扫频程序

  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; //置工作方式选择位为00 for(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(); }

收藏

相关话题
文章来源栏目

评论(0)

加载更多评论

参与评论

分享到

QQ空间 QQ好友 微博
取消