论文部分内容阅读
摘要:介绍了DDS技术在MCU FPGA双系统的一种实现方法,重点介绍了MCU的控制系统设计与现场可编程逻辑门阵列FPGA实现直接数字频率合成的原理及其电路结构,并给出了利用ALTERA公司的Flex10K系列EPFIOK10LC84-4设计实现方案。
关键词:直接数字频率合成(DDS) MCU 现场可编程逻辑门阵列(FPGA)
中图分类号:TN741 文献标识码:B 文章编号:1002-2422(2008)01-0013-02
DDS技术在相对带宽、频率转换时间、相位连续性、高分辨率以及集成化等一系列性能指标方面已远远超过了传统频率合成技术。当DDS中的累加器的位数N很大时,最低输出频率可达Hz、mHz乃至μHz。如果fc为100MHz,那么当N为40位时,其分辨率可达90uHz。转换时间最快可达10ns的量级,这都是传统频率合成所不能比拟的。
1 DDS的基本原理和参数要求
DDS设计是以AT89C51和FPGA为核心,采用直接数字合成技术,通过一定的手段将正弦波波形的数字量表示的幅值存入存储器RAM(又称波形存储器)中,然后通过一个地址发生器对RAM寻址得到对应的幅值,用RAM的输出值来驱动DAC,然后经滤波即可转换成所需要的模拟正弦波形。因为它是在时域中进行频率合成,从而能够对输出频率进行快速而且精确的控制,并且这种控制全部都是数字控制,因此可以提供非常高的频率精度。DDS实现的基本原理框图如图1。
DDS技术在本质上实现了一个数字分频器的功能,它的频率精度是由N位相位累加器的比特数决定的,即输入的参考频率除以2N就决定了DDS所能够实现的频率精度。输出信号波形的频率及频率分辨率可以表示如下:
fout=Mfc/2N
fmin =fc/2N
式中:fout为输出信号频率;fmin 为输出信号分辨率:M为频率控制字;N为相位累加器字长:fc为基准频率源。DDS输出信号的频率主要取决于频率控制字M,相位累加器字长N决定DDS的频率分辨率。当M增大时,fout可以不断的提高,由抽样定理,最高输出频率不得大于f/2,实际工作时输出频率小于f/3较为合适。
2 DDS的总体方案设计
系统采用MCU和FPGA两个系统进行设计,在很多系统设计中,经常会遇到多个控制系统共同协作完成整个系统的设计,解决多系统(包括双系统)共同协作互相通信的关键是要处理好系统之间通信的总线仲裁问题(即BUs_Contro1),只有解决了这个问题,才能保证整个系统的正常运转。设计中由MCU的P3.0作为总线控制,MCU主要进行键盘输入,显示单元及对RAM存储波形数据的控制。上电后,由MCU给予初始化,转而由FPGA来控制波形数据的读取,然后通过D/A控制及幅度控制单元,再经过一个低通滤波器,就可以得到所需的输出波形。
3 MCu控制系统模块的方案设计
系统上电后,MCU系统控制模块首先进行初始化工作,主要完成的功能是:系统初始化的工作,包括输出信号的频率、幅度、占空比以及波形类型的设置,然后進行键盘扫描并进行判断处理。输出500Hz,幅度为5V的正弦波。然后进入键盘扫描,对输入的键值进行操作。根据具体情况设置几种合法的键盘输入,假设设定如下:
(1)5个数字键加,‘A’键,用来设定频率。如设定500Hz的频率,按键次序是‘00500A’。
(2)2个数字键加‘B’键,用来设定信号幅度。如设定
2.4V的峰峰值,按键次序是‘24B’。
(3)1个数字键加‘C’键,用来设定输出信号类型。0、1、2分别指正弦波、三角波、方波。
(4)1个数字键加‘D’键,用来设定方波的占空比。如设定20%的占空比,按键次序是‘2D’。
(5)任何时候输入‘E’键,都表示清除前面的所有输入,回到初始状态。下面是C51程序的部分源程序:
void main()
{
unsigned int freq,now_freq:
unsigned char amp,zkb,wave_type,now_amp,now_zkb,now_type;
unsigned char key,key1,k,key_buffer[5];
bus_ctrl=1;sel_da=0;amp=50,zkb=5,wave_type=0,freq=500;
now_type=wave_type; now_zkb=zkb;now_amp=amp;nowfreq=freq;
write_dphase(freq);wrlte_wave amp(amp);init_ram(wave_type,
zkb);
wave_out(now_freq);k=0;bus_ctrl=0;
while(1)
{
key=sctmkey():
}
}
4 波形存储器数据的产生方案
波形存储器的设计是很重要的部分。为了保证波形的平滑,设计时可将一个周期分为65536个点,点数很多,直接求解很麻烦。正弦波形具有特有的对称性,可以考虑取一个周期的一半(或者是四分之一)即可,充分运用其对称性通过一定的编程算法实现整个周期波形的还原。采用了取半个周期,即要取32768个采样点,如果直接用单片机计算32768个点的正弦幅度值,涉及的多次浮点运算,初始化时间很长,为了提高效率,可采取一种简单的方法。这里用的是8位的DA,所以每个幅度值也是8位的,一共有256个不同的幅度值,ram中存储的是余弦函数从π到2π的幅度值,由下式计算:
amp=127.5 127.5cos(δ 2δ(n 0.5)/65532)
n=0,1,…,32768
将每个幅度值的个数记下。由于余弦函数的对称性,幅度为255的点的个数和幅度为0的点的个数是相同的,因此将幅度0到127的点的个数分别存储到一个step[128]的数组中,这个数组位于程序存储器中。初始化余弦函数的波形的时候就可以直接根据step[128]向ram中写数据。这一设计大大缩短了ram空间波形数据的初始化时间,是系统设计的一大突出特色。
5 FPGA控制模块的设计方案
FPGA控制模块的设计主要包括:分频模块,相位累加器模块,锁存模块,MCU写FPGA内寄存器模块,数码管扫描显示模块等。
相位累加器模块相当于地址发生器,对于一个连续的正弦波信号,其角频率ω可以用相位斜率△φ/△t表示。当角频率。为定值时,正弦波信号的相位与时间成线性关系,即φ=△t。根据这一基本关系,在一定频率fc的时钟信号作用下,通过一个线性的计数时序发生器按照相位增量M进行累加,所产生的结果作为取样地址对正弦波波形存储器进行扫描,进而周期性的读取波形存储器中的数据。
6 结束语
DDS是现今一种重要的频率合成手段,高速集成电路的发展进一步改善了DDS的性能,它与传统技术相结合组成的各种混合设计方案将频率源的性能提高到了一个新的水平,因此,未来的DDS不仅可应用于需要使用信号源的传统领域,而且也必将开拓出许多新的应用领域。
实践证明:本系统在频率不高于17kHz时能产生精确的正弦波形,而且十分稳定。由于基准时钟为526.7KHz,且分辨率为19位,因此,该系统能产生的最低频率为1.0045Hz,若要产生更低频率及更精确的波形,可以提高分辨率并相应减小基准时钟,这在FPGA中实现起来相当容易,可以通过改变RAM数据,产生任意波形。用FPGA设计DDS电路较采用专用DDS芯片更为灵活方便。
关键词:直接数字频率合成(DDS) MCU 现场可编程逻辑门阵列(FPGA)
中图分类号:TN741 文献标识码:B 文章编号:1002-2422(2008)01-0013-02
DDS技术在相对带宽、频率转换时间、相位连续性、高分辨率以及集成化等一系列性能指标方面已远远超过了传统频率合成技术。当DDS中的累加器的位数N很大时,最低输出频率可达Hz、mHz乃至μHz。如果fc为100MHz,那么当N为40位时,其分辨率可达90uHz。转换时间最快可达10ns的量级,这都是传统频率合成所不能比拟的。
1 DDS的基本原理和参数要求
DDS设计是以AT89C51和FPGA为核心,采用直接数字合成技术,通过一定的手段将正弦波波形的数字量表示的幅值存入存储器RAM(又称波形存储器)中,然后通过一个地址发生器对RAM寻址得到对应的幅值,用RAM的输出值来驱动DAC,然后经滤波即可转换成所需要的模拟正弦波形。因为它是在时域中进行频率合成,从而能够对输出频率进行快速而且精确的控制,并且这种控制全部都是数字控制,因此可以提供非常高的频率精度。DDS实现的基本原理框图如图1。
DDS技术在本质上实现了一个数字分频器的功能,它的频率精度是由N位相位累加器的比特数决定的,即输入的参考频率除以2N就决定了DDS所能够实现的频率精度。输出信号波形的频率及频率分辨率可以表示如下:
fout=Mfc/2N
f
式中:fout为输出信号频率;f
2 DDS的总体方案设计
系统采用MCU和FPGA两个系统进行设计,在很多系统设计中,经常会遇到多个控制系统共同协作完成整个系统的设计,解决多系统(包括双系统)共同协作互相通信的关键是要处理好系统之间通信的总线仲裁问题(即BUs_Contro1),只有解决了这个问题,才能保证整个系统的正常运转。设计中由MCU的P3.0作为总线控制,MCU主要进行键盘输入,显示单元及对RAM存储波形数据的控制。上电后,由MCU给予初始化,转而由FPGA来控制波形数据的读取,然后通过D/A控制及幅度控制单元,再经过一个低通滤波器,就可以得到所需的输出波形。
3 MCu控制系统模块的方案设计
系统上电后,MCU系统控制模块首先进行初始化工作,主要完成的功能是:系统初始化的工作,包括输出信号的频率、幅度、占空比以及波形类型的设置,然后進行键盘扫描并进行判断处理。输出500Hz,幅度为5V的正弦波。然后进入键盘扫描,对输入的键值进行操作。根据具体情况设置几种合法的键盘输入,假设设定如下:
(1)5个数字键加,‘A’键,用来设定频率。如设定500Hz的频率,按键次序是‘00500A’。
(2)2个数字键加‘B’键,用来设定信号幅度。如设定
2.4V的峰峰值,按键次序是‘24B’。
(3)1个数字键加‘C’键,用来设定输出信号类型。0、1、2分别指正弦波、三角波、方波。
(4)1个数字键加‘D’键,用来设定方波的占空比。如设定20%的占空比,按键次序是‘2D’。
(5)任何时候输入‘E’键,都表示清除前面的所有输入,回到初始状态。下面是C51程序的部分源程序:
void main()
{
unsigned int freq,now_freq:
unsigned char amp,zkb,wave_type,now_amp,now_zkb,now_type;
unsigned char key,key1,k,key_buffer[5];
bus_ctrl=1;sel_da=0;amp=50,zkb=5,wave_type=0,freq=500;
now_type=wave_type; now_zkb=zkb;now_amp=amp;nowfreq=freq;
write_dphase(freq);wrlte_wave amp(amp);init_ram(wave_type,
zkb);
wave_out(now_freq);k=0;bus_ctrl=0;
while(1)
{
key=sctmkey():
}
}
4 波形存储器数据的产生方案
波形存储器的设计是很重要的部分。为了保证波形的平滑,设计时可将一个周期分为65536个点,点数很多,直接求解很麻烦。正弦波形具有特有的对称性,可以考虑取一个周期的一半(或者是四分之一)即可,充分运用其对称性通过一定的编程算法实现整个周期波形的还原。采用了取半个周期,即要取32768个采样点,如果直接用单片机计算32768个点的正弦幅度值,涉及的多次浮点运算,初始化时间很长,为了提高效率,可采取一种简单的方法。这里用的是8位的DA,所以每个幅度值也是8位的,一共有256个不同的幅度值,ram中存储的是余弦函数从π到2π的幅度值,由下式计算:
amp=127.5 127.5cos(δ 2δ(n 0.5)/65532)
n=0,1,…,32768
将每个幅度值的个数记下。由于余弦函数的对称性,幅度为255的点的个数和幅度为0的点的个数是相同的,因此将幅度0到127的点的个数分别存储到一个step[128]的数组中,这个数组位于程序存储器中。初始化余弦函数的波形的时候就可以直接根据step[128]向ram中写数据。这一设计大大缩短了ram空间波形数据的初始化时间,是系统设计的一大突出特色。
5 FPGA控制模块的设计方案
FPGA控制模块的设计主要包括:分频模块,相位累加器模块,锁存模块,MCU写FPGA内寄存器模块,数码管扫描显示模块等。
相位累加器模块相当于地址发生器,对于一个连续的正弦波信号,其角频率ω可以用相位斜率△φ/△t表示。当角频率。为定值时,正弦波信号的相位与时间成线性关系,即φ=△t。根据这一基本关系,在一定频率fc的时钟信号作用下,通过一个线性的计数时序发生器按照相位增量M进行累加,所产生的结果作为取样地址对正弦波波形存储器进行扫描,进而周期性的读取波形存储器中的数据。
6 结束语
DDS是现今一种重要的频率合成手段,高速集成电路的发展进一步改善了DDS的性能,它与传统技术相结合组成的各种混合设计方案将频率源的性能提高到了一个新的水平,因此,未来的DDS不仅可应用于需要使用信号源的传统领域,而且也必将开拓出许多新的应用领域。
实践证明:本系统在频率不高于17kHz时能产生精确的正弦波形,而且十分稳定。由于基准时钟为526.7KHz,且分辨率为19位,因此,该系统能产生的最低频率为1.0045Hz,若要产生更低频率及更精确的波形,可以提高分辨率并相应减小基准时钟,这在FPGA中实现起来相当容易,可以通过改变RAM数据,产生任意波形。用FPGA设计DDS电路较采用专用DDS芯片更为灵活方便。