当前位置:   article > 正文

基于FPGA的信号发生器(二)_32位相位累加器怎么设置

32位相位累加器怎么设置

DDS的原理

       DDS(Direct Digital  Frequency Synthesizer)直接数字频率合成器,也可叫DDFS。 DDS是从相位的概念直接合成所需波形的一种频率合成技术。 不仅可以产生不同频率的正弦波,而且可以控制波形的初始相位。

       DDS的原理如下:

  1. 相位累加器(Phase Accumulator):DDS的核心是一个相位累加器,它是一个计数器,用于不断累加一个固定的数值,该数值由所需的输出频率和时钟频率决定。

  2. 数字控制字(Digital Control Word):用户输入所需的频率、相位、幅度等信息,这些信息经过处理后生成一个数字控制字,用于控制相位累加器的行为。

  3. 相位到幅度转换(Phase-to-Amplitude Conversion):通过将相位信息转换成幅度信息,可以产生所需的波形。通常使用一个查找表(或者称为振幅表)来实现相位到幅度的转换。

  4. 数字-模拟转换(Digital-to-Analog Conversion):最终,经过相位到幅度转换后的数字信号需要转换成模拟信号。这一步通常由一个数模转换器(DAC)完成。

       总的来说,DDS的工作原理就是通过累加相位并将相位映射到幅度,来生成高精度、可调频率的模拟信号。由于所有的操作都是在数字域进行的,因此DDS具有高精度、灵活性好、可编程性强等优点,被广泛应用于频率合成、信号调制、信号发生器等领域。

       上文我们讲了DDS的设计框图,这一部分继续往下展开。

使用DDS完成信号发生器的思路

        使用DDS设计基于FPGA的信号发生器是一种常见的应用,它允许您在数字域内生成各种类型的信号,如正弦波、方波、三角波等,并且可以通过FPGA进行实时控制和调整。下面是一个简单的步骤指南:

  1. 选择合适的FPGA平台:首先,选择适合您需求的FPGA开发板或芯片。确保该FPGA平台具有足够的资源和性能来实现DDS和其他所需的功能。

  2. 编写DDS核心模块:在FPGA中实现DDS需要编写相应的Verilog或VHDL代码。这个DDS核心模块通常包括相位累加器、振幅表、数字控制字的生成逻辑等。您可以根据您的需求选择不同的DDS算法和精度。

  3. 设计波形输出模块:在DDS核心模块之后,设计一个波形输出模块,用于将DDS生成的数字信号转换成模拟信号。这通常需要使用数模转换器(DAC),以便将数字信号转换为模拟信号输出到外部设备。

  4. 编写控制逻辑:如果您需要实现实时控制和调整DDS参数(如频率、相位、幅度等),则需要编写相应的控制逻辑。这可能涉及使用FPGA内部的时钟、计数器和其他逻辑资源。

  5. 验证和调试:在将所有模块集成到一起之后,进行验证和调试是非常重要的。确保DDS能够正确地生成您所需的信号,并且控制逻辑能够有效地调整参数。

  6. 集成到整个系统中:一旦验证通过,将DDS信号发生器集成到您的目标系统中。这可能涉及与其他模块的接口和通信,确保DDS与整个系统协调工作。

  7. 性能优化和调整:最后,对系统进行性能优化和调整,确保它能够满足您的性能要求,并且稳定可靠。

DDS原理框图

主要构成: 

内部:相位累加器,正弦查找表 

外围:DAC,LPF(低通滤波器)

框图显示了DDS的基本原理。以下是各个部分的简要说明:

  1. Frequency Control Registers:这里存储了控制DDS输出频率的参数。这些参数可以由用户编程或者外部输入。

  2. Phase Accumulator:这是DDS的核心部分。它通过累加频率控制寄存器中的值来生成一个相位累加器。这个累加器的值被用作相位到幅度转换的输入。

  3. Phase-to-Amplitude Converter:相位累加器的值被输入到这个模块中,它将相位信息映射到相应的振幅值。通常,这里使用一个查找表(或者称为振幅表)来实现相位到幅度的转换。

  4. Digital-to-Analog Converter (DAC):最后,经过相位到幅度转换后的数字信号需要转换成模拟信号。这个模块通过DAC将数字信号转换为模拟信号,输出到外部设备或者用于后续处理。

