0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于PWM实现语音播放的详细过程

GReq_mcu168 来源:ARM中文社区 作者:Xiaoya 2021-04-25 17:27 次阅读

事实上大部分MCU都可以实现语音播放

下面是一段音频数据的波形

局部放大图:

0751e2e6-a4ba-11eb-aece-12bb97331649.png

以一定的速度采样(ADC)这些波形进行存储,就是音频数据了,所以播放就是按原来采样的速率再用DAC输出对应的数据即可。

这里的音频有两个主要的参数,采样速率和采样位数。

采样速率:指1s中采样多少个数据点,比如1s种采集16000个点,那么采样率就是16KHz。采样速率越高,越能抓到频率较高的声音,比如CD的采样率就是44.1KHz,确保人耳能听到的声音都会被抓到。

采样位数:指音频幅度最大值与最小值分为了多少阶,比如满幅度是3.3V,如果是8Bit位数,那么每一阶就是3.3V/256 = 12.89mv,采样位数越高,声音细节越好。所以采样速率和位数越高,声音还原越逼真,但存储的数据量也越大,一首三四分钟的歌曲,如果不采用编码按原始波形数据存储,数据量有好几十兆大小,这涉及到音频编码的问题,这里不展开讲了,有兴趣的同学可以找相关资料

接下来看怎么播放,最简单的当然是把采样(ADC)的数据按原样输出(DAC)了。但我们有些芯片本身不带有DAC,所以只能用PWM代替DAC,PWM即脉冲宽度调制。这里只需要把DAC的幅度值转换成PWM的占空比即可,例如16KHz 8Bit的声音转换成16Khz 256阶占空比的PWM。但有一个问题,如果用16KHz的PWM播放语音,声音是可以播放,但有一个16Khz的谐波存在,这个声音会被人耳听到,所以需要更高频率的PWM,数据还是按照16Khz更新。

我这里使用32KHz的PWM,用16KHz 8Bit PCM格式的音频数据,8Bit的数据对应一个Byte,16KHz采样,1秒种占用存储空间就是16K Byte,F429有2M Byte的Flash存储空间,理论上可以存储2048K/16K = 128秒的音频。

下面是用NucleoF429实现音频播放的具体过程:

一、配置PWM

1、用STM32CubeMx建立工程,配置两个定时器TIM1和TIM2,TIM用于PWM产生,TIM2用于16KHz数据更新。

075e031e-a4ba-11eb-aece-12bb97331649.png

TIM1选择PWM互补输出(单通道也可以),将PE8和PE9复用为PWMN和PWMP。

TIM1在APB2总线上,TIM2在APB1总线上

077024ae-a4ba-11eb-aece-12bb97331649.png

所以TIM1和TIM2的时钟频率分别为180M和90M,系统时钟用HSE输入的8MHz。

079da032-a4ba-11eb-aece-12bb97331649.png

将TIM1设置为32KHz,即31.25us。8Bit占空比,一个LSB为31.25us / 256 = 0.1220703125us = 8.192MHz,TIM1 180M / 8.192M = 21.97265625,这里取整数22。所以实际的PWM频率为1/(180 / 22) *256 = 31.289us = 31.96KHz

07ab63ca-a4ba-11eb-aece-12bb97331649.png

TIM2 为90MHz,45分频后为2MHz即0.5us,周期125即62.5us = 16KHz。

07b6ede4-a4ba-11eb-aece-12bb97331649.png

NVIC开启TIM2中断。生成工程名和目录后生成Keil工程。

二、播放语音

1、先编译后,编写TIM中断服务程序。

07e540f4-a4ba-11eb-aece-12bb97331649.png

完成后,开启TIM2中断和PWM,(PWM是互补输出,需要单独开启各个通道)

07eda870-a4ba-11eb-aece-12bb97331649.png

用逻辑分析仪测量输出波形。

07f7c562-a4ba-11eb-aece-12bb97331649.png

如图所示,TIM1 PWM为31.96KHz,TIM2为62.5us即16KHz,结果正确。

