WT588F02B在智能语音感应洗手液器设计方案
2022-09-13 16:23:47
WT588F02B是一颗怎样的IC呢?
首先,WT588F02B这颗芯片是一颗非常优秀的语音芯片,它有16位的PWM输出,能够直接驱动8欧0.25W的喇叭;其次,它还是一颗强大的数据处理芯片(DSP),自带乘累加器,能够快速的处理压缩和解码算法;再者,它有丰富的引脚,兼容很多通信协议,如一线通信、UART、IIC、SPI等;最后,WT588F02B还是一颗FLASH型的芯片,可以重复擦写,支持掉电记忆功能,还可以不需要多用IO引脚实现电压检测功能。
下面我们详细的了解这个方案:
智能语音感应洗手液器设计方案
1、智能语音感应洗手液器设计方案概述
产品图片 |
功能特点 |
|
功能特点: 1.免接触感应出液 2.极速出液 3.语音播报 4.usb充电 5.低电量提示功能 6.缺液提醒 |
1.1、应用框架图
1.2框架图介绍:
1、主控MCU通过Uart发送指令控制WT588F0B播放声音,停止播放;
2、主控MCU通过Uart获取红外传感器信号(或者主动发送接近信号);
3、主控MCU控制马达出液;
4、通过按键设置出液量;
1.3语音提示内容:
1、缺液语音提示;
2、低电量语音提示;
3、按键操作语音提示;
4、讲文明、讲卫生的宣传语(主要应用于公共场所)
如何科学洗手的教学语音(主要适用于儿童,帮助他们养成正确的洗手习惯)
2、器件选型及原理图
2.1器件选型:
部位 |
型号 |
特性概述 |
语音IC |
WT588F02B-8S |
|
WT588F02B基本功能和特性
1).16位DSP语音芯片、32Mhz内部振荡;
2).工作电压2.0~5.5V;
3).16bit的PWM/DAC输出,可直接驱动8R 0.5W喇叭;
4).支持6K~32Khz的WAV文件;
5).客户可以通过配套下载测试板在线更换芯片内部语音内容;
6).支持32768段地址,有更多需求可以扩展;
7).芯片内部有200K byte 的存储空间(不包括主控程序);
8).低电压检测功能;
2.2设计原理图:
2.2.1WT588F02B-8S应用原理图如下
2.2.2接口介绍:
Pad Name |
Pad No. |
Description描述 |
PC2 |
1 |
UART TX |
PC1 |
2 |
UART RX |
PI0 |
3 |
红外感应监测口 |
PI1 |
4 |
红外感应器件控制 |
PWMN |
5 |
声音输出脚,接喇叭一端 |
VCC |
6 |
电源正 |
PWMP |
7 |
声音输出脚,接喇叭另外一端, |
GND |
8 |
电源负 |
3、WT588F02B功能介绍:
3.1协议命令格式
WT588F02B-8S内置标准UART异步串口接口,属于3.3V TTL电平接口。通讯数据格式是:起始位:1位;数据位:8位;奇偶位:无;停止位:1位。使用电脑串口调试助手,需要正确设置串口的参数,设置如图:
指令格式
唤醒码 |
起始码 |
长度 |
命令码 |
参数 |
累加和校验 |
结束码 |
0X00 |
0X7E |
见下文 |
见下文 |
见下文 |
见下文 |
0XEF |
返回格式
起始码 |
长度 |
命令码 |
参数 |
累加和校验 |
结束码 |
0X7E |
04 |
见下文 |
见下文 |
见下文 |
0XEF |
语音类串口指令:只有指令长度和校验是正确的,才会判断命令;命令不存在时,没有返回值,参数过多也没有返回值,参数错误返回01
注意:“长度”是指长度(1字节)+命令码(若干字节)+参数(若干字节)+校验和(1个字节)的长度(字节数);
“累加和校验”是指长度+命令码+参数的累加和的低字节;
返回参数(XX) |
含义 |
00 |
代表成功 |
01 |
代表失败 |
3.2语音播放指令:
命令码 |
功能 |
备注 |
播放对应地址语音 |
(门铃语音确认后,地址会固定,但开放下载功能) 可打断AF、B0指令并失效 |
|
音量调节 |
00为静音,1F为最大音量,共32级音量调节 |
|
循环播放当前语音 |
00:取消单曲循环 01:单曲循环 02:播放两次 03:播放三次 可打断B0指令并失效 |
|
停止播放当前语音 |
|
|
AC |
下一曲 |
可打断AF、B0指令并失效 |
AD |
上一曲 |
可打断AF、B0指令并失效 |
B0 |
组合播放 |
可打断AF指令并失效 |
3.3红外检测指令:
FF 08 01 |
开启红外检测功能 |
|
FF 08 02 |
关闭红外检测功能 |
|
FF 08 03 |
查询红外检测结果 |
返回 01表示有物体接近,00,则反之 |
FF 08 04 |
取消红外检测结果响应 |
检测到物体接近时,主动反馈结果,一直拉高TX(平时是低),直到收到此命令才拉低TX.这能保证主控MCU能及时收到接近信号; |
4、程序范例
以STC15 单片机为例:
串口/定时器初始化Init()
/*************************************************************************/
void Init(void)
{
/* *************串口1初始化****************/
SCON = 0x50; //8-bit variable UART
TMOD = 0x20; //Set Timer1 as 8-bit auto reload mode
TH1 = TL1 = -(FOSC/12/32/BAUD); //Set auto-reload vaule
TR1 = 1; //Timer1 start run
ES = 1; //Enable UART interrupt
/**************IO供电时钟芯片初始化****************/
P2M0|=0X02;
P21=1; //推挽输出高电平,可提供十几毫安电流给时钟芯片
/* *************定时器0初始化****************/
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初始值
TH0 = 0xA8; //设置定时初始值
TF0 = 0; //清除TF0标志
ET0 = 1; //使能定时器中断
TR0 = 1; //定时器0开始计时
/* *************看门启动****************/
WDT_CONTR = 0x04; // //18.432M : 0.68s
WDT_CONTR|=0x20;
EA = 1; //Open master interrupt switch
}
/***********************************************************************/
串口发送函数SendData(byte dat)
/*----------------------------
Send a byte data to UART
Input: dat (data to be sent)
Output:None
----------------------------*/
void SendData(BYTE dat)
{
//Wait for the completion of the previous data is sent
while (busy1);
busy1 = 1;
SBUF = dat; //Send data to UART buffer
}
/*************************************************************************/
语音播放函数 send_uart_play()
void send_uart_play(unsigned char len) // 7E 05 A0 00 01 A6 EF
{
unsigned char i,j,sum=0;
j=len+2;
send2_buf[0]=0x7e;//
send2_buf[1]=len+2;
for(i=0;i<len;i++)send2_buf[2+i]=tempdata[i];
for(i=1;i<j;i++)sum+=send2_buf[i];
send2_buf[len+2]=sum;
send2_buf[len+3]=0xEF;
SendData(0x00);//低电平唤醒串口
for(i=0;i<(len+4);i++)SendData(send2_buf[i]);
}
写在后面的话
这颗IC目前有3种封装分别为:SOP8、SOP16、SSOP24,它还有很多拓展用途,想了解它们,请自行搜索www.waytronic.com。