基于STM32的DAC音频输出实验

基于STM32的DAC音频输出实验

新年新迹象,辞旧迎新,小飞哥先跟大家拜个年!经过了2020年的各种不顺,迎来了2021年,首先祝大家否极泰来,新的一年事事顺心,工作顺意,都能健健康康的!

      小飞哥2020年大概是10月份开始做技术方面的公众号分享,非常感谢小伙伴们的支持,在未来的日子里,小飞哥会继续陪伴大家,和大家一起变得更加优秀,同时也更加努力地分享有价值、有意义的文章,也希望能够得到更多志同道合的朋友的支持!

    寒暄过后,来,干!

------------------------------------------------------------------------------------------------------------------------------------------------------------

硬件资源:

STM32f103ZET6最小系统板

TDA2030音频功放模块

小音箱或者小喇叭

按键

软件资源:

定时器模块

DAC模块

音频文件生成软件:

朗读女:生成简短的WAV文件

WavToC:把WAV文件转化为二进制文件

实现目标:

通过按键控制,DAC输出短提示语音频

硬件连接:

图片

核心板TDA2030模块 TDA2030模块喇叭(不分)
VCC5VVCC GND接线1
GNDGND OUT接线2
PA4(DAC)IN   

-----------------------------------------------------------------------------------------------------------------------------------------------------------

一、音频二进制文件生成
1、朗读女的使用
    这里只做简要的使用说明,更多的我也没有使用太多,伙伴们可以百度哈。大家可以网上下载或者在后面我留的地址里面下载,直接点击安装即可,安装完成后打开软件,界面如下图所示。

图片

    默认是有两种发音声音,大家可以在网上下载自己喜欢的声音,http://www.443w.com/tts/?post=2,打开此网址或者直接点击红框中的下载发音人,只需要在输入框输入我们想要的语音就可以了。

图片

    点击生成声音文件,选择我们要保存的路径,可以随意选,自己要记住哈。

图片

    选择WAV文件格式,点击开始生成,等待提示完成之后,我们的语音就生成啦,软件默认生成的是16bit、16K采样率的语音

图片

2、WavToC的使用

    打开WavToC软件,导进来我们刚才生成的WAV文件,有几个音频的关键参数需要注意,采样速率、输出采样率、输出压缩级别,采样率、采样位宽是从WAV生成软件设置而来的,输出采样率跟采样速率有关系,一般满足奈奎斯特采样定律

    奈奎斯特采样定理:奈奎斯特采样定理解释了采样率和所测信号频率之间的关系,阐述了采样率fs必须大于被测信号感兴趣最高频率分量的两倍。该频率通常被称为奈奎斯特频率fN。

fs>2*fN

    WAV文件的采样频率为16K理论上,输出采样频率应该<8000,所以可以选择6400或者8000,大家可以试试不同的采样率下声音的还原效果,我选择的是6400的输出采样率,还原度还是挺高的。

图片

图片

    接下来点击生成代码,右边转换输出框里面已经出现我们需要的代码,只需要把代码拷贝过去到我们已经有的工程文件,或者保存为.h文件,直接包含进我们的工程。

图片

    下面对生成的代码进行一点简要的分析:下面几点也是我们程序设计需要关注的几点,采样率6400,那么如何来实现呢,软件代码生成的时候也给我们进行了说明,只需要配置我们的定时器周期为156us,开启定时器中断,156us中断一次。f = 1/156us = 6410HZ,大约是6400,还给出了函数原型,我们只需要按照这个说明编写函数就可以啦。

图片

二、软件实现

       明白了原理之后,软件实现就比较简单了,我们只需要配置DAC和定时器就可以啦。

1、我这里使用的是定时器3,关于定时器的配置如下,分频系数,周期有参数传入确定,向上计数模式。

图片

2、STM32 DAC输出配置

