当前位置: 首页 > article >正文

SYN6288语音合成模块的简单应用

文章目录

  • 一、前言
  • 二、硬件
    • 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 电源供电参考电路

电源供电参考电路如下:

在这里插入图片描述

  1. SYN6288E共有6组外接电源,每组电源均使用一个47uF和一个0.1uF的电容;如果用户想节省成本,用户可以在每组电源上均使用0.1uF的电容,并对VDDPP、和VDDA两组电源,各加上一47uF的电容。
  2. 外接电源为使用3节电池,或VDD = 3.3V~~4.2V
  3. 电压自动调节输出REGOUT的使用说明
    SYN6288E为CVDD处理器电源模块提供一个电压自动调节输出REGOUT—亦即线性稳压器,这个线性稳压器输出电压设计为:2.8V±0.2V。其特征是:
    输入外部供应电压:VDD
    输出电流:20mA
    输出电压:2.6V~~3.0V
  4. 鉴于市面上流通的电源品质差异,建议用户不要采用临界极限值的电压,如: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中文语音合成芯片_用户手册

在这里插入图片描述
命令帧相关的特殊说明:

  1. 休眠与唤醒说明:芯片不会主动休眠,只有接收到上位机发送的休眠命令帧后才会休眠。芯片进入休眠之后,上位机首先需要唤醒芯片,然后再向芯片发送命令帧数据;(注意:唤醒后需间隔16毫秒再发送命令数据)。休眠被若唤醒后(例如硬件唤醒或软件唤醒),10秒钟(待机时间)内未接收到上位机发送的有效命令帧数据(语音合成播放命令,设置波特率命令,停止合成命令,暂停合成命令,恢复合成命令,状态查询命令),则芯片会重新进入休眠(会认为是干扰唤醒不去理睬)。(注意:芯片只有在已经进入休眠之后,才会有10秒钟唤醒待机再次休眠)。
  2. 同一帧数据中,每个字节之间的发送间隔不能超过8ms; 帧与帧之间的发送间隔必须超过8ms。
  3. 当 SYN6288E 芯片正在合成文本的时候,如果又接收到一帧有效的合成命令帧,芯片会立即停止当前正在合成的文本,转而合成新收到的文本。
  4. 待发送文本长度必须小于等于200个字节。实际发送的长度大于200字节,芯片会报接收失败。
  5. 用户在连续播放文本内容时,在收到前一帧数据播放完毕的“芯片空闲”字节(即0x4F)后,最好延时1ms左右再发送下一帧数据。
  6. 用户在连续播放文本内容时(即播完前一帧数据就马上发送播放下一帧数据),建议用户在逗号,句号,问号,感叹号,分号等标点符号处进行数据分帧。因数据传输需要时间,在标点符号处分帧,连贯性更好,且可避免词组被硬性切断的现象(例如“银行”一词,“银”在前一帧数据,“行”在后一帧数据)。

4.3 文本控制标记列表

这里只简单介绍常用的3个,需要更详细的介绍可以去看宇音天下文档中心-SYN6288E中文语音合成芯片_用户手册

标记[v?] --前景播放音量

在这里插入图片描述

标记[m?]–背景音乐音量

在这里插入图片描述

标记[t?] —词语语速

在这里插入图片描述
注意:

  1. 所有的控制标识均为半角字符。
  2. 控制标识需要按照语音合成命令的格式发送,特殊控制标记作为文本进行合成,即合成命令是“帧头 + 数据区长度+ 合成命令字 + 文本编码格式 + 特殊控制标记文本”的格式。
  3. 控制标识为全局控制标识,也就是只要用了一次,在不对芯片复位或者断电的条件下,其后发送给芯片的所有文本都会处于它的控制之下,除非用相应的[d]恢复默认设置。
  4. 当芯片掉电或是复位后,芯片将恢复到所有的默认值,原来的设置过的标识失去了作用,需要重新设置。
  5. 不符合以上可识别的“控制标识”的或者格式不对的,一律按普通的字符和数字处理

简单示例:

  1. 单独作为一帧数据发送,此时对下一帧开始的数据发生作用 – 适合单独改变
    第1帧: [v5] 解释:设置前景音量为5级
    第1帧: 欢迎光临 解释:按5级前景音量播放“欢迎光临”

  2. 和其它控制标记一起作为一帧数据发送,此时对下一帧开始的数据发生作用。注意:在后的控制标记的优先权高于在先的控制标记 – 适合上位机初始化调用
    第1帧: [d][v5][m2][o0] 解释:先恢复默认全局变量,再设置前景音量为5级,背景音量为2级,按自然方式朗读
    第2帧: 欢迎光临 解释:按5级前景音量2级背景音量播放“欢迎光临”

  3. 放在播放文本的开头和播放文本一起发送,此时对本帧开始的数据发生作用。-- 适合和播放文本一起发送和改变
    第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语音合成模块的简单应用,感兴趣的可以自行下载资源。

感谢你的观看!

在这里插入图片描述


http://www.kler.cn/a/286551.html

相关文章:

  • jEasyUI 转换 HTML 表格为数据网格
  • QT设置应用程序图标
  • PPT自动化 python-pptx -7: 占位符(placeholder)
  • Java基于SSM框架的互助学习平台小程序【附源码、文档】
  • 基于PostgreSQL的自然语义解析电子病历编程实践与探索(上)
  • 有限元分析学习——Anasys Workbanch第一阶段笔记梳理
  • [M二叉树] lc235. 二叉搜索树的最近公共祖先(dfs+二叉搜索树)
  • 如何使用mcu 内置 flash 实现fatfs
  • 原来这就是 布隆过滤器
  • 【JS】async函数返回promise
  • VR虚拟驾驶未来发展_vr自动驾驶汽车所带来的改变
  • 一次bad udp checksum故障
  • 深度解析CancellationToken在HttpClient请求中的应用
  • 【Python】数据容器
  • 从文本坐标数据转换为矢量(点线面)
  • 微服务间调用
  • sqlserver数据库常见操作
  • 自闭症孩子的康复治疗方法
  • javaEE
  • ISIS路由渗透
  • MyBatis 源码解析:SqlSessionFactoryBuilder 解析与实现
  • LeetCode15. 三数之和(2024秋季每日一题 8)
  • Navicat连接Mongodb成功了,但是无法显示数据库怎么办?
  • 第三十九篇-TeslaP40+CosyVoice-安装
  • tornado获取请求参数
  • 2408wtl,玻璃类