产品概述

单片机 采集 语音 单片机语音播报怎么做?语音模块原理及程序编写思路

小编 2025-07-02 产品概述 23 0

单片机语音播报怎么做?语音模块原理及程序编写思路

我最欢就是做带语音播报的产品,写程序的过程太枯燥了。

有些产品一开发就是几个月,整个过程都跟冷冰冰的LED、蜂鸣器、按键、LCD屏打交道难免有些寂寞。

加上语音就不同了,录制好一个好听的妹子声音,不但可以提升整个产品的逼格,自己也满满的成就感。

今天就来聊聊带语音的产品怎么做。

实际产品中,用单片机播放语音方案有很多种,唯一没有开发板那种,因为成本各方面都不满足产品需求。

另外就是加一个语音芯片,如果利润高的产品会优先使用这种,一个几块钱还能接受。

还有就做软解码的,就是把语音文件解码成喇叭能够识别的PWM和DAC数据,这种技术难度最大,对工程师编程水平是一个考验。

虽然难度大,但是成本低,不需要额外增加语音芯片,老板的最爱,反正工程师掉点头发对公司又没影响。

软解码大概在6,7年前做电子狗的时候玩过一次,大概原理就是把语音文件合并成bin文件,烧录到外置的flash里面,做好每条语音的地址映射。

用单片机读取Flash的数据并解码,然后转换成PWM或者DAC经过功放输出到喇叭。

这种一般要有个写上位机的配合,以前市面上没有在把语音文件合并成bin文件的工具,现在好像有了。

时间相隔太久,很多细节记不清楚了,后续如果还能找到资料再跟大家分享。

今天无际单片机编程给大家讲后面我做过的一种方法:用语音芯片

这是语音芯片的一些介绍:

我们需要关注的就是,这个芯片对语音长度的支持分别有55s、25s、85s,如果产品语音少还是挺合适的。

这种芯片如果语音少的直接用芯片内部的Flash,如果语音多了就需要外挂一个Flash来存储语音数据。

一般每个产品的语音都是不一样的,那怎么把我们想要的语音通过这个语音芯片播放出来呢?

想实现这个功能要经过以下几个步骤:

通过软件把语音文案转成mp3格式语音文件,类似的软件有很多,比如说科大讯飞。把语音文件提供给芯片方,让他们帮你定制。拿到样品后就是焊接到自己板子上,然后根据芯片规格书写控制时序程序,每条语音都对应了一个地址,只要把地址数据写入芯片,芯片就会自动播放指定语音。

整个过程是不是非常简单?

除了播放语音功能以外,还有一些附加功能,比如说静音,音量调节、循环播放等等。

下面来看下芯片的引脚定义

一般使用3根线来跟单片机通讯。

PA0/SDA: 数据线

PA1/SCL: 时钟线

PA2: 忙碌线,当有语音播报的时候,该引脚为低电平。

芯片的控制时序如下:

不难发现,数据开始之前SCL需要先产生5ms的低电平同步头,然后数据在SCL线的上升沿被读取,一共读取8位,也就是1个字节。

如果你不会写这个时序也没关系,芯片原厂都有提供例程。

单片机音频信号采集电路

音频话筒有两种:

一、动圈式话筒,他是利用电池感应现象制成的,当声波使膜片振动时连在膜片的线圈随着以前振动,音圈在磁场里振动产生感应电流,感应电流的大小和方向都是变化的,变化的振幅和频率由声波决定。如图所示

动圈式话筒

二、驻极体话筒,话筒由单面涂有金属的驻极体薄膜与一个上面有若干个小孔的金属电极构成。驻极体面与背电极相对中间有一个极极小的空气间隙两电极构成平板电容。如图所示

驻极体话筒

所以如果所用的话筒型号不一样电路也会不一样。也就是动圈式要并联一个电阻使线圈有电流回路,驻极体要有电源也就是要串联一个分压电阻。

原理图分析:如图所示

单片机音频信号采集电路

运用常见的运放LM358,两路运放都有2.5V的偏置电压,利用电容隔直流通交流。然后两路反向放大电路进行信号放大最后信号方向不变,然后用电位器进行型号调节,防止信号过大信号饱和,但然如果信号振幅落差比较大,又要自动调节增益,那就得用到模拟开光进行档位原则,这里就不做介绍了。还有电路上有滤出高频信号的电容。接到单片机电源是3.3V

所以也可以接ESD防止单片机引脚击穿。如图所示。

相关问答

怎么用 单片机 提取 语音 特征参数?

单片机提取语音特征参数的过程通常包括预处理、分帧、加窗、傅里叶变换和Mel滤波器组。预处理阶段消除语音信号中的环境噪声和非语音信号。分帧将语音信号按...

有没有一种 单片机 模块可以 采集 外界声音的频率并将其输入 单片机 ?

如果只是采集原始的声音信号,驻极话筒放大后经AD采样就能交付给单片机。如果要进行频谱分析的话,那么显然是DSP的份内工作。如果只是采集原始的声音信号,驻极...

怎么让 单片机 识别一种特定的声波比如拍手的声音?

这样的声音识别设备市场上有卖的,自己做一个花费就太高了。那得专业的工程师才能完成。市场上应该有这样的产品,把你要激活设备的声音录制下来,然后声音识别...

单片机 C 语音 控制步进电机正反转程序?

只要控制在四相绕组上输入脉冲的顺序,就可以控制电机的正转/反转。(控制延时就能控制转速。)步进电机正反转控制方式:步进电机有四相绕组A、B、C、D,当一绕...

我现在想用电脑往51 单片机 里写进去一个代码,让他通过 语音 模块把写进去的内容读出来?

想用电脑往51单片机里写进去一个代码,让单片机通过语音模块把写进去的内容读出来。这涉及两个问题:1、数据提取和通信传输数据与存储数据。你把“欢迎使用”...

怎么用c语言编写,使蜂鸣器发出不同频率的声音(51 单片机 )?

用定时器来产生频率,如产生100Hz的声音。思路:100Hz即每秒变换200次,每次的时间就是1/200秒=0.005秒=5毫秒。计算定时器的初值:TH0=0x0EE;TL0=0x00...

51 单片机 控制蜂鸣器发出911声音c程序如下,求老师详细讲解,...

[最佳回答]什么叫911声音??不明白看程序应该是发出的声音频率越来越高,然后突然降低,再越来越高,如此循环main(){TMOD=0x01;//设定时方式1,16位定时器frq...

单片机 可以通过电流改变来控制发出的声音吗,我想通过电流的变化来播放不同的音乐,求大神帮忙?

单片机是不能改变电流大小,只能输出2种状态,想播放音乐可以用单片机做pwm控制就行或者用数模芯片转换都一个原理,单片机播放音乐是行的,但是不能控制电流大小...

单片机 蜂鸣器除了那种调的声音,还能发出人说话的声音吗?

单片机蜂鸣器一般用于发出简单的音调和警报声,不能直接用于模拟人的语音。然而,通过与单片机的组合使用,可以实现类似人说话的声音。具体实现方法是,在单片...

su03t 语音 怎么和arduino 单片机 相连的?

要将SU03T语音模块与Arduino单片机相连,可以按照以下步骤进行操作:1.首先,将Arduino与SU03T模块连接的串行通信引脚匹配好。通常,Arduino的RX引脚连接到SU0...

猜你喜欢