STM32F103ZET6 的 DAC 通道 1 在 PA4 上,所以,我们先要使能 PORTA 的时钟, 然后设置 PA4 为模拟输入。DAC 本身是输出,但是为什么端口要设置为模拟输入模式呢?因为一但使能 DACx 通道之后,相应的 GPIO 引脚(PA4 或者 PA5)会自动与 DAC 的模拟输出相连,设置为输入,是为了避免额外的干扰。
       STM32 的 DAC 模块(数字/模拟转换模块)是 12 位数字输入,电压输出型的 DAC。DAC 可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合使用。DAC 工作在 12 位模式时,数据可以设置成左对齐或右对齐。DAC 模块有 2 个输出通道,每个通道都有单独的转换器。在双DAC 模式下, 2 个通道可以独立地进行转换,也可以同时进行转换并同步地更新 2 个通道的输出。DAC 可以通过引脚输入参考电压 VREF+以获得更精确的转换结果。STM32 的 DAC 模块主要特点有:
① 2 个 DAC 转换器:每个转换器对应 1 个输出通道
② 8 位或者 12 位单调输出
③ 12 位模式下数据左对齐或者右对齐
④ 同步更新功能
⑤ 噪声波形生成
⑥ 三角波形生成
⑦ 双 DAC 通道同时或者分别转换
⑧ 每个通道都有 DMA 功能
 代码配置如下:

为什么是选择8bit对齐模式,而不是12位呢,这就和我们生成的语音文件数据格式有关系啦,生成的是8bit模式的文件,所以这里选择8bit对齐模式。

图片

3、定时器,DAC输出已经配置完成了,接下来编写我们的语音播放功能函数,只需要在定时器中断中调用即可,功能函数如下,只需要将函数放到中断里面调用,功能函数中,我们只需要把语音文件数组输出到DAC中,就可以了,播放完成之后关闭中断,关闭DAC输出,避免干扰杂音出现。

图片

三、音频功率放大器TDA2030介绍

仅仅依靠DAC输出的电压驱动能力是很弱的,需要功放来对信号进行功率放大,才能够驱动喇叭,要是手头没有功放模块的话,耳朵凑近喇叭,要很近很近哦,说不定能够听到微弱的声音,哈哈,小飞哥第一次就是没有功放,开始怎么调都没输出声音,最后恍然大悟般想到了驱动能力问题。。。。。。

1、模块图片:

图片

模块参数:

1)、单声道18W功放电路设计

2)、板载喇叭接线座

3)、板载10K可调电阻,可以调节放大的音量

4)、板载电源指示灯

5)、芯片主要的引脚已经引出,可以直接输入音频信号

6)、工作电压:6~12V

2、TDA2030音频功放芯片介绍

资料链接:https://www.chip37.com/scp/TDA2030#catalog10

      TDA2030A音频功放电路,常采用V型5脚单列直插式塑料封装结构。如图所示,按引脚的形状引可分为H型和V型。该集成电路广泛应用于汽车立体声收录音机、中功率音响设备,具有体积小、输出功率大、失真小等特点。并具有内部保护电路。意大利SGS公司、美国RCA公司、日本日立公司、NEC公司等均有同类产品生产,虽然其内部电路略有差异,但引出脚位置及功能均相同,可以互换。

图片

引脚说明:

图片

图片

典型应用电路(单电源):

图片

      通过调节滑动变阻器分压实现输入电压幅值调整,进而调整输出声音的大小,放大倍数为Au=R1/R2。
 

如果你觉得对自己有帮助的话,给个赞,点个关注,点个在看,感谢前进的道路上有你的陪伴!

图片欢迎大家关注 Embeded小飞哥  ,我是小飞哥,让我快点遇到优秀的你,然后一起变得更加优秀,加油!!!

小飞哥微信号:w974762670,加好友进群一起交流呀!
演示视频:

见公众号!

资料链接地址:
链接:https://pan.baidu.com/s/1VyglPMiofhvl8Qa3VhSMZw
提取码:m6a4

图片

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞哥玩嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值