工作过程

     整体来说,DDS(Direct Digital Synthesis)的工作过程可以简述如下:

  1. 初始化

    • 初始化DDS的频率控制寄存器,设置所需的输出频率。
    • 初始化相位累加器的初始相位。
  2. 相位累加器更新

    • 相位累加器开始累加,其累加速率由所需的输出频率决定。通常,相位累加器的增量由一个固定的数值决定,这个数值与所需输出频率和时钟频率有关。
  3. 相位到幅度转换

    • 相位累加器的当前值被送入相位到幅度转换模块。
    • 转换模块将相位值映射到相应的振幅值,通常使用一个查找表来实现相位到幅度的转换。
  4. 数字到模拟转换(DAC)

    • 经过相位到幅度转换后的数字信号被送入数模转换器(DAC)。
    • DAC将数字信号转换为模拟信号,并输出到外部设备或者用于后续处理。
  5. 重复步骤2至4

    • 相位累加器持续累加,以产生连续的信号输出。
    • 控制逻辑不断监测输出信号的频率和相位,以便在需要时进行调整或修改。
  6. 外部控制和调整

    • 用户可以通过外部接口或者控制逻辑来调整DDS的参数,如输出频率、相位、幅度等,以满足特定的应用需求。

      而本文需要着重突出的过程在于:

1、将存于ROM中的数字波形,经DAC,形成模拟量波形。 

2、改变寻址的步长来改变输出信号的频率。 步长即为对数字波形查表的相位增量。由累加器对相位增量进行累加,累加器的值作为查表地址。 

3、DAC输出的阶梯形波形,经低通滤波,成为模拟波形 

频率控制

       频率控制是DDS(Direct Digital Synthesis)中的一个关键环节,它负责控制输出信号的频率。下面是频率控制环节的一般工作流程:

  1. 设定目标频率

    • 用户设定所需的输出频率,这通常通过外部接口或者软件编程实现。
  2. 计算相位累加器的增量

    • 根据所需的输出频率和时钟频率,计算出相位累加器每个时钟周期应该增加的值。这个增量决定了相位累加器的累加速率,从而影响到输出信号的频率。
  3. 更新频率控制寄存器

    • 将计算得到的相位累加器增量写入频率控制寄存器,这样DDS系统就能根据这个值来控制相位累加器的累加速率。
  4. 相位累加器的累加

    • 相位累加器开始累加,根据频率控制寄存器中的值,以固定的增量进行累加。这样,相位累加器的值会随着时间的推移而线性增加。
  5. 产生输出信号

    • 相位累加器的值被输入到相位到幅度转换模块,转换成相应的振幅值。
    • 转换后的数字信号送入数模转换器(DAC),转换为模拟信号输出到外部设备。
  6. 调整和反馈

    • 如果输出信号的实际频率与目标频率有偏差,可以通过反馈机制进行调整。这可以通过比较输出信号的频率与目标频率来实现,并相应地调整频率控制寄存器中的值。
  7. 持续运行

    • 频率控制环节持续监测输出信号的频率,并根据需要调整相位累加器的增量,以保持输出信号的稳定性和准确性。

       在程序中,采样时钟是50M,N相位累加器的位宽是32,M频率控制字的位宽是16位;可以控制的最大的频率就是65535*50000000/4294967296=762Hz;在该工程中,有四个文件时用来控制频率的,如下:

       其中adder_32和reg32用来控制频率的快慢,请记住这样一个原理:

       波形的产生是通过产生一个ROM的寻址信号对存放波形的ROM进行寻址,然后得到ROM中的数据。而寻址的快慢就是波形输出的频率,所以通过控制对ROM的寻址快慢就可以控制频率了。这里控制频率的实现是通过一个32位的加法器和一个32位的寄存器进行寻址的;32位加法器的加数分别来自控制频率信号set_f和reg32模块反馈回来32为数,其实set_f就是32位加法器的一个步进值,同时也是ROM寻址的步进尺度。通过控制这个尺度就可以控制频率了。当这个尺度越大,频率就越高,相反则越小,如果想确定有多高和有多小就得用下面这个公式进行计算:

      为什么要把reg32的数重新加到adder_32呢?

      因为要不断地去寻址,要把ROM里面的数据都读出来,而ROM里面的数据就是一个周期的波形,所以要不断地累加上去。

