您好,欢迎来到小侦探旅游网。
搜索
您的当前位置:首页SYN6288语音播放模块

SYN6288语音播放模块

来源:小侦探旅游网


SYN6288语音播放模块制作

1、SYN6288语音芯片封装图:

2、通信方式:

2.1 异步串行通讯(UART)接口

SYN 6288 提供一组全双工的异步串行通讯(UART)接口,实现与微处理器或PC 的数据传输。SYN 6288利用TxD 和RxD 以及GND 实现串口通信。其中GND 作为地信号。SYN 6288 芯片支持UART 接口通讯方式,

通过UART 接口接收上位机发送的命令和数据,允许发送数据的最大长度为206 字节。

2.2 通讯传输字节格式

1、初始波特率:9600 bps

2、起始位: 1

3、数据位:8

4、校验位:无

5、停止位:1

6、流控制:无

与51单片机通

信时,可以用单片机的串行通信方式1。

3、硬件电路搭建:

3.1 外接电源组接法

备注:SYN 6288共有6组外接电源,每组电源均使用一个47uF和一个0.1uF的电容;如果用户想节省成本,用户可以在每组电源上均使用0.1uF的电容,并对VDDPP、和VDDA两组电源,各加上一47uF的电容。

3.2 复位电路及状态指示电路

备注:Ready/Busy 此STATUS引脚信号为低电平时说明芯片正在等待接收数据。在系统设计时可以将此引脚接

在MCU的中断输入源上,产生一个下降沿中断请求发送数据,以示上位机MCU可以向语音合成芯片发送数据。

3.3 SYN6288 的扬声器输出

(1) 为了在用户应用中输出声音, SYN6288 置了推挽

式(Push-Pull)的 DAC ,可直接驱动喇叭,进行

声音播报。并且SYN6288 置的DAC 电路模块,

使用了VDDPP/VSSPP 供电电源模块,具体电路说

明部分请参见(10.1)和(10.2)节,其供电电压值可独

立于其它电源组的供电。(见右图)

3.4 SYN6288 外接高速晶振

3.5 SYN6288 串口通信的参考电路

备注:上位机发送数据给SYN6288 时,中间须加有反向器。

在实际电路中,我们用三极管做了一个反向器,电路如下图:

该电路的原理是:MCU的TXD输出电平为0时,NPN三极管截止,RXD收到的电平为1。

MCU的TXD输出电平为1时,NPN三极管导通,RXD收到的电平为0。

3.6 Res 引脚(即第5 引脚)的接法

3.7 总体电路原理图:

4、程序的编写:

4.1 命令帧格式:

芯片支持以下命令帧格式:“帧头FD + 数据区长度+数据区”格式。(最大206个字节)

注意:数据区(含命令字,命令参数,待发送文本,异或校验)的实际长度必须与帧头后定义的数据区长度严格一致,否则芯片会报接收失败。

4.2 语音合成播放命令举例:

上位机发送给 SYN6288 芯片的所有命令和数据都需要用“帧”的方式进行封装后传输。

其它命令请自行参考SYN6288芯片手册:

.tts168..cn/SYN6288.aspx

4.3 文本程序发送:

中文系统电脑的文本编码格式一般为:ANSI即GB2312 编码体系,这个可以用二进制文本编辑器(如BinaryEditor)打开并对照GB2312编码表察看。

参考程序:

//speaker.c

#include

#include

#include

#include \"typedef.h\"

#include \"SPEAKER.h\"

void delayMs(uint16 xms){

uint16 i,j;

for (i=0;ifor (j=0;j<123;j++);

}

//语音模块初始化

void SpeakerInit(){

/**************串口的初始化*****************/

TL1=0XFA; //在11.0592MHZ下,设置波特率9600bps,工作方式2

TH1=0XFA;

TMOD=0X20;

SCON=0X50; //串口工作方式1,允许接收

PCON=0X80;

EA=0;

REN=1;

TI=0; //发生中断标志位置零

RI=0; //接收中断标志位置零

TR1=1; //定时器1用做波特率发生

}

//语音播报程序

uint8 Speaker(char * pString){

uint8 headOfFrame[5];

uint8 length; //定义字符串长度

uint8 ecc = 0; //定义校验字节

uint16 i = 0;

if (pString == NULL) //空字符串

return -1;

/*****************发送过程**********************/

headOfFrame[0]=0XFD; //构造帧头FD

headOfFrame[1]=0X00; //构造数据区长度的高字节

length = strlen(pString); //需要发送文本的长度

headOfFrame[2]=length+3;//构造数据区长度的低字节

headOfFrame[3]=0X01; //构造命令字:合成播放命令

headOfFrame[4]=0X00; //构造命令参数:编码格式为GB2312

for(i=0;i<5;i++) //依次发送构造好的5个帧头字节

{

ecc=ecc^(headOfFrame[i]); //对发送的字节进行异或校验

SBUF=headOfFrame[i];

while (TI==0){;} //等待发送中断标志置位

TI=0; //发送中断标志位清零

}

for(i=0;i{

ecc=ecc^(*pString);

SBUF = (*pString);

pString ++;

while(TI==0){;}

TI=0;

}

SBUF=ecc;

while(TI==0){;}

TI=0;

return 0; //成功返回0

}

//语音读整数

uint8 SpeakerInt(int ida){

uint8 i;

uint8 negative=0; //负数标志位

uint8 intLen=5;

char cdat[5]={0};

if (ida < 0){ //若为负数取绝对值

ida = abs(ida);

negative = 1;

}

cdat [0] = (char)(ida / 10000 ) ;

cdat [1] = (char)((ida - (cdat[0] * 10000)) /1000 );

cdat [2] = (char)((ida - (cdat[0] * 10000) - (cdat[1] * 1000)) /100 );

cdat [3] = (char)((ida - (cdat[0] * 10000) - (cdat[1] * 1000) - (cdat[2] * 100)) /10 );

cdat [4] = (char)((ida - (cdat[0] * 10000) - (cdat[1] * 1000) - (cdat[2] * 100) - (cdat[3] * 10)) /1 );

for (i=0;i<5;i++){

cdat[i] = (char)(cdat[i] + 48);

}

if (cdat[0] == '0'){

intLen = 4;

if (cdat[1] == '0'){

intLen = 3;

if (cdat[2] == '0'){

intLen = 2;

if (cdat[3] == '0')

intLen = 1;

}

}

}

if (negative == 1){

Speaker(\"零下\");

delayMs(1000);

}

Speaker(& cdat[5-intLen]);

return 0;

}

void main(){

SpeakerInit();

while(1){

Speaker(\"现在的室外温度是\");

delayMs(3000);

SpeakerInt(-37);

delayMs(1500);

Speaker(\"度\");

delayMs(1000);

}

}

//Speaker.h

#ifndef _SPEAKER_H_

#define _SPEAKER_H_

extern void SpeakerInit(); extern uint8 Speaker(char * pString); extern uint8 SpeakerInt(int ida); #endif

//typedef.h

#ifndef TYPEDEF_H_

#define TYPEDEF_H_

typedef unsigned char uint8;

typedef unsigned int uint16;

typedef unsigned long uint32;

//语音初始化程序

//语音播放程序 //语音读整数

#endif

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务