




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上基于单片机的DDS算法的实现【摘要】通常DDS信号发生器设计主要分为两类,一类是采用FPGA设计,另一类采用单片机+DDS专用芯片实现。本文针对频率及要求较低的应用,提出一种更为简单的解决方案,即通过单片机编程完成DDS算法,从而实现信号发生器功能。【关键词】单片机;DDS;D/A转换1.引言近年来,直接数字频率合成(DDS)信号发生器,因具有输出信号频率稳定、分辨率高、相位噪声低等优点,逐渐取代了传统的基于LC或RC振荡电路的信号发生器,成为当前信号发生器的主流。DDS信号发生器的设计核心在于DDS算法的实现,当前主流的设计方案主要有两种:(1)采用FPGA实现DD
2、S算法,即通过HDL语言自行设计DDS算法,产生波形数字序列,FPGA输出驱动D/A转换器,实现信号输出。(2)采用专用DDS芯片实现,单片机只需改写DDS芯片相关寄存器,即可输出相应频率及波形的模拟信号。整个芯片的DDS算法及D/A转换都是出厂时已设计好,无需干预。针对一些非主流的应用,比如对输出频率和设计要求都较低时,有没有更简单的解决方案?本文将讨论如何采用单片机代替FPGA及DDS专用芯片,采用C语言编程完成DDS算法,从而实现单片机完成DDS信号发生器的简单设计方案。2.DDS基本原理直接数字合成(Direct Digital Synthesis、DDS)是一种从相位出发的新的频率合
3、成技术和信号产生的方法。DDS主要由:相位累加器、正弦波形存储器(ROM)、数模转换器(D/A转换)、低通滤波器、和时钟五部分组成。如图1所示。图1 DDS原理框图相位累加器本质上是一个计数器。在时钟脉冲的作用下,将频率控制字(FTW)的相位增量M累加一次。累加器如果溢出,除溢出位外,累加器保留其它的数字位。相位累加器输出数据作为地址,查询正弦查询表,将取出的正弦数据通过D/A转换器输出模拟信号。模拟信号再通过一个低通滤波器输出纯净的正弦波信号1。DDS算法包括了时钟、相位累加器、正弦查询部分,基本原理如图2所示:图2 DDS算法示意图如图2所示,采用32位的相位累加器,可输出为数据范围为0(
4、232-1)。取相位累加器的后8位作为正弦查询表的地址。正弦表存放一个周期的正弦波数据,由于采用于8位的D/A转换器,正弦表采用采用256个点来描述一个完整的正弦波数据。正弦表的输出数据为fout,其输出频率由“频率控制字FTW”进行调节:fout=fclk/2MFTW (式1)式中:fout输出频率fclk时钟频率M相位累加器位数FTW频率控制字最小频率分辨率:fmin=fclk/2M (式2)式中:fmin输出频率fclk时钟频率M相位累加器位数式中M为相位累加器的位数,本设计中采用32位相位累加器。FTW是频率步进控制字,FTW的取值决定了输出信号的频率。输出信号频率fout主要取决于频
5、率控制字FTW。增加FTW,可以使fout不断增加,但综合考虑Nyquist 采样定理,最高输出频率应小于fclk一半。但在实际使用中,工作频率应小于fclk的三分之一。受单片机运行速度的影响,本设计中选取的时钟频率为10KHz,因此最小频率分辨率为:fmin=fclk/2M=10×103/232=2.8696×10-6 (式3)根据上式,当需要输出1Hz的频率时,频率控制字FTW取:FTW=1/fmin=.7296得到了频率控制字FTW,如果需要输出相应的频率只需要乘上频率控制字就可以了。3.C语言实现DDS算法根据DDS算法的原理,在每个时钟脉冲fclk的作用下,累加器
6、加1,同时,从正弦表得到一个波形数据。结合C语言的特点,采用定时中断代替时钟脉冲,每个时钟作用下的工作放在定时中断中完成。具体实现如下:(1)时钟fclk通过定时器初始化程序,设置100us的定时中断。DDS算法在中断服务子程序中完成。因此,fclk取值为10KHz。由于受STC89C52单片机运行速度的限制,定时周期不能太短,最终影响输出信号频率。如果采用运行速度更快的CPU,可通过设置更短的定时周期,即可提高输出信号频率。(2)相位累加器通过定义一个32位的寄存器,直接通过加法运算实现。每次定时中断,累加器与频率控制字相加,并将结果放入累加器中。(3)正弦查询表通过定义一个具有256个元素
7、的一维数组,用于存放一个完整的正弦数据表。每次定时中断,用累加器的后8位作为该数组的索引,读出波形数据。图3 DDS算法在KEIL中的仿真波形完整的程序代码如下(采用STC89C51单片机):#define OUT P0 /波形数据输出unsigned long Phaseacc=0; /相位累加器unsigned long ftw1HZ=; /1Hz对应的频率控制字unsigned long ftwacc=0; /当前频率控制字unsigned char code Sin256= /正弦查询表128,131,134,137,140,143,146,149 ,.此处省略,121,124 ;/-
8、定时器初始化void InitTimer0(void) TMOD = 0x01; /10KHZ的定时频率TH0 = 0xFF;TL0 = 0x37;EA = 1; ET0 = 1; TR0 = 1;/-定时器中断程序void Timer0Interrupt(void) interrupt 1 unsigned char i;TH0 = 0x0FF; TL0 = 0x37; haseacc=Phaseacc+ftwacc; /累加器加FTWi= Phaseacc>>24;OUT = Sini; /正弦查询表取数P17=!P17;/-主程序void main(void) InitTimer0(); /定时器初始化ftwacc=100*ftw1HZ; /设置输出波形频率为100Hzwhile(1); /等待定时中断4.结语将C51实现的DDS算法的程序代码放在KEIL软件中仿真,通过该软件提供的Logic Analyzer工具,得到波形如图3所示。将P0输出外接8位D/A转换器,再通过低通滤波器后就能得到正弦信号。综上,本文介绍了基于51单片机的DDS算法的实现方法。在频率要求低,设计成本敏感的信号源的设计中,该方案具有明显优势。参考文献1蒋志勇.基于FPGA的DDS波形发生器设计J.科技信息
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江国企招聘2025宁波余姚景隆置业有限公司招聘7人笔试参考题库附带答案详解
- 重庆三峡学院《通信仿真实验》2023-2024学年第二学期期末试卷
- 成都艺术职业大学《管理智慧》2023-2024学年第二学期期末试卷
- 三峡大学科技学院《多媒体课件设计与开发》2023-2024学年第二学期期末试卷
- 成都理工大学工程技术学院《数据采集与处理》2023-2024学年第二学期期末试卷
- 张家口学院《量子力学纯英文》2023-2024学年第二学期期末试卷
- 安顺学院《电机学实验》2023-2024学年第二学期期末试卷
- 濮阳科技职业学院《数学教学与实践》2023-2024学年第二学期期末试卷
- 武汉晴川学院《轧制工艺学板带材生产》2023-2024学年第二学期期末试卷
- 江西旅游商贸职业学院《黑白图式语言-造型》2023-2024学年第二学期期末试卷
- T-SHJ X062-2023 电动重型卡车换电站及换电车辆技术要求
- 八角茴香油教学课件
- 国家文化安全教育课件
- 人教版七年级数学下册章节重难点举一反三 专题7.1 平面直角坐标系【八大题型】(原卷版+解析)
- 山东省汽车维修工时定额(T-SDAMTIA 0001-2023)
- JCT2156-2012 纤维玻璃原料及配合料COD值的测定
- 施工场地治安管理计划和突发治安事件紧急预案
- 控制吸烟的政策与法规案例分析
- 国企经理成员岗位聘任协议-(参考模版)
- 安防系统可靠性分析
- 初中英语词汇表(带音标)
评论
0/150
提交评论