相位控制

       相位控制是DDS(Direct Digital Synthesis)中的另一个重要环节,它负责控制输出信号的相位。以下是相位控制的一般工作流程:

  1. 设定目标相位

    • 用户设定所需的输出信号的相位,通常以角度(如0°到360°)或者周期性的相位(如0到1之间的值)表示。
  2. 计算相位累加器的初始值

    • 将目标相位转换为相位累加器的初始值。这个初始值决定了相位累加器从哪个点开始累加,以实现所需的输出相位。
  3. 更新相位控制寄存器

    • 将计算得到的相位累加器初始值写入相应的相位控制寄存器,以便DDS系统能够以正确的初始相位启动。
  4. 相位累加器的累加

    • 相位累加器从更新后的初始值开始累加。其累加速率由频率控制环节确定,但其初始值由相位控制寄存器确定。
  5. 产生输出信号

    • 相位累加器的值被输入到相位到幅度转换模块,转换成相应的振幅值。
    • 转换后的数字信号送入数模转换器(DAC),转换为模拟信号输出到外部设备。
  6. 调整和反馈

    • 如果输出信号的实际相位与目标相位有偏差,可以通过反馈机制进行调整。这可以通过比较输出信号的相位与目标相位来实现,并相应地调整相位控制寄存器中的值。
  7. 持续运行

    • 相位控制环节持续监测输出信号的相位,并根据需要调整相位控制寄存器中的值,以保持输出信号的稳定性和准确性。

       相位的控制其实和频率一样,这里先讲一个故事,有两个人(A、B)同时从一个起点出发,他们的速度相同,跑了一半之后A突然加速,而B一直保持原速,A加速到和B相差10米后保持原速,然后两个人一直跑下去。

        这里可以把他们等同于两个波形,本来寻址的速度是一样的,后来其中一个的步进值变大了(大了10米),这样就是相位超前了,A超了B十米。

        工程中这部分的内容在:

       这里还要讲一个知识点,就是截断,有没有发现,我们的ROM的地址是10位的,那怎么把前面所说的32位弄出来呢?请看一个图:

       截断就是把32位累加器的高10位拿出来作为相位累加器的值进行相加,而相位控制字就是控制相位超前和延后的控制参数。

波形控制

       波形控制负责控制输出信号的波形形状,例如正弦波、方波、三角波等。以下是波形控制的一般工作流程:

  1. 选择波形类型

    • 用户选择所需的输出波形类型,例如正弦波、方波、三角波等。这通常通过外部接口或者软件编程实现。
  2. 根据波形类型生成振幅表

    • 对于每种波形类型,都需要生成相应的振幅表(或者称为振幅波形表)。这个表包含了每个相位对应的振幅值。对于正弦波,通常使用一个正弦函数;对于方波和三角波,可以使用恒定的幅值或者逐渐变化的幅值。
  3. 选择振幅表

    • 根据用户选择的波形类型,选择相应的振幅表。
  4. 相位到幅度转换

    • 相位累加器的值被输入到振幅表中,以获取相应的振幅值。这个过程通常称为相位到幅度转换。
  5. 数模转换

    • 经过相位到幅度转换后的数字信号被送入数模转换器(DAC),转换为模拟信号输出到外部设备。
  6. 调整和反馈

    • 如果输出信号的实际波形与目标波形有偏差,可以通过反馈机制进行调整。这可以通过比较输出信号的波形与目标波形来实现,并相应地调整振幅表中的值。
  7. 持续运行

    • 波形控制环节持续监测输出信号的波形,根据需要调整振幅表中的值,以保持输出信号的稳定性和准确性。

       波形的控制就是,采用编码的方法,0的时候为正弦波,1的时候为三角波,2的时候为方波,3的时候为锯齿波。按照DDS的原理,理论上是什么频率都可以到达的,当然这得看你的系统时钟有多高,频率累加器的位数有多宽了。工程总采用的是50M和32位,频率的分辨率是0.012的。因为频率控制字set_f我只用了16位,所以最大只能输出762Hz,如果你要提高输出频率,必须把32位都用上去。当然还要看DAC的最大转换频率了。其数据最大的更新速度就是1.21MHz。

波形存储

       波形存储涉及将波形数据存储在内部存储器中,以便后续使用。以下是波形存储的一般工作流程:

  1. 波形数据获取

    • 波形数据可以通过多种方式获取,例如:
      • 用户手动输入波形数据。
      • 从外部文件加载波形数据。
      • 使用特定算法生成波形数据。
  2. 数据处理

    • 获取的波形数据可能需要进行处理,以适应DDS的要求。例如,如果DDS的振幅表是固定大小的,那么波形数据可能需要进行插值或者截断以适应振幅表的大小。
  3. 存储波形数据

    • 处理后的波形数据被存储在DDS的内部存储器中。这可以是FPGA内部的存储器块、RAM或者其他可编程存储器。
  4. 选择存储的波形

    • 当需要使用存储的波形时,用户可以选择所需的波形。这通常通过一个波形选择器或者波形索引来实现。
  5. 相位到幅度转换

    • 当选择了特定的存储波形后,相位累加器的值被输入到存储器中,以获取相应的波形数据。这个过程通常称为相位到幅度转换。
  6. 数模转换

    • 经过相位到幅度转换后的数字信号被送入数模转换器(DAC),转换为模拟信号输出到外部设备。
  7. 调整和反馈

    • 如果输出信号的实际波形与存储的波形有偏差,可以通过反馈机制进行调整。这可以通过比较输出信号的波形与存储的波形来实现,并相应地调整波形数据或者相位控制寄存器中的值。
  8. 持续运行

    • 波形存储环节持续监测输出信号的波形,根据需要调整存储的波形数据或者相位控制寄存器中的值,以保持输出信号的稳定性和准确性。

