差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
contest_board_dds [2022/06/25 17:54] gongyu [2. DDS核心模块] |
contest_board_dds [2022/06/25 17:59] (当前版本) gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
## 在电赛训练板上实现DDS的功能 | ## 在电赛训练板上实现DDS的功能 | ||
关于用FPGA实现DDS的过程可以参考文档:[[https://www.eetree.cn/wiki/dds_verilog|DDS生成任意波形的方法及Verilog代码实例]] | 关于用FPGA实现DDS的过程可以参考文档:[[https://www.eetree.cn/wiki/dds_verilog|DDS生成任意波形的方法及Verilog代码实例]] | ||
+ | {{ :contest_training_board1.png |}}<WRAP centeralign>基于小脚丫FPGA核心板的电赛训练板 </WRAP> | ||
### 1. 顶层模块 | ### 1. 顶层模块 | ||
行 93: | 行 93: | ||
从图中可以看出,DDS控制模块根据旋转编码器模块的输入信号调节频率控制字、切换波形,输出一定频率的方波、三角波、锯齿波或正弦波数据至DAC。同时,DDS控制模块还会将当前波形信息和频率信息输出给OLED模块用于显示。四种波形的产生使用同一个相位累加寄存器,如下图所示,相位累加寄存器本质上是一个不断累加的计数器,单次累加的幅度是频率控制字,频率控制字由旋转编码器调节,当旋转编码器顺时针转动时增大频率控制字,当旋转编码器逆时针转动时减小频率控制字。接下来分别介绍四种波形的原理。 | 从图中可以看出,DDS控制模块根据旋转编码器模块的输入信号调节频率控制字、切换波形,输出一定频率的方波、三角波、锯齿波或正弦波数据至DAC。同时,DDS控制模块还会将当前波形信息和频率信息输出给OLED模块用于显示。四种波形的产生使用同一个相位累加寄存器,如下图所示,相位累加寄存器本质上是一个不断累加的计数器,单次累加的幅度是频率控制字,频率控制字由旋转编码器调节,当旋转编码器顺时针转动时增大频率控制字,当旋转编码器逆时针转动时减小频率控制字。接下来分别介绍四种波形的原理。 | ||
- | (1)方波 | + | - 方波 - 取相位累加寄存器的最高位作为判断条件,当最高位为逻辑1,则对DAC的输入赋值10’h3ff;当最高位为逻辑0,则则对DAC的输入赋值10’h000,从而实现了方波波形。 |
- | 取相位累加寄存器的最高位作为判断条件,当最高位为逻辑1,则对DAC的输入赋值10’h3ff;当最高位为逻辑0,则则对DAC的输入赋值10’h000,从而实现了方波波形。 | + | - 锯齿波 - 取相位累加寄存器的高十位直接作为DAC的输入,随着相位累加寄存器不断累加,DAC的输入也周期性地以锯齿波形状循环。 |
- | (2)锯齿波 | + | - 三角波 - 取相位累加寄存器的最高位作为判断条件,当最高位为逻辑1,则将相位累加寄存器的13到22位直接作为DAC数据的输入;当最高位为逻辑0,则将相位累加寄存器的13到22位取反后作为DAC数据的输入。 |
- | 取相位累加寄存器的高十位直接作为DAC的输入,随着相位累加寄存器不断累加,DAC的输入也周期性地以锯齿波形状循环。 | + | - 正弦波 - 与其它三种波形不同,正弦波不能直接用取相位累加寄存器作为DAC的输入,需要将相位累加寄存器的高8位作为正弦波表的地址输入,这样的话,就实现了在一个周期内以一定间隔读出正弦波表内的数据作为DAC的输入。 |
- | (3)三角波 | + | |
- | 取相位累加寄存器的最高位作为判断条件,当最高位为逻辑1,则将相位累加寄存器的13到22位直接作为DAC数据的输入;当最高位为逻辑0,则将相位累加寄存器的13到22位取反后作为DAC数据的输入。 | + | |
- | (4)正弦波 | + | |
- | + | ||
- | 与其它三种波形不同,正弦波不能直接用取相位累加寄存器作为DAC的输入,需要将相位累加寄存器的高8位作为正弦波表的地址输入,这样的话,就实现了在一个周期内以一定间隔读出正弦波表内的数据作为DAC的输入。 | + | |
下面是DDS的主代码,可以选择输出的波形以及相应的频率 | 下面是DDS的主代码,可以选择输出的波形以及相应的频率 | ||
行 581: | 行 576: | ||
</code> | </code> | ||
- | ### OLED显示模块 | + | ### 5. OLED显示模块 |
这是通过SPI总线方式来驱动128*64分辨率的OLED显示屏显示相应信息的逻辑代码 | 这是通过SPI总线方式来驱动128*64分辨率的OLED显示屏显示相应信息的逻辑代码 | ||