1.产品概述
DY-SV5W是本司自主研发的一款智能语音模块,集成IO分段触发,UART串口控制,ONE_line单总线串口控制,标准MP3等7种工作模式,简单拨码开关设置;板载5W D类功放,可直接驱动4Ω,3~5W喇叭;支持MP3,WAV解码格式,最大支持32G TF卡存储,可通过USB数据线连接电脑更新TF卡存储音频文件。
2.产品特性
1、支持MP3、WAV解码格式。
2、支持采样率(KHz):8/11.025/12/16/22.05/24/32/44.1/48。
3、24位DAC输出,动态范围支持90dB,信噪比支持85dB。
4、完全支持FAT16/FAT32文件系统,最大支持32G的TF卡。
5、自带5W D类功放,可直接驱动4Ω,3~5W喇叭。
6、UART串口控制语音播报功能,可控制播放,暂停,选曲,音量加减等功能,最大选曲65535首曲目,波特率9600bit/s。
7、支持IO触发播放功能,8个IO口单独触发8首曲目或8个IO口组合触发255首曲目。
8、支持One_line单总线串口控制,可控制播放,暂停,选曲,音量加减等功能。
9、支持3个配置IO进行多达7种工作模式选择,拨码开关设置简单。
3.模块接口及功能定义
引脚定义
引脚名称 | 引脚描述 |
---|---|
5V电源正极 | 接5V电源正极 |
TXD/IO0 | IO触发模式下为输入引脚IO0;UART控制模式下为TX引脚,连接控制端(MCU)的RX |
RXD/IO1 | IO触发模式下为输入引脚IO1;UART控制模式下为RX引脚,连接控制端(MCU)的TX |
IO2 | IO触发模式输入引脚IO2 |
IO3 | IO触发模式输入引脚IO3 |
IO4/ONE_LINE | IO触发模式输入引脚IO4;One_Line一线串口控制模式数据接收引脚 |
IO5 | IO触发模式输入引脚IO5 |
IO6 | IO触发模式输入引脚IO6 |
IO7 | IO触发模式输入引脚IO7 |
BUSY | 播放曲目时输出低电平(0V),播放结束输出高电平(3.3V) |
IO输入输出特性
IO输入特性 | ||||
---|---|---|---|---|
VIL | 低电平输入 | 0 | 0.8 | V |
VIH | 高电平输入 | 2.7 | 3.3 | V |
IO输出特性 | ||||
VoL | 低电平输出 | 0 | 0.33 | V |
拨码开关模式配置
对应拨码开关上的编号 | 1 | CON1 | 拨到数字端为低电平(下拉) | 拨到ON端为高电平(上拉) |
---|---|---|---|---|
注:“按键组合播放”是指IO0-IO7输出对应的电平后恢复原来的高电平,类似于按键触发一次
“电平组合播放”是指IO0-IO7输出对应的电平后保持电平不变
“I/O组合(独立)模式0”与“I/O组合(独立)模式1”的区别在于前者模式释放电平后继续播放当前曲目至结束,后者模式释放电平后立即停止播放曲目。
4.模块尺寸
5 UART串口模式操作说明
5.1 通信格式
采用全双工串口通信;
波特率为9600,数据位:8 ,停止位1位,检验位 N。
起始码-指令类型-数据长度(n)-数据1-数据n-和检验(SM)
l ※ 指令码 :固定为AA。
l ※ 指令类型 : 用来区分指令类型。
l ※ 数据长度:指令中的数据的字节数。
l ※ 数据 :指令中的相关数据,当数据长度为1时,表示只有CMD,没有数据位。
l ※ 和检验 :为之前所有字节之和的低8位,即起始码到数据相加后取低8位。
※ 数据格式:发送的数据或命令,高8位数据在前,低8位在后。
5.2 通信协议
以下是本芯片返回和能识别的数据定义。
※ 00(停止) 01(播放) 02(暂停)
※ USB:00 SD:01 FLASH:02 NO_DEVICE:FF
音量:音量总共为31级,0-30级,上电默认为20级。
播放模式定义:上电默认为单曲停止。
※ 全盘循环(00):按顺序播放全盘曲目,播放完后循环播放。
※ 单曲循环(01):一直循环播放当前曲目。
※ 单曲停止(02):播放完当前曲目一次停止。
※ 全盘随机(03):随机播放盘符内曲目。
※ 目录循环(04):按顺序播放当前文件夹内曲目,播放完后循环播放,目录不包含子目录。
※ 目录随机(05): 在当前目录内随机播放,目录不包含子目录。
※ 目录顺序播放(06):按顺序播放当前文件夹内曲目,播放完后停止,目录不包含子目录。
※ 顺序播放(07):按顺序播放全盘曲目,播放完后停止。
※ NORMAL(00) POP(01) ROCK(02) JAZZ(03) CLASSIC(04)
5.3 通信指令
UART模式详细开发资料查看“UART模式应用手册”
#define UART_VIOCE Serial3 // 音频通信
unsigned char vqTxBuf[6] = { 0xAA, 0x07, 0x02, 0x00, 0x00, 0x00 }; //选定曲目播放,改变4、5字节
unsigned char vqcTxBuf[7] = { 0xAA, 0x16, 0x03, 0x01, 0x00, 0x00 , 0x00 }; //选定曲目插播,改变5、6字节
unsigned char vbTxBuf[6] = { 0xAA, 0x02, 0x00, 0xAC }; //播放
unsigned char vcTxBuf[6] = { 0xAA, 0x01, 0x00, 0xAB }; //查询播放状态,00 停止; 01 播放; 02 暂停
unsigned char vtTxBuf[6] = { 0xAA, 0x10, 0x00, 0xBA }; //结束播放
unsigned char vxTxBuf[6] = { 0xAA, 0x18, 0x01, 0x01, 0xc4 }; //单曲循环
unsigned char vdTxBuf[6] = { 0xAA, 0x18, 0x01, 0x02, 0xc5 }; //单曲播放
unsigned char v30TxBuf[6] = { 0xAA, 0x13, 0x01, 0x1E, 0xDC }; //音量最大30级
unsigned char v20TxBuf[6] = { 0xAA, 0x13, 0x01, 0x14, 0xD2 }; //音量20级
unsigned char v25TxBuf[6] = { 0xAA, 0x13, 0x01, 0x19, 0xD7 }; //音量25级
unsigned char v10TxBuf[6] = { 0xAA, 0x13, 0x01, 0x0A, 0xC8 }; //音量10级
unsigned long previousMillis = 0; //millis延时使用
// 使用millis()替换delay延时 interval:ms
boolean doDelayMillisTime(unsigned long interval, boolean state)
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
state = !state;
}
return state;
}
void setup()
{
UART_VIOCE.begin(9600);
UART_VIOCE.write(v30TxBuf, 6); //初始化音量
UART_VIOCE.write(vxTxBuf, 6);//单曲循环
vqTxBuf[4] = 0x01;
vqTxBuf[5] = 0xb4;
UART_VIOCE.write(vqTxBuf, 6); //选定曲目默认播放
}
void loop()
{
//每隔5秒插播一次音乐
if (doDelayMillisTime(5000 , false) == true) {
vqcTxBuf[5] = 0x03;
vqcTxBuf[6] = 0xc7;
UART_VIOCE.write(vqcTxBuf, 7);
}
}