接下来处理音频:

这里使用的音频是PCM格式,是未进行压缩编码的原始数据,可以直接给PWM输出。

音频处理的软件有许多,只要能把格式转为PCM即可,下面是我用Cool Edit这款软件做的音频格式转换。

选择菜单 文件--》批量转换

08141cda-a4ba-11eb-aece-12bb97331649.png

选择新的采样率和采样位数。

08202f02-a4ba-11eb-aece-12bb97331649.png

选择PCM格式。设置输出目录后运行批处理完成转换。

08299272-a4ba-11eb-aece-12bb97331649.png

完成后的音频文件用WinHeX这个软件打开。

08331a22-a4ba-11eb-aece-12bb97331649.png

图中红框中的44个Byte为PCM格式的文件头信息,后面的的数据为音频数据,数据全选后利用WinHex的可选格式复制

0862504e-a4ba-11eb-aece-12bb97331649.png

将数据以C数组的形式导出,在工程目录下新建.h文件,将复制的文件粘帖到.H文件并在工程中Include进来,定义起始和结束地址,数组的大小即为文件结束地址,数组用const修饰,可以将数据存储到Flash中。

086db466-a4ba-11eb-aece-12bb97331649.png

在TIM2中,以16KHz的速度更新PWM数据即可实现音频播放。

0876158e-a4ba-11eb-aece-12bb97331649.png

编译工程,下载到NucleoF429板子上,在PE8或PE9上接一个喇叭即可听到声音。

以上用的音频采样是16K 8Bit,要想提高音质,提高采样和Bit数即可,音量可以用外接三极管或功放放大,音频数据也可以用ADC采集后存储到SPI Flash后播放,实现录音回放。

编辑:lyn

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4958

    浏览量

    210859
  • 语音播报
    +关注

    关注

    1

    文章

    23

    浏览量

    14370

