详细介绍Audition输出一个周期2khz的正弦波(循环)。将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。

您所在的位置:网站首页 audition生成脉冲信号 详细介绍Audition输出一个周期2khz的正弦波(循环)。将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。

详细介绍Audition输出一个周期2khz的正弦波(循环)。将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。

2024-07-15 01:47| 来源: 网络整理| 查看: 265

详细介绍Audition输出一个周期2khz的正弦波(循环)。将一段数字音频歌曲数据转换为模拟音频波形输出(循环) 序 言 1)STM32 的 DAC简介 2)DAC基本原理 2)DAC数字信号格式 4) 配置步骤 一.项目说明二.生成语音wav文件 1)Audition输出一个周期2khz的正弦波(循环) 2)Audition将一段数字音频歌曲数据转换为模拟音频波形输出(循环)8khz,量化16bit,单通道,时长仅仅5~10秒。 三.观察正弦波波形四.观察音频输出五. 结语

序 言 1)STM32 的 DAC简介

STM32 的 DAC 主要特点 2 个 DAC 转换器:每个转换器对应 1 个输出通道 8 位或者 12 位单调输出 12 位模式下数据左对齐或者右对齐 同步更新功能 噪声波形生成 三角波形生成 双 DAC 通道同时或者分别转换 每个通道都有 DMA 功能

DAC输出电压计算 DAC输出 = VREF x (DOR / 4096) 其中DOR是对应的数字信号,VREF为参考电压。

2)DAC基本原理

DAC框图 在这里插入图片描述

2)DAC数字信号格式 如图,DAC 输出是受 DORx 寄存器直接控制的,但是我们不能直接往 DORx寄存器写入数据,而是通过 DHRx 间接的传给 DORx 寄存器,实现对 DAC 输出的控制。 而STM32 的 DAC 支持 8/12 位模式, 8 位模式的时候是固定的右对齐的,而 12 位模式可以设置左对齐/右对齐。即单 DAC 通道 x总共有 3 种情况:

8 位数据右对齐:用户将数据写入 DAC_DHR8Rx[7:0]位(实际是存入 DHRx[11:4]位)。

12 位数据左对齐:用户将数据写入 DAC_DHR12Lx[15:4]位(实际是存入 DHRx[11:0]位)。

12 位数据右对齐:用户将数据写入 DAC_DHR12Rx[11:0]位(实际是存入 DHRx[11:0]位)。 之后这些数据会传输到DORx 寄存器。

如果没有选中硬件触发(寄存器DAC_CR1的TENx位置’0’),存入寄存器DAC_DHRx的数据会在一个APB1时钟周期后自动传至寄存器DAC_DORx。 如果选中硬件触发(寄存器DAC_CR1的TENx位置’1’),数据传输在触发发生以后3个APB1时钟周期后完成。 一旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间tSETTLING之后,输出即有效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。

在这里插入图片描述

4) 配置步骤

1)开启相应引脚时钟,设置 PA4 为模拟输入。(DAC1对应PA4,DAC2对应PA5)

STM32F103ZET6 的 DAC 通道 1 在 PA4 上,所以,我们要使能 PORTA 的时钟并设置 PA4 为模拟输入。

DAC 本身是输出,但是为什么端口要设置为模拟输入模式呢? 因为一但使能 DACx 通道之后,相应的 GPIO 引脚(PA4 或者 PA5)会自动与 DAC 的模拟输出相连,设置为输入,是为了避免额外的干扰。(即使是直接用芯片也可以无脑设置为模拟输入,实验可得虽然引脚为模拟输入,但仍可输出相应信号。(电压)

2)使能相应 DAC 时钟。(此处通道一对应DAC1) 3)初始化 DAC,设置 DAC 的工作模式。 4)使能 DAC 转换通道。 5)设置 DAC 的输出值。

相关结构体

typedef struct { uint32_t DAC_Trigger; //是否使用触发功能 uint32_t DAC_WaveGeneration; //是否使用波形发生 uint32_t DAC_LFSRUnmask_TriangleAmplitude;//设置屏蔽/幅值选择器,只在使用波形发生器的时候才有用 uint32_t DAC_OutputBuffer; //设置输出缓存控制位(使能后输出可能没法到0) }DAC_InitTypeDef;

代码示例 DAC初始化

`void Dac1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; DAC_InitTypeDef DAC_InitType;//相关结构体初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); //使能PORTA通道时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE ); //使能DAC通道时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_4) ;//PA.4 输出高 DAC_InitType.DAC_Trigger=DAC_Trigger_None; //不使用触发功能 TEN1=0 DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生 DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置 DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ; //DAC1输出缓存关闭 BOFF1=1 DAC_Init(DAC_Channel_1,&DAC_InitType); //初始化DAC通道1 DAC_Cmd(DAC_Channel_1, ENABLE); //使能DAC1 DAC_SetChannel1Data(DAC_Align_12b_R, 0); //12位右对齐数据格式设置DAC值 } 一.项目说明

用STM32F103的DAC功能完成以下波形输出,用示波器观察波形,并用蜂鸣器或手机耳机收听输出声音效果、感受歌曲的音质差异。

1)输出一个周期2khz的正弦波(循环)。此波形驱动作用至蜂鸣器或喇叭,会呈现一个“滴…”的单音;

2)将一段数字音频歌曲数据转换为模拟音频波形输出(循环)

二.生成语音wav文件 1)Audition输出一个周期2khz的正弦波(循环)

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

2)Audition将一段数字音频歌曲数据转换为模拟音频波形输出(循环)8khz,量化16bit,单通道,时长仅仅5~10秒。

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

三.观察正弦波波形

我们用到了野火的例程,所以我们观察一下,野火例程里的正弦波输出 首先我们打开野火关于正弦波的文件,然后打开采样脚本 在这里插入图片描述 这里用matlab打开 在这里插入图片描述 用matlab打开这个采样脚本,运行 在这里插入图片描述我们把这个把输出的采样点复制到波形数据中 在这里插入图片描述 在这里插入图片描述 我们可以观察到波形 在这里插入图片描述

四.观察音频输出

我们首先要把上面生成的.wav文件转化为十六进制数字文件,这里我们用到了Uedit32这个软件 在这里插入图片描述

我们首先打开之前生成的音乐.wav文件

在这里插入图片描述 我们全选然后十六进制复制 在这里插入图片描述 新建一个然后粘贴 在这里插入图片描述 然后打开notepad++,把刚才的复制一部分过来复制 在这里插入图片描述 在这里插入图片描述 剪切 在这里插入图片描述 新建一个然后把刚才复制的粘贴

为十六进制数加0X前缀

在这里插入图片描述

在这里插入图片描述

把这个复制到刚才那个数组中 在这里插入图片描述 在这里插入图片描述 编译下载,用示波器观察 在这里插入图片描述

五. 结语

这个实战对于我们了解DAC有着重要的意义,通过这次实战我们了解到了,keil仿真输DAC波形的方法,这对于以后我们进一步学习使用stm32,有着比较好的帮助,所以博主在这里希望各位也要好好学习,争取掌握这个知识点。还有就是希望各位有问题可以联系博主,博主很乐意和各位一起学习。请您关注我个人的微信公众号,微信搜索h生活剪影很期待您的关注,我们一起进步。在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3