直接数字合成(DDS)是一种常用的调制技术,可以用来生成任意波形。原理如下:
假设这里需要输出余弦函数的波形,如下图:
每隔一段时间对这个曲线进行采样,就可以得到一堆数据,使用单片机来输出这个信号并外接一个 DA 就可以输出波形了。
这就是DDS 的主要原理,真的是非常简单的哟,下例将实现一个正弦的波形输出,首先需要取得数据,这里使用 C 语言来获取正弦函数的数据:
"正确的算法和数据应该使用 Matlab 来开发,C 语言处理数据有较多的局限性,存在诸多不便,不过本人还不会使用 Matalb,只能用 C 语言将就下 "
PC 上的 C 代码如下图所示:
这样就得到一组正弦信号的数据,下面是一个 BCD 工具,由于编码的问题,0~255在 C 语言内部使用 ACSII 来储存,而我们需要的是二进制编码,下面是工程演示:
有了这个工具,就可以编写DDS 的程序里,首先在 Keil 软件中配置好工程,以上面的数据来生成需要的波形,如下:
通过 P0 端口的调试结果来看,波形基本是正确的,只有在交越零点的时候数据有一点错误。编译程序,下载hex 文件到开发板,由于我这里没有DA ,只能用 逻辑分析仪来将就下,逻辑分析仪的截图下图:
本例只是粗略的测试下 DDS 的实现方法,并没有严格定义频率、相位、周期、垂直位移这些非常非常关键的参数。
此外,其他地方如果有任何错误的地方希望读者能够指出,望共同进步。。(●'◡'●)