文章目录
- 一、前言
- 二、硬件
- 1.原理图
- 1.1 对外引脚说明
- 1.2 电源供电参考电路
- 1.3 复位电路和状态指示电路
- 1.4 扬声器输出
- 1.5 外接高速晶振
- 三、软件
- 1.系统构成框图
- 2.通讯方式:异步串行通讯(UART)接口
- 3.芯片回传
- 4. 通信帧定义及通信控制
- 4.1 命令帧格式
- 4.2 芯片支持的控制命令
- 4.3 文本控制标记列表
- 标记[v?] --前景播放音量
- 标记[m?]–背景音乐音量
- 标记[t?] —词语语速
- 5. 提示音效
- 6. 示例代码
- 四、总结
一、前言
最近复刻一个桌面宠物-小呆项目用到了SYN6288语音合成模块,简单的分享下使用。
SYN6288是一款高性价的语音合成模块,使用串口通信方式,发送简单的指令 即可实现文本到语音的转换,同时支持中文、英文(按字母朗读)、数字的朗读, 每次合成的文本量最多可达 250 字节,可同时进行文本解析和语音播放,实现连续无间隔的语音合成。内置音频功放,可直接驱动 0.5W 8R 或者 3W 4R 的喇叭。
二、硬件
1.原理图
接口简单:模块内置了DAC接口,可以直接连接扬声器输出语音。
1.1 对外引脚说明
以下是对外连接的引脚说明:
供电引脚:GND和3.3V/5V引脚
通信引脚:TX与RX,注意交叉接线
喇叭引脚:SP+和SP-(不分正负极)
BUSY引脚:忙引脚,播放时为高,空闲为低
1.2 电源供电参考电路
电源供电参考电路如下:
- SYN6288E共有6组外接电源,每组电源均使用一个47uF和一个0.1uF的电容;如果用户想节省成本,用户可以在每组电源上均使用0.1uF的电容,并对VDDPP、和VDDA两组电源,各加上一47uF的电容。
- 外接电源为使用3节电池,或VDD = 3.3V~~4.2V
- 电压自动调节输出REGOUT的使用说明
SYN6288E为CVDD处理器电源模块提供一个电压自动调节输出REGOUT—亦即线性稳压器,这个线性稳压器输出电压设计为:2.8V±0.2V。其特征是:
输入外部供应电压:VDD
输出电流:20mA
输出电压:2.6V~~3.0V - 鉴于市面上流通的电源品质差异,建议用户不要采用临界极限值的电压,如:5.0V供电;建议外接电源VDD取值范围3.3V~~4.2V,不要高于4.5V或低于3.0V。
1.3 复位电路和状态指示电路
Ready/Busy 此 STATUS 引脚信号为低电平时说明芯片正在等待接收数据。在系统设计时可以将此引脚接在MCU的中断输入源上,产生一个下降沿中断请求发送数据,以示上位机MCU可以向语音合成芯片发送数据。
1.4 扬声器输出
为了在用户应用中输出声音, SYN6288E 内置了推挽式(Push-Pull)的 DAC ,可直接驱动喇叭,进行声音播报。并且SYN6288E内置的DAC电路模块,使用了VDDPP/VSSPP供电电源模块,具体电路说明部分请参见(10.1)和(10.2)节,其供电电压值可独立于其它电源组的供电。
如需外接功放芯片,可以参考推荐功放参考电路
功放的供电:VDD对地应当加一个大电容,一般以470uF为宜
PCB布线:音频的输入端和输出端严格按差分布线原则布线
下面简单列举个D类3W功放
1.5 外接高速晶振
三、软件
1.系统构成框图
最小系统包括:控制器模块、SYN6288E语音合成芯片、功放模块和喇叭。
主控制器和SYN6288E语音合成芯片之间通过UART 接口连接,控制器可通过通讯接口向SYN6288E语音合成芯片发送控制命令和文本,SYN6288E语音合成芯片把接收到的文本合成为语音信号输出,输出的信号经功率放大器进行放大后连接到喇叭进行播放。
2.通讯方式:异步串行通讯(UART)接口
芯片支持的通讯波特率:9600bps,19200bps、38400bps 。
设置波特率说明:默认初始波特率为9600bps;上位机若需改变波特率,在发送完设置波特率命令帧后需间隔16毫秒再发送其它命令帧。若要改波特率,每次系统重置时都得重发改波特率的命令帧。发送完改波特率命令帧后,要暂停几百毫秒,再改主机的波特率。9600bps,19200bps两种波特率通讯传输都非常稳定(不管芯片在合成播音还是空闲)因系统时间片与传输时间片接近的原因:38400bps波特率通讯传输芯片空闲空闲时非常稳定;但在芯片合成播音时上位机再次发送数据时不是很稳定,接收成功和接收失败的概率各为50%左右。
SYN6288E提供一组全双工的异步串行通讯(UART)接口,实现与微处理器或PC的数据传输。
SYN6288E利用TxD和RxD以及GND实现串口通信。其中GND作为地信号。SYN6288E芯片支持UART 接口通讯方式,通过UART 接口接收上位机发送的命令和数据,允许发送数据的最大长度为206 字节。
3.芯片回传
接收到控制命令帧,芯片会向上位机发送1 个字节的状态回传,上位机可根据这个回传来判断芯片目前的工作状态。
SYN6288E 芯片在初始化成功时会发送一个字节的“初始化成功”回传。
SYN6288E 芯片收到命令帧后会判断此命令帧正确与否,如果命令帧正确返回“接收成功”回传,如果命令帧错误则返回“接收失败” 回传。
SYN6288E 芯片收到状态查询命令时,如果芯片正处于播音的工作状态则返回“正在播音”回传,如果芯片处于空闲状态则返回“芯片空闲”回传。在一帧数据合成完毕后,芯片会自动返回一次“芯片空闲”的回传。
4. 通信帧定义及通信控制
4.1 命令帧格式
芯片支持以下命令帧格式:“帧头FD + 数据区长度+数据区”格式。(最大206个字节)
上位机发送给 SYN6288E 芯片的所有命令和数据都需要用“帧”的方式进行封装后传输。
注意:数据区(含命令字,命令参数,待发送文本,异或校验)的实际长度必须与帧头后定义的数据区长度严格一致,否则芯片会报接收失败。
4.2 芯片支持的控制命令
这里只简单介绍控制命令,需要更详细的介绍可以去看宇音天下文档中心-SYN6288E中文语音合成芯片_用户手册
命令帧相关的特殊说明:
- 休眠与唤醒说明:芯片不会主动休眠,只有接收到上位机发送的休眠命令帧后才会休眠。芯片进入休眠之后,上位机首先需要唤醒芯片,然后再向芯片发送命令帧数据;(注意:唤醒后需间隔16毫秒再发送命令数据)。休眠被若唤醒后(例如硬件唤醒或软件唤醒),10秒钟(待机时间)内未接收到上位机发送的有效命令帧数据(语音合成播放命令,设置波特率命令,停止合成命令,暂停合成命令,恢复合成命令,状态查询命令),则芯片会重新进入休眠(会认为是干扰唤醒不去理睬)。(注意:芯片只有在已经进入休眠之后,才会有10秒钟唤醒待机再次休眠)。
- 同一帧数据中,每个字节之间的发送间隔不能超过8ms; 帧与帧之间的发送间隔必须超过8ms。
- 当 SYN6288E 芯片正在合成文本的时候,如果又接收到一帧有效的合成命令帧,芯片会立即停止当前正在合成的文本,转而合成新收到的文本。
- 待发送文本长度必须小于等于200个字节。实际发送的长度大于200字节,芯片会报接收失败。
- 用户在连续播放文本内容时,在收到前一帧数据播放完毕的“芯片空闲”字节(即0x4F)后,最好延时1ms左右再发送下一帧数据。
- 用户在连续播放文本内容时(即播完前一帧数据就马上发送播放下一帧数据),建议用户在逗号,句号,问号,感叹号,分号等标点符号处进行数据分帧。因数据传输需要时间,在标点符号处分帧,连贯性更好,且可避免词组被硬性切断的现象(例如“银行”一词,“银”在前一帧数据,“行”在后一帧数据)。
4.3 文本控制标记列表
这里只简单介绍常用的3个,需要更详细的介绍可以去看宇音天下文档中心-SYN6288E中文语音合成芯片_用户手册
标记[v?] --前景播放音量
标记[m?]–背景音乐音量
标记[t?] —词语语速
注意:
- 所有的控制标识均为半角字符。
- 控制标识需要按照语音合成命令的格式发送,特殊控制标记作为文本进行合成,即合成命令是“帧头 + 数据区长度+ 合成命令字 + 文本编码格式 + 特殊控制标记文本”的格式。
- 控制标识为全局控制标识,也就是只要用了一次,在不对芯片复位或者断电的条件下,其后发送给芯片的所有文本都会处于它的控制之下,除非用相应的[d]恢复默认设置。
- 当芯片掉电或是复位后,芯片将恢复到所有的默认值,原来的设置过的标识失去了作用,需要重新设置。
- 不符合以上可识别的“控制标识”的或者格式不对的,一律按普通的字符和数字处理
简单示例:
-
单独作为一帧数据发送,此时对下一帧开始的数据发生作用 – 适合单独改变
第1帧: [v5] 解释:设置前景音量为5级
第1帧: 欢迎光临 解释:按5级前景音量播放“欢迎光临” -
和其它控制标记一起作为一帧数据发送,此时对下一帧开始的数据发生作用。注意:在后的控制标记的优先权高于在先的控制标记 – 适合上位机初始化调用
第1帧: [d][v5][m2][o0] 解释:先恢复默认全局变量,再设置前景音量为5级,背景音量为2级,按自然方式朗读
第2帧: 欢迎光临 解释:按5级前景音量2级背景音量播放“欢迎光临” -
放在播放文本的开头和播放文本一起发送,此时对本帧开始的数据发生作用。-- 适合和播放文本一起发送和改变
第1帧: [v6][m2]欢迎使用语音合成芯片 解释:从本帧数据开始按6级前景音量2级背景音量播放:即按6级前景音量2级背景音量播放“欢迎使用语音合成芯片”。
5. 提示音效
芯片中提供了 25 段的声音提示音以及 23 段和弦音乐作为提示音,可以依据使用场合选用作为信息提示音。这里不一一介绍,感兴趣可以自己去看宇音天下文档中心-SYN6288E中文语音合成芯片_用户手册
6. 示例代码
#include "syn6288.h"
#include "usart2.h"
#include "string.h"
#include "delay.h"
//***语音合成***//
//Music:选择背景音乐。0:无背景音乐,1~15:选择背景音乐
void SYN_FrameInfo(u8 Music, u8 *HZdata)
{
/****************需要发送的文本**********************************/
unsigned char Frame_Info[50];
unsigned char HZ_Length;
unsigned char ecc = 0; //定义校验字节
unsigned int i = 0;
HZ_Length = strlen((char*)HZdata); //需要发送文本的长度
/*****************帧固定配置信息**************************************/
Frame_Info[0] = 0xFD ; //构造帧头FD
Frame_Info[1] = 0x00 ; //构造数据区长度的高字节
Frame_Info[2] = HZ_Length + 3; //构造数据区长度的低字节
Frame_Info[3] = 0x01 ; //构造命令字:合成播放命令
Frame_Info[4] = 0x01 | Music << 4 ; //构造命令参数:背景音乐设定
/*******************校验码计算***************************************/
for(i = 0; i < 5; i++) //依次发送构造好的5个帧头字节
{
ecc = ecc ^ (Frame_Info[i]); //对发送的字节进行异或校验
}
for(i = 0; i < HZ_Length; i++) //依次发送待合成的文本数据
{
ecc = ecc ^ (HZdata[i]); //对发送的字节进行异或校验
}
/*******************发送帧信息***************************************/
memcpy(&Frame_Info[5], HZdata, HZ_Length);
Frame_Info[5 + HZ_Length] = ecc;
USART2_SendString(Frame_Info, 5 + HZ_Length + 1);
}
/***********************************************************
* 名 称: YS_SYN_Set(u8 *Info_data)
* 功 能: 主函数 程序入口
* 入口参数: *Info_data:固定的配置信息变量
* 出口参数:
* 说 明:本函数用于配置,停止合成、暂停合成等设置 ,默认波特率9600bps。
* 调用方法:通过调用已经定义的相关数组进行配置。
**********************************************************/
void YS_SYN_Set(u8 *Info_data)
{
u8 Com_Len;
Com_Len = strlen((char*)Info_data);
USART2_SendString(Info_data, Com_Len);
}
/**************语音合成芯片设置命令*********************/
//选择背景音乐2。(0:无背景音乐 1-15:背景音乐可选)
//m[0~16]:0背景音乐为静音,16背景音乐音量最大
//v[0~16]:0朗读音量为静音,16朗读音量最大
//t[0~5]:0朗读语速最慢,5朗读语速最快
SYN_FrameInfo(0, (uint8_t *)"[v12][m0][t5]欢迎光临");Delay_s(1);//唤醒后欢迎光临,音量12适合演示,10适合调试
四、总结
今天主要讲了SYN6288语音合成模块的简单应用,感兴趣的可以自行下载资源。
感谢你的观看!