产品概述

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

小编 2024-10-06 产品概述 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甚至更低,文件会更小,但高音会降低;

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

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

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

相关问答

单片机 语音识别算法代码?

单片机语音识别算法的代码相对复杂,需要使用适合的语音识别算法库和单片机开发工具。一个简单的示例代码如下:```c#include单片机语音识别算法的代码相对复杂...

单片机 控制語音芯片来播报, 单片机 如何通过程序调用語音芯片...

3条回答:请问是时钟芯片的型号是多少?这个要根据你读出的数据来进行判断,一般时钟芯片它都有专门的分针数据和时钟数据,只要读出来,再进行比较久可以了。。

单片机 如何控制喇叭发语音?

方法是单片机的IO口接蜂鸣器的负端,蜂鸣器的正端接电源Vcc,IO口输出低电平时蜂鸣器导通,输出高电平时蜂鸣器截止。是否发声要看所选蜂鸣器的类型。如果是无...

单片机 做一个音频放大电路,需要多少IO口?

单片机音频放大电路至少需要3个IO口,包括输入端口、输出端口和控制端口。输入端口用于接收音频信号,输出端口用于连接放大电路的输出端,控制端口用于控制放大...

怎么在 单片机 C51语言中使用AT指令?

并解析应答结果。2.将AT指令封装为一个函数后,就可以在C51程序中使用该函数了,根据...2.将AT指令封装为一个函数后,就可以在C51程序中使用该函数了,...

肿么使用 单片机 控制蜂鸣器发声-ZOL问答

两种蜂鸣器用单片机的控制方法是一样的,对于无源的,要求单片机送出一组断续的音频信号,使蜂鸣器按要求发声,对于有源蜂鸣器,要求单片机送出一组断续的电脉冲信号...

单片机 speaker是什么?

单片机speaker是一种用于输出声音的装置,它通常由一个电磁线圈和一个振动膜组成。当单片机通过控制电流流过电磁线圈时,线圈会产生磁场,进而使振动膜振动,从...

51 单片机 怎么与语音模块连接?

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

buzzer 单片机 介绍?

buzzer单片机蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声...

单片机 给蜂鸣器的是什么信号?

在单片机驱动蜂鸣器时,如果选用的是无源蜂鸣器,则单片机引脚输出的是方波脉冲频率,大约是1k赫兹左右,如果选用的是有源蜂鸣器,则单片机输出的信号是低电平。...

猜你喜欢