基于单片机的直接数字频率合成器的设计
扫描二维码
随时随地手机看文章
1 引 言
频率合成技术迄今已经历了三代:直接频率合成技术、锁相环频率合成技术、直接数字式频率合成技术。直接数字式频率合成(Direct Digital Frequency Synthesis,DDFS或DDS)是第三代频率合成技术的标志,他的主要特点是计算机参与频率合成,既可以用软件来实现,也可以用硬件来实现,或二者结合。直接数字式频率合成器的最大优点就是频率切换的速度极快(可达几微秒),并且频率、相位和幅度都可控,输出频率稳定度可达系统时钟的稳定度量级,易于集成化,更主要的是由于计算机参与频率合成,故可充分发挥软件的作用。虽然现有的专用DDFS芯片的功能也比较多,但控制方式却是固定的,因此不一定是我们所需要的。本文利用80C51单片机、D/A转换器以及一些外围寄存器设计的直接数字频率合成器,电路设计简单、频率控制灵活,具有良好的实用性,信号精度误差也在允许范围之内。
2 DDFS的基本原理和总体框图
DDFS基本上由5部分组成,频率码锁存器(FR)、相位累加器(PA)、ROM(正弦表)、数/模变换器(D/A)、低通滤波器(LPF),他们在时钟的统调下工作。
首先,把一个单位幅度的正弦函数的相位在0~2π弧度内分成尽可能小的等间隔点,若用A位二进制数表示,分成2A个间隔点,则最小相位间隔应是:
算出相应相位点的单位正弦函数值,并用D位二进制数表示,写入有A位地址线、D位数据线的ROM中,构成一个所谓正弦表。合成频率的过程是控制改变相位增量(即相位跳过的最小相位间隔θmin的数目),由于相位增量不同,在一个正弦周期内的取样点就不同,而取样是在系统时钟控制下进行的,即取样周期是一定的,这样,根据相位增量的累加和所对应的点(代表相位值)从ROM中读出相应的函数值所形成的量化正弦波的周期也随相位增量的改变而改变,从而达到合成所需频率的目的。
相位累加器根据频率码锁存器中的频率码k每个时钟累加一次,其输出一方面(N位)回到加法器的另一个输入端作为下一次累加的被加数,另一方面(A位)作为ROM的地址码对ROM寻址,读出相应的正弦函数值(二进制代码),经过数据缓冲器稳定之后送到D/A变换器,得到一个幅值对应于PA输出相位点的正弦函数值。下一个时钟到来,累加器再增加一个k值,ROM同样读出累加器输出的A位地址码所对应的正弦值,再送至D/A变换器。如此下去,相位累加器输出值是一个阶梯式的,相应地,D/A的输出是一个以正弦为包络的阶梯波。相位累加器的溢出正好对应着阶梯正弦波的一个周期结束,再开始下一个周期。经低通滤波器的平滑滤波得到频率为f0的正弦波。由于时钟周期Tc=(1/fc)是定值,而且是高稳定的,所以输出频率亦很稳定。
频率分辨率为:
输出频率为:
式中N为相位累加器的位数,愚为频率码。如果N=A,设定的k就是每个时钟PA所跳过的最小相位间隔数。N的增加意味着频率分辨率的提高,但是A的增加却意味着ROM容量的增加,使设备复杂化,故一般N>A。本设计中的参数设置:N=12,A=10,D=8。
3 系统主要功能模块的具体实现
3.1 频率码锁存器(FR)、相位累加器(PA)
频率码锁存器由2片8位D型锁存器74LS373构成,第Ⅱ片只使用D0~D3,形成12位的频率码。相位累加器由3片4位全加器74LS283构成,形成12位的加法器。加法器的输出经过2片寄存器74LS273后一方面(12位)反馈到全加器的输入端作为被加数,另一方面(10位,舍弃低2位)作为地址码对ROM寻址,而频率码锁存器输出的频率码k作为加数。此处寄存器74LS273主要起数据缓冲的作用,他们都是在时钟上升沿工作。
3.2 ROM正弦表
ROM正弦表用单片机80C51内部的程序存储器来实现。由于相位累加器输出的地址A是10位,而每个正弦函数值用8位二进制数来表示,所以正弦表的容量是1 kB。80C51的片内程序存储器容量为4 kB,完全足够,因此不用再扩充片外程序存储器了。用80C51的P3.1,P3.0以及P1.7~P1.0作为10位地址的输人口,用查表程序根据地址读出相应的函数值,再由P0口输出,送至D/A转换。
所谓查表法,就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出,然后把这张表存于单片机的程序存储器中。这时自变量为单元地址,相应的函数值为该地址单元中的内容。在微机应用系统中,一般使用的表均为线性表,他是一种最常用的数据结构,是n个数据元素a1,a2,…,an的集合,各元素之间具有线性的位置关系。每次查表时,首先将P3.1,P3.0以及P1.7~P1.0,输入的10位地址存放在20H,21H两个单元中(高字节在20H),他将作为查表时的地址偏移量(函数值存放在程序存储器的实际地址=表首地址+偏移量)。
3.3 数/模转换器(D/A)
数/模转换器DAC0832输入数字量是8位,参考电压Vref的工作范围是-10~+10 V,通过他将外加高精度电压源与内部的电阻网络相连接。芯片内有一个8位输入寄存器和一个8位DAC寄存器,形成两级缓冲结构。这样可使DAC转换输出前一个数据的同时,将下一个数据传送到8位输入寄存器,以提高数/模转换的速度。DAC0832与80C51的接口电路如图3所示,80C51的P0口直接与DAC0832的数字输入DI7~DI0相接,80C51的WR与DAC0832的WR1相接,P2.7与片选端CS连接,芯片采用的是单缓冲方式。这时芯片的地址为7FFFH。
3.4 系统时钟的产生
系统时钟可利用80C51的定时/计数器产生。时钟频率要根据最高输出频率确定,一般fc≥4f0max,而低通滤波器的截止频率为最高输出频率。本设计中时钟频率要求为50 kHz,则要用定时器输出周期为20μs方波。选用定时/计数器T0,工作于方式0,输出为P2.0引脚。20μs的方波可由间隔10 μs的高低电平相间而成,因而只要每隔10μs对P2.0取反一次。由于实验用80C51的时钟频率为12 MHz,因此计数初值:
4 软件设计
4.1 ROM查表程序
5 结 语
经过示波器观察可以看到清晰的正弦波形,通过计算机改变频率码k,可以得到不同频率的波形,且输出频率随频率控制字的增大而增大。但输出频率超过13 kHz时,输出波形明显失真,这主要由D/A转换、低通滤波等部分产生的杂散所致。由于DDFS采用全数字结构,不可避免地引入了杂散。其来源主要有3个:相位累加器相位舍位误差造成的杂散,幅度量化误差(由存储器有限字长引起)造成的杂散和DAC非理想特性造成的杂散。
本文的设计是以产生正弦波为例,实际上只要在DDFS的波形存储器存放不同的波形数据,就可以实现各种波形输出,如三角波、锯齿波和矩形波,甚至是任意波形。另外只要在DDFS内部加上相应控制,如调频控制FM、调相控制PM和调幅控制AM,即可以方便灵活地实现调频、调相和调幅功能,产生FSK,PSK,ASK和MSK等信号。在通信、雷达、电子对抗、导航、广播电视、遥控遥测、仪器仪表等领域具有广泛的应用前景。