|**银杏科技有限公司旗下技术文档发布平台** |||| |技术支持电话|**0379-69926675-801** ||| |技术支持邮件|Gingko@vip.163.com ||| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | V1.0 | 2020-11-14 | gingko | 初次建立 | \\ \\ ===== 实验十二:DDS实验——输出正弦波===== ==== 一、实验目的与意义 ==== - 了解GD32 DAC结构 - 了解GD32 DAC特征 - 掌握 DDS原理 - 掌握 GD32固件库中DAC属性的配置方法 - 掌握KEIL MDK集成开发环境使用方法 ==== 二、实验设备及平台 ==== - iCore3L 双核心板 - JLINK(或相同功能)仿真器 - Micro USB线缆 - Keil MDK 开发平台 -装有WIN XP(及更高版本)系统的计算机 ==== 三、实验原理 ==== **GD32 DAC简介** * GD32的数字/模拟转换器可以将12位的数字数据转换为外部引脚上的电压输出。数据可以采用8位或12位模式,左对齐或右对齐模式。当使能了外部触发,DMA可被用于更新数字数据。在输出电压时,可以利用DAC输出缓冲区来获得更高的驱动能力。两个DAC可以独立或并发工作。 **DAC主要特征** * 8 位或 12 位分辨率,数据左对齐或右对齐; * DMA 功能并带有下溢错误检测; * 同步更新转换; * 外部事件触发转换; * 可配置的内部缓冲区; * 输入参考电压 VREF+; * 噪声波发生器(LSFR 噪声模式和三角噪声模式); * 双 DAC 并发模式。 **DAC输出电压公式** * 经过线性转换后,数字输入会转换为 0 到 VREF+ 之间的输出电压。 * 各 DAC 通道引脚的模拟输出电压通过以下公式确定: * DAC_output= V_REF × DOR/4096 **DDS简介** * 一个典型的DDS系统包括相位累加器、幅度变换及DA转换电路。它基于同一个系统时钟驱动的。在某一个时钟时刻,相位累加器产生一个特定的相位角度,通过相位角度-幅度变换,查找到波形表中电压值,然后送给DAC,来重现这一时刻的模拟电压,这就完成了DDS工作的一个步进。通过不断的时钟驱动,我们就能得到连续的模拟波形。 **相位累加器** * 相位累加器(ACCUMULATOR)是DDS的核心,它由一个加法器和一个D触发器组成。相位累加器由多位组成,典型的应用中,一般取16~48位。相位累加器工作过程中,时钟每动作一次,累加器便累加一次调谐字(TUNING WORD);所以相位累加器输出一个以时间为序列的数字字,它线性增长,直到达到最大值2𝑛 (假设该累加器为n位),如果大于最大值,则舍弃溢出的高位,仍然保留n位; * 为了形象的描述相位累加器的工作过程,我们可以把相位累加器看做一个圆周,如图12-1所示。其中,n表示相位累加器的位数,2𝑛为相位累加器的模数,也就是圆周等分点数,每次的步进值为调谐字(TUNING WORD)。如果把相位累加器旋转一周作为一个周期的话,则最终频率输出可以用方程式fout=fsample/2n∙m(m:调谐字)来描述。 * 相位累加器的输出为线性的,如果我们需要输出任意的波形,我们则需要角度-幅度转换。一般地可以通过查找表的方法来实现。相位累加器的输出作为查找表的地址,数据线作为内容输出,则完成了角度-幅度转换; * 相位累加器的输出经过波形查找表后,得到按预置波形变化的数字序列,还需要进行数字-模拟转换,才能得到我们需要的模拟波形,这个过程为 D/A转换。DAC 的驱动时钟与相位累加器的时钟同源,所以保证DDS 每个模块工作“步调”一致; {{ :icore3l:icore3l_arm_hal_12_9.jpg?400 |}} ====四、实验步骤==== - 把仿真器与iCore3L的SWD调试口相连(直接相连或者通过转接器相连); - 把iCore3L通过Micro USB线与计算机相连,为iCore3L供电; - 打开Keil MDK 开发环境,并打开本实验工程; - 烧写程序到iCore3L上; - 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。 ====五、实验现象==== 串口显示 SDIO初始化及文件读取情况,显示结果如图所示,示波器测量 DAC管脚口波形输出情况,测量情况如图所示。 {{:icore3l:arm_12_1.jpg?400 |}} {{:icore3l:arm_12_2.jpg?400|}}