原文标题:使用PWM实现语音播放

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PWM控制电机转速的原理与实现

    PWM(脉宽调制)是一种广泛应用于电机控制领域的调制技术。它通过调节脉冲信号的占空比,实现对电机转速的精确控制。PWM控制电机转速的方法因其高效、稳定、易于实现等优点,在现代工业、家电
    的头像 发表于 06-03 17:23 985次阅读

    语音芯片究竟如何写入语音?思泽远科技为您详细解答

    呢?思泽远科技语音芯片厂家小编将为您详细解答这个问题。思泽远语音芯片供应商一、什么是语音芯片?语音芯片,顾名思义,是一种能够
    的头像 发表于 03-27 14:41 304次阅读
    <b class='flag-5'>语音</b>芯片究竟如何写入<b class='flag-5'>语音</b>?思泽远科技为您<b class='flag-5'>详细</b>解答

    能不能把单片机上的蜂鸣器换成语音播放模块

    我的毕设选题是基于单片机的智能语音门禁系统设计与实现,所以我在网上买了个智能门锁的板子,但是它没有语音播放,我就想着能不能把蜂鸣器换成语音
    发表于 03-26 10:26

    WTN6系列语音芯片:PWM与DAC音频输出在PCB设计中的优势

    ,使得工程师在PCB设计时能够更加灵活、高效地完成工作。本文将详细探讨WTN6系列语音芯片的这一特性在PCB设计中的优势。一、PWM与DAC音频输出方式简介1.PWM
    的头像 发表于 12-18 08:46 356次阅读
    WTN6系列<b class='flag-5'>语音</b>芯片:<b class='flag-5'>PWM</b>与DAC音频输出在PCB设计中的优势

    芯知识 | 什么是音频蓝牙播放语音芯片?

    随着科技的不断进步,音频蓝牙播放语音芯片成为嵌入式音频系统中备受关注的创新解决方案。本文将深入解析什么是音频蓝牙播放语音芯片,以及其在实现
    的头像 发表于 12-15 08:36 469次阅读
    芯知识 | 什么是音频蓝牙<b class='flag-5'>播放</b><b class='flag-5'>语音</b>芯片?

    WT588F02B-8S语音芯片:灵活应用的语音播放利器,实现多重优势

    在智能语音交互领域,WT588F02B-8S可重复擦写(Flash型)语音芯片声音播放提示IC凭借其出色的特性,为用户提供了更灵活、高效的语音解决方案。本文将聚焦于该芯片的应用优势,包
    的头像 发表于 12-14 10:11 265次阅读
    WT588F02B-8S<b class='flag-5'>语音</b>芯片:灵活应用的<b class='flag-5'>语音</b><b class='flag-5'>播放</b>利器,<b class='flag-5'>实现</b>多重优势

    WT2605C语音芯片:实现蓝牙音频播放与BLE透传,引领智能设备应用新潮流

    随着蓝牙技术的快速发展,蓝牙音频播放和BLE(蓝牙低功耗)透传已成为智能设备中不可或缺的功能。在这样的背景下,WT2605C语音芯片以其出色的性能和集成度,完美实现了蓝牙音频播放+BL
    的头像 发表于 12-05 08:49 400次阅读
    WT2605C<b class='flag-5'>语音</b>芯片:<b class='flag-5'>实现</b>蓝牙音频<b class='flag-5'>播放</b>与BLE透传,引领智能设备应用新潮流

    唯创知音有哪些语音芯片支持白噪音播放功能?以及应用领域介绍

    唯创知音作为专业的语音芯片提供商,一直致力于为消费者提供多样化且高质量的语音芯片产品。在白噪音播放功能方面,唯创知音拥有多款具备此功能的语音芯片,满足了市场对于白噪音
    的头像 发表于 12-04 09:11 327次阅读
    唯创知音有哪些<b class='flag-5'>语音</b>芯片支持白噪音<b class='flag-5'>播放</b>功能?以及应用领域介绍

    可录音语音芯片IC的工作原理及应用场景介绍

    录音播放语音芯片是一种具有录音和播放功能的集成芯片,广泛应用于各种电子产品和设备中。本文将详细介绍录音播放
    的头像 发表于 11-23 14:36 521次阅读
    可录音<b class='flag-5'>语音</b>芯片IC的工作原理及应用场景介绍

    MP3播放详细设计方案

    简介:开发工具:keil7 主要IC:at89c51sdnd1(atmel) 说明:mp3播放详细设计方案,包括电路原理图,物料,源码,开发文档,芯片datasheet等。 用途:单芯片mp3的设计实现
    发表于 11-15 14:36 6次下载
    MP3<b class='flag-5'>播放</b>器<b class='flag-5'>详细</b>设计方案

    arduino能用pwm播放音乐吗?

    arduino能用pwm播放音乐吗,歌曲通过外部的flash存储
    发表于 11-08 08:19

    如何使用51单片机播放语音文件?

    如何使用51单片机播放语音文件。出了扬声器,功率放大器,还需要什么硬件吗
    发表于 10-31 06:53

    KT148A语音芯片的组合播放详细说明 包含语音制作 压缩 下载 播放

    KT148A语音芯片的组合播放详细说明 ,包含:语音制作 、压缩、下载、播放 这里总共的步骤大概分为5步,其实也很简单 组合
    的头像 发表于 10-13 11:17 539次阅读
    KT148A<b class='flag-5'>语音</b>芯片的组合<b class='flag-5'>播放</b><b class='flag-5'>详细</b>说明 包含<b class='flag-5'>语音</b>制作 压缩 下载 <b class='flag-5'>播放</b>

    stm32录制一段语音到sdram,如何实现变调不变速播放

    stm32录制一段语音到sdram,然后用什么算法将语音变调不变速播放,比如升调播放
    发表于 09-25 06:40

    关于PWM脉冲宽度调制,你懂多少?

    其实关于PWM脉冲宽度调制讲的最详细的应该在电力电子里面,然而平时用的最多的就是在一些的程序控制里面。
    的头像 发表于 07-19 16:49 1896次阅读
    <b class='flag-5'>关于</b><b class='flag-5'>PWM</b>脉冲宽度调制,你懂多少?