产品选型

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

小编 2024-11-24 产品选型 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个字节。

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

初学单片机,听见说话不见人,设计电路存语音

语音芯片大家都不陌生,最早的像门铃,生日快乐歌等等,虽然它的设计原理我们不清楚,但是我们能够自己设计自己的语音内容。

昨天我们介绍了如何把一段语音文件转换成单片机编程用的头文件,今天我们就用它来设计一个简单的语言播放小板,也就是“单片机说人话”。我们可以用它来做很多事情,而且成本非常低廉。

谁在说话?——正文配图

前面我们制作“电子琴”的时候做了一个小板,今天我们把它稍微改一下,用来播放语音。

改动三个地方:

把原来的三极管基极断开;

对地加一只0.1uF的电容,接到原来连接三极管的电阻上;

在电容两端接上插座,或者直接引线出来,接耳机,或者小功放输入端。

如下图所示:

“电子琴”电路改装图

电路改好后,需要编写程序。

前面我们说过,wav文件记录的两个重要内容,一是采样率,我们选的8000Hz;二是电平值,我们已经制作成表格文件;

那么下来,我们主要是按照一定的时间还原这些电平。

最方便的方式无疑是PWM方式输出波形。由于时间有限,关于PWM的原理今天我们不去讨论,况且相关资料也是非常多。今天我们直接给大家介绍程序的编写。

前面我们制作的板子采用的是STC15W408AS芯片,因为想利用焊接好的端口(P2.6),不想过多改动,那么先看器件手册关于端口的设置:

器件手册局部截图

运气还好,刚好可以设置为P2.6端口输出,需要用到CPP1_3。

增加0.1uF电容是为了把PWM输出的高频脉冲滤波,平滑波形。为什么不用无源蜂鸣器呢?因为蜂鸣器声音频域太窄,影响音质,我们既然播放语音,就要音质好一些,所以建议用耳机或小功放还原声音。(注:蜂鸣器也可以清楚的辨析语音内容。)

c51源代码:

由于编译好的代码较大(语音表格原因),头条平台不方便下载,所以需要自己建立工程,新建c文件和昨天介绍的头文件。

注意事项:

下载时选择内部时钟为12.288MHz;

h文件也要添加到工程;

制作的音频文件不要大与芯片容量;

制作中单片机的分频设置不正常(当然没有影响到正常使用),如果您采用别的系列试验,欢迎反馈设置情况。

下面是c51程序(如果需要,可以自己添加按键控制):

《单片机说话》c51源程序截图

下面是头文件(制作方法请参考前面文章):

《单片机说话》c51头文件源程序截图

制作完成后,用耳机听音质满意,用功放播放低音较重,下面是小功放播放录音:

补充说明:

如果只是简单试试,可以不断开三极管,用蜂鸣器,但对地电容一定要加;

采样率也可以用6000Hz甚至更低,文件会更小,但高音会降低;

录音是放了两遍,实际只有三个字:“春天说”;

以上就是单片机内置语音的一种实际操作方法。

今天我们介绍了自制单片机语音电路的编程实例,如果您感兴趣,可以添加头条号/春天说,查看前面的系列文章,同时欢迎参与评论留言,交流不同的想法和思路,如果喜欢,也欢迎分享给更多朋友。。。

相关问答

STC 单片机 如何采集音频信号?

STC单片机可以通过外接音频模块或者内置的ADC(模数转换器)来实现音频信号的采集。外接音频模块可以将音频信号转换为数字信号输入到单片机中,而内置ADC则可以...

怎样编写 单片机 STC11语音控制程序?

7、语音模板库语音模板库的主要功能是存储训练后的最佳标准语音特征矢量。由于STC单片机速度慢!语音识别算法复杂!语音采集电路复杂!等综合因数考虑下单片...

单片机 控制扬声器演奏音阶的原理是什么?

正好今天给在微头条里的朋友们分享了一个用单片机实现模拟电子琴的小制作,在这个小制作里除了给大家介绍了“mini”模拟电子琴所需的硬件外,还主要介绍了用单片...

wt588d语音模块与 单片机 连接讲解?

语音模块只能被单片机控制,哪里有程序?一般把语音模块的控制线连接到单片机的IO口就可以控制语音模块语音模块只能被单片机控制,哪里有程序?一般把语音模...

如何搭建一个音频电路,然后将模拟量传输给 单片机 采集?

设计一个音频输入电路,我们的知道音频信号是怎么产生的。音频话筒有两种:一、动圈式话筒,他是利用电池感应现象制成的,当声波使膜片振动时连在膜片的线圈随...

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

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

无线遥控广播系统中的具体应用,介绍一种适合 单片机 系统的...

[最佳回答]1st,elaboratesthedoubleaudiofrequencycorrespondencebasicprincipleofwork;UnifiesintheFMw...

LD3320語音识别模块怎么与51 单片机 相连? 求引脚接法-ZOL问答

LD3320語音识别模块怎么与51单片机相连?求引脚接法举报2人讨论7556次围观关注问题写回答讨论回答(2)918281588CHT源程序里就有引脚设置有用(0)回复z...

检测到的音频AD值用什么编码方式传到一条线上?我现在做一个这...

[回答]就是用一条线,两个双向开关的输出端接在这条线上,输入端分别接单片机引脚和音频输出,单片机的通讯直接用高低电平的时间差判别,当音频通讯就关单片...

51 单片机 能识别和执行的语言是?

C语音是最最最常用的,也是最简单的C语音是最最最常用的,也是最简单的

猜你喜欢