正弦信号相位与幅度的对应关系

        可以将正弦波波形看作一个矢量沿相位圆转动,相位圆对应正弦波一个周期的波形。波形中的每个采样点对应相位圆上的一个相位点。

      相位累加器的值作为ROM的地址,读取ROM的相位幅度,实现相位到幅度的转换。

AD转换和滤波

       在DDS(Direct Digital Synthesis)系统中,AD(模数转换)和滤波是将数字信号转换为模拟信号的重要步骤。以下是它们的一般工作流程:

  1. 模数转换(AD转换)

    • DDS系统产生的信号是数字信号,需要将其转换为模拟信号才能输出到外部设备或者进行后续处理。
    • 模数转换器(ADC)负责将DDS产生的数字信号转换为模拟信号。
    • 数字信号经过采样保持电路,以一定的频率进行采样,并转换为相应的模拟电压或电流值。
    • ADC的性能和参数(如分辨率、采样率、输入范围等)对输出信号的质量和精度有很大影响。
  2. 滤波

    • 转换后的模拟信号可能包含由于ADC采样引入的高频噪声或者其他不需要的成分。
    • 滤波器用于对转换后的模拟信号进行滤波,去除不需要的高频噪声或者其他干扰成分。
    • 低通滤波器是最常用的滤波器类型,用于去除高频成分,保留所需的信号频率成分。
    • 滤波器的设计和参数(如截止频率、通带波纹、阻带衰减等)需要根据具体应用需求进行优化。
  3. 输出模拟信号

    • 经过滤波器处理后的模拟信号可以直接输出到外部设备,或者用于后续的信号处理或者放大。

分析:

DDS优点

  • 频率分辨率高,可达2的N次。 
  • 频率切换速度快,可达us量级。
  • 频率切换时相位连续。
  • 可以产生任意波形。

DDS缺点

  • 输出频带范围有限。 
  • 输出杂散大。

幅值控制

       讲幅值的控制之前,要先科普一下DAC,DAC就是一个把数字信号编程模拟信号的器件,输出的电压范围和器件所接的参考电压,开发板上的DAC的工作电压是5V,参考电压也是5V。所以输出的电压范围也是0~5V。因为TLC5615是10位精度的DAC,所以其电压分辨率是5/1023=0.00489V。比如你要输出个2.5V,那你就必须把数512往里面送,输出大约就是2.5V了。

       知道了DAC是怎么控制输出电压之后,再来了解怎么控制怎个波形的电压范围。因为ROM中存储的波形表最大的数为1023所以,能够输出的峰值是5V,y=kx。现在我们把这个5V分为10份,每一份就是0.5V,当我们要输出y=3V时,有计算得出,k=0.6。这种就是等比例放大与缩小输出控制法。

       这部分在工程中是如何操作的呢?首先,将ROM的数据读出(怎么读出要看频率控制那一部分),然后将读出的数dds_data_reg乘以一个小于10的数,再除以10,因为在FPGA中你是无法直接进行小数运算的,也没有相关的描述语言可以描述,所以必须要这样做。

       幅值控制负责控制输出信号的振幅。以下是幅值控制的一般工作流程:

  1. 设定目标幅值

    • 用户设定所需的输出信号的幅值,这通常以电压、电流或者其他合适的单位表示。
  2. 计算幅值控制寄存器的值

    • 根据目标幅值和DAC(数模转换器)的特性,计算出对应的幅值控制寄存器的值。这个值决定了DAC输出的模拟信号的幅值范围。
  3. 更新幅值控制寄存器

    • 将计算得到的幅值控制寄存器的值写入相应的寄存器,以便DDS系统能够根据这个值来控制输出信号的幅值。
  4. 相位到幅度转换

    • 相位累加器的值被输入到幅值控制寄存器中,以获取相应的幅值。这个过程通常称为相位到幅度转换。
  5. 数模转换

    • 经过相位到幅度转换后的数字信号被送入数模转换器(DAC),转换为模拟信号输出到外部设备。
  6. 调整和反馈

    • 如果输出信号的实际幅值与目标幅值有偏差,可以通过反馈机制进行调整。这可以通过比较输出信号的幅值与目标幅值来实现,并相应地调整幅值控制寄存器中的值。
  7. 持续运行

    • 幅值控制环节持续监测输出信号的幅值,并根据需要调整幅值控制寄存器中的值,以保持输出信号的稳定性和准确性。

       程序详见:

        这样就可以很方便控制输出波形的电压范围了。当你想提高控制的精度时,你可以将小数点后增加一个,这时就乘以一个两位数,然后除以100了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/724136
推荐阅读
相关标签
  

闽ICP备14008679号