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

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

3天内不再提示

如何使用PWM完成语音播放?

GReq_mcu168 来源:ARM中文社区 作者:Xiaoya 2021-04-25 16:59 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

以一定的速度采样(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数据更新。

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

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

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

将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

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

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

二、播放语音

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

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

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

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

接下来处理音频:

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

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

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

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

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

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

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

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

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

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

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

为了方便阅读,附件中包含了此文的PDF文档,Source Code也在附件中,可以直接下载到Nucleo运行。

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

文章出处:【微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

    关注

    147

    文章

    19107

    浏览量

    403205
  • PWM
    PWM
    +关注

    关注

    116

    文章

    5889

    浏览量

    226493
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    广州唯创电子有哪些语音芯片支持白噪音播放功能?应用领域全解析

    在智能家居、健康电子和车载设备快速发展的今天,白噪音播放功能逐渐成为提升用户体验的重要一环。作为专业的语音芯片提供商,广州唯创电子有限公司凭借多年技术积累,推出了多款支持白噪音播放语音
    的头像 发表于 03-26 09:00 117次阅读
    广州唯创电子有哪些<b class='flag-5'>语音</b>芯片支持白噪音<b class='flag-5'>播放</b>功能?应用领域全解析

    WT2605C语音芯片如何以无缝循环播放功能解锁产品设计新维度?

    在智能硬件与消费电子深度融合的今天,音频交互已成为提升产品体验的关键一环。而在众多音频功能中,无缝循环播放凭借其“零间隙、无停顿”的独特优势,正悄然成为高端产品设计的“隐形标配”。作为深耕语音芯片
    的头像 发表于 03-24 08:21 181次阅读
    WT2605C<b class='flag-5'>语音</b>芯片如何以无缝循环<b class='flag-5'>播放</b>功能解锁产品设计新维度?

    WTN6170-8S语音芯片:如何凭SOP8封装与170秒长时播放重塑产品设计?

    的WTN6170-8SOTP语音芯片,以极具突破性的SOP8超小封装和长达170秒的语音播放能力,为市场带来了新的解决方案。这款微型声音播放IC究竟如何突破物理限制,成为众多创新应
    的头像 发表于 01-26 08:29 515次阅读
    WTN6170-8S<b class='flag-5'>语音</b>芯片:如何凭SOP8封装与170秒长时<b class='flag-5'>播放</b>重塑产品设计?

    WT2606B屏幕驱动芯片集成语音播报和蓝牙功能在教具上的应用方案

    WT2606B屏幕驱动芯片集成语音播报和蓝牙功能在教具上的应用方案 在正式介绍WT2606B之前,我们不妨先想想:什么样的教具才算真正"智能"?是能显示内容就够了吗?显然不是。真正的智能教具,应该像
    的头像 发表于 01-21 15:50 339次阅读
    WT2606B屏幕驱动芯片集<b class='flag-5'>成语音</b>播报和蓝牙功能在教具上的应用方案

    语音识别IC分类,语音识别芯片的工作原理

    语音识别芯片,也叫语音识别集成电路,是一种集声音存储、播放、录音及语音识别功能于一体的专用芯片。语音识别IC的核心功能在于实现
    的头像 发表于 01-14 15:22 371次阅读
    <b class='flag-5'>语音</b>识别IC分类,<b class='flag-5'>语音</b>识别芯片的工作原理

    如何让智能终端既会“说话”又能“感知”?揭秘唯创WTV380/890高集成语音芯片

    、协同困难。针对这一痛点,广州唯创电子作为专业的语音IC厂家,推出了其旗舰级解决方案——WTV380/890高品质语音芯片。这款芯片不仅是一颗性能卓越的音频播放
    的头像 发表于 01-12 08:56 345次阅读
    如何让智能终端既会“说话”又能“感知”?揭秘唯创WTV380/890高集<b class='flag-5'>成语音</b>芯片

    如何用一颗芯片搞定语音、显示与传感?解码唯创高集成语音IC方案

    电子近期推出的高集成度语音芯片方案,正试图打破这一僵局。它将音频播放芯片的核心功能与数码管驱动、LED扫描、压力及温度传感算法融为一体,实现“单芯片拓展”。这仅仅
    的头像 发表于 01-09 09:13 268次阅读
    如何用一颗芯片搞定<b class='flag-5'>语音</b>、显示与传感?解码唯创高集<b class='flag-5'>成语音</b>IC方案

    安全可靠且有助于节省实装面积的音频输出解决方案~ NA1150用于MCU音频播放系统的PWM输入音频放大器

    NA1150 是一款音频开关驱动器 IC,可作为PWM 输入音频放大器使用,用于从MCU输出语音和音效的音频播放系统。该IC与CRI Middleware Co., Ltd.(以下简称“CRI
    的头像 发表于 12-30 14:01 419次阅读
    安全可靠且有助于节省实装面积的音频输出解决方案~ NA1150用于MCU音频<b class='flag-5'>播放</b>系统的<b class='flag-5'>PWM</b>输入音频放大器

    语音识别芯片有哪些(语音识别芯片AT680系列)

    在人工智能技术飞速发展的今天,语音识别芯片作为人机交互的重要桥梁,正逐渐成为各类智能设备不可或缺的核心部件。与传统的语音芯片不同,语音识别芯片不仅能存储和播放声音,更能真正实现对人声的
    的头像 发表于 11-14 17:11 1510次阅读

    什么是离线语音识别芯片(离线语音识别芯片有哪些优点)

    离线语音识别芯片,是一种集成了语音信号采集、前端处理和本地识别功能的专用集成电路,无须联网也可以进行语音控制。它内设先进的数字信号处理模块及人工智能语音算法,无须依赖云端服务器,就能在
    的头像 发表于 10-31 15:27 653次阅读

    语音报警器:TTS语音播报,云平台逻辑自控

    TTS语音播报报警器是一种集成了传统报警器和TTS(文本转语音)技术的智能设备。清晰、准确地用人类语言播报报警原因、位置、状态等具体信息。 工作原理 文本语音:输入文字自动合成语音,支
    的头像 发表于 10-29 16:31 945次阅读

    赋能智能语音交互:广州唯创电子WTV系列语音芯片IC引领播放与报警设备新变革

    在万物互联与智能化浪潮的推动下,语音交互已成为人机沟通最自然、最直接的桥梁。语音播放器与报警器作为这一技术的关键载体,正广泛应用于公共安全、智能家居、工业控制及交通管理等领域。然而,传统的语音
    的头像 发表于 09-01 09:30 752次阅读
    赋能智能<b class='flag-5'>语音</b>交互:广州唯创电子WTV系列<b class='flag-5'>语音</b>芯片IC引领<b class='flag-5'>播放</b>与报警设备新变革

    推进一款实用型的OTP语音芯片

    的操作引导和状态提示,帮助用户更高效、轻松地完成存件与取件,大幅优化使用体验。这一功能不仅加快了取件流程,也方便了视障人士或手部操作不便的用户群体。YCV系列语音芯片运行稳定,适合长时间工作,还能
    发表于 08-26 11:32

    TTS文字合成语音芯片的使用场景

    TTS文字合成语音播报芯片的使用场景非常广泛,可以适用于各行各业,主要应用于复杂的语音播报场景,下面小编带大家一起来了解一下。 传统的语音播报芯片,主要是先把语音存入FLASH当中,然
    的头像 发表于 08-22 17:11 1145次阅读

    芯知识|广州唯创电子WT2003H语音芯片连码播放功能解析与应用指南

    一、连码播放功能的核心价值连码播放(组合播放)是语音芯片将多段独立语音片段无缝拼接为连续语句的技术。广州唯创电子WT2003H系列通过高性能
    的头像 发表于 06-27 09:19 1177次阅读
    芯知识|广州唯创电子WT2003H<b class='flag-5'>语音</b>芯片连码<b class='flag-5'>播放</b>功能解析与应用指南