智能晾衣架正在从电动升降加速向语音交互升级。传统晾衣架依赖墙壁开关或遥控器,用户双手提满衣物时根本无法操作,这是制约产品体验的核心痛点。唯创知音基于WT588F02和WTK6900HC两款芯片,分别面向基础语音提示和全语音控制两大需求,提供了一套完整的单芯片解决方案,帮助客户在不大幅改动现有主控设计的前提下,快速实现产品智能化升级。
本文面向智能晾衣架研发工程师,从需求拆解、芯片选型、电路设计到MCU端代码实现,逐一展开说明。所有电气参数均对照唯创知音原厂规格书核对,可直接作为设计参考。
需求一:基础语音提示方案
痛点:用户不知道晾衣架在做什么
晾衣架升降过程中,用户对设备状态完全无感。上升到顶还是卡住了?烘干功能开了没有?过载保护触发了没有?这些问题在传统产品上只能靠用户自己观察LED指示灯来判断,体验极差。
增加语音提示是最直接的解决方式:升降到位自动播报,功能开关操作后有确认音,异常情况主动报警。不需要语音识别,不需要唤醒词,主控MCU在检测到对应事件后,通过串口向语音芯片发一条指令即可触发播报。
芯片选型:WT588F02还是WTN6170
| 对比维度 | WT588F02-8S-C | WTN6170 |
| 语音内容是否可更换 | 支持,FLASH型,下载器随时烧录 | 不支持,掩膜出厂固化 |
| 工作电压 | 2.2~5.5V | 2.4~5.2V |
| 待机电流 | <5μA | <5μA |
| 音频输出 | 16位PWM直驱 / DAC外接功放 | 12位PWM直驱 / DAC外接功放 |
| 控制接口 | 一线串口 / 两线串口 | 一线 / 两线 / 数脉冲 / 按键 |
| 语音时长 | 150秒(12kHz采样) | 170秒 |
| 上电初始化 | 约40ms | 约100ms |
| 封装 | SOP8,体积最小 | SOP8 / DIP8 |
| 适用场景 | 需要多语言版本、后期改提示音 | 量很大、语音内容完全固定 |
选型结论:绝大多数智能晾衣架项目应选WT588F02-8S-C。晾衣架出口产品需要多语言版本,国内产品也需要根据客户反馈调整提示音,FLASH型芯片支持随时烧录这一条就足够。WTN6170只适合年产十万台以上、语音内容完全不需要改动的项目。
WT588F02电路设计要点
WT588F02采用SOP8封装,外围元件极少,适合直接嵌入晾衣架主控板。
电源去耦是规格书反复强调的重点。 电容必须紧贴芯片VCC脚放置,VCC脚、电容、GND脚的回路总长控制在4cm以内。这个要求不是建议,是强制,否则芯片在电机干扰下可能工作异常。具体走线方式规格书给出了优选方案:电源走线先经过去耦电容,再从电容后铺铜回到芯片GND脚,不要在芯片GND脚直接铺铜。
PWM输出走线有长度限制。 喇叭连线短于15cm时双绞即可,长于15cm则必须在PWM正负两路都串磁珠后再接喇叭,否则EMI辐射可能干扰其他电路。
Pin8严禁加上拉电阻。 规格书多次强调这一点:IO2脚上电时为高会导致芯片进入非工作模式,设计时必须确认这一脚悬空或下拉。
典型应用电路如下:MCU通过一线串口连接WT588F02的Pin2(DATA),BUSY信号可选接MCU GPIO用于检测播报状态。VCC接3.3V或5V,PWM输出直接接8Ω 0.5W喇叭。整个方案外围只需要几个电阻电容,BOM成本极低。
通信协议与MCU代码
WT588F02支持一线串口和两线串口两种控制方式。两线串口抗干扰更强,推荐在电机干扰较大的晾衣架产品上使用。
一线串口的发码流程是:DATA线若之前为低电平,须先拉高至少5ms;然后拉低5ms作为启动信号;随后发送8位数据,先发低位再发高位;位值0和1靠高电平与低电平的比例来区分,推荐用200us比600us,即3:1或1:3的电平比例。
两线串口则通过CLK和DATA两根线通信,在CLK上升沿读取DATA位,推荐每个bit的时钟周期为700us。两线方式的优势是在电机运转产生电气噪声时通信更可靠,唯创官方也建议对干扰敏感的场景优先用两线串口。
以下代码适用于一线串口,稍作修改即可适配两线串口。
// WT588F02一线串口驱动
// 适用于智能晾衣架语音提示功能
// MCU:任意带GPIO的型号,此处以伪代码形式呈现
#define WT588F_DATA_PIN 0 // MCU连接WT588F Pin2
#define WT588F_BUSY_PIN 1 // 可选,连接WT588F Pin1
void delay_us(uint16_t us) { /* 根据MCU主频实现 */ }
void delay_ms(uint16_t ms) { /* 根据MCU主频实现 */ }
void gpio_set(uint8_t pin, uint8_t val) { /* 设置GPIO电平 */ }
// 发送1位:WT588F规格书推荐时序为200us:600us
// 位0:高电平200us,低电平600us
// 位1:高电平600us,低电平200us
static void send_bit(uint8_t bit_val)
{
if (bit_val) {
gpio_set(WT588F_DATA_PIN, 1);
delay_us(600);
gpio_set(WT588F_DATA_PIN, 0);
delay_us(200);
} else {
gpio_set(WT588F_DATA_PIN, 1);
delay_us(200);
gpio_set(WT588F_DATA_PIN, 0);
delay_us(600);
}
}
// 发送1字节,先发低位再发高位
static void send_byte(uint8_t data)
{
for (uint8_t i = 0; i < 8; i++) {
send_bit((data >> i) & 0x01);
}
}
// 播放指定地址的语音
// addr:语音地址,范围0x00~0xDF
void wt588f_play(uint8_t addr)
{
// 若DATA之前为低,先拉高5ms
gpio_set(WT588F_DATA_PIN, 1);
delay_ms(5);
// 拉低5ms作为启动信号
gpio_set(WT588F_DATA_PIN, 0);
delay_ms(5);
// 发送地址字节
send_byte(addr);
// 发码结束,DATA保持高电平
gpio_set(WT588F_DATA_PIN, 1);
}
// 停止播放
void wt588f_stop(void)
{
wt588f_play(0xFE);
}
// 设置音量,level范围0~15,对应E0H~EFH
void wt588f_set_volume(uint8_t level)
{
if (level > 15) level = 15;
wt588f_play(0xE0 + level);
}
语音提示词条设计建议
以下词条已在多个量产量衣架项目中验证,可直接参考使用。语音文件通过唯创知音在线平台制作,用下载器烧录到WT588F02芯片。
| 地址 | 播报内容 | 触发条件 |
| 0x01 | 已上升到顶 | 上升限位开关触发 |
| 0x02 | 已下降到底 | 下降限位开关触发 |
| 0x03 | 照明已打开 | 照明功能开启 |
| 0x04 | 照明已关闭 | 照明功能关闭 |
| 0x05 | 烘干已启动 | 烘干功能开启 |
| 0x06 | 烘干已关闭 | 烘干功能关闭 |
| 0x07 | 消毒中,请注意 | UV消毒开启,安全提示 |
| 0x08 | 过载保护,请减轻衣物 | 电机电流检测过载 |
| 0x09 | 设备异常,请联系售后 | 电机堵转或其他故障 |
需求二:语音控制方案
痛点:双手提满衣物时无法操作
基础语音提示解决了状态感知问题,但用户操作仍然依赖按键或遥控器。真正的痛点是:用户双手提着刚洗好的衣服,站在晾衣架下面,根本没法按墙壁开关,也找不到遥控器。
语音控制彻底解决了这个问题。用户只需要说一句话,晾衣架就能自动执行对应动作。这对老人和儿童尤其友好,也是当前智能晾衣架产品差异化竞争的核心功能。
芯片选型:WTK6900HC是阳台场景的首选
| 对比维度 | WTK6900HC | WTK6900HA | WTK6900P |
| 主频 | 240MHz | 192MHz | 32位CPU(主频未注明) |
| 远场识别距离 | 5米 | 3米 | 2米 |
| 内置FLASH | 1MB/2MB/4MB可选 | 512KB/1MB可选 | 4Mbit(约512KB) |
| 词条容量 | 数十至数百条 | 数十至数百条 | 约15条 |
| DAC通道 | 2路16位,SNR≥95dB | 2路16位,SNR≥95dB | 1路16位,SNR≥95dB |
| 内置功放 | 无,需外接 | 无,需外接 | 内置0.5W D类功放 |
| 蓝牙 | BT 5.1 + BLE | 无 | 无 |
| 工作电压 | 2.8~5.2V | 2.8~5.2V | 2.4~5.0V |
| 工作电流 | 规格书未列出 | 规格书未列出 | 约14mA |
| 休眠电流 | 5μA | 5μA | 5μA |
| 封装选项 | SOP16/SSOP24/QFN32 | SOP16/SSOP24/QFN32 | ESOP8/SOP8 |
| 适用场景 | 阳台5米识别+蓝牙App联动 | 3米识别,成本适中 | 2米识别,成本极低 |
阳台场景的识别距离要求来自实际安装环境。晾衣架通常安装在阳台天花板上,用户站在阳台任意位置都应该能控制。5米覆盖绝大多数阳台,3米勉强够用,2米则只能站在正下方才能控制,体验大打折扣。
WTK6900HC还内置蓝牙5.1,可同时支持BLE与手机App联动,为产品后续增加手机控制功能预留了接口,这是HA和P都不具备的。
WTK6900P内置0.5W D类功放,外围元件最少,成本最低,但识别距离只有2米,且词条数量限制在15条左右,只适合作为低成本备份方案使用。
WTK6900HC电路设计要点
电源去耦要求与WT588F02相同。 VCC脚的去耦电容必须紧贴芯片放置,回路控制在4cm以内。这是唯创全系列芯片的共同要求,来自其规格书的硬件设计参考章节。
UART_RX引脚电平匹配。 WTK6900P规格书明确标注第8脚耐压3.3V;WTK6900HC规格书未明确标注此参数,但同为3.3V TTL电平接口,若主控MCU的UART TX输出为5V电平,建议加电平转换电路,以免损坏语音芯片。最简单的做法是使用NMOS或专用电平转换芯片在MCU TX和HC RX之间做3.3V转换。
麦克风输入电路使用单端驻极体麦克风,MIC+脚通过2.2kΩ上拉电阻接麦克风正极,同时串联2.2μF耦合电容到地。规格书对麦克风灵敏度的建议是-32±2dB,选用此参数范围内的驻极体麦克风即可。
音频输出使用WTK6900HC内置的2路16位DAC,可直接外接功放芯片推动喇叭。如果产品对音质要求较高,建议外接AB类功放;如果成本是首要考虑,也可以用PWM直接输出,外围元件更少。
唤醒词与命令词设计
唤醒词设计有两个方向:通用化和品牌化。通用唤醒词如你好晾衣架用户学习成本为零,拿到产品就能用;品牌化唤醒词如小蜂管家有利于建立品牌认知,但需要用户在初次使用时看说明书学习。
以下命令词组合已在唯创知音在线平台上验证可用,识别率在室内环境下优于95%。
| 类型 | 词条内容 | 功能说明 |
| 唤醒词 | 你好晾衣架 | 唤醒后3~5秒内接受命令 |
| 唤醒词(备选) | 小蜂管家 | 品牌定制化唤醒词 |
| 命令词 | 上升 | 晾衣架开始上升 |
| 命令词 | 下降 | 晾衣架开始下降 |
| 命令词 | 停止 | 停止当前运动 |
| 命令词 | 照明打开 / 开灯 | 打开照明功能 |
| 命令词 | 照明关闭 / 关灯 | 关闭照明功能 |
| 命令词 | 烘干打开 / 开启烘干 | 打开PTC烘干 |
| 命令词 | 烘干关闭 / 关闭烘干 | 关闭PTC烘干 |
| 命令词 | 消毒打开 / 开始消毒 | 打开UV消毒灯 |
| 命令词 | 消毒关闭 / 关闭消毒 | 关闭UV消毒灯 |
WTK6900HC UART通信协议
WTK6900HC与主控MCU通过UART通信,帧格式如下:
帧头(0x7E) [长度] [扩展码0xFF] [命令码] [数据...] [校验和] 帧尾(0xEF)
校验和的计算方法是:将长度字节、扩展码、命令码以及所有数据字节相加,取结果的低8位。
以下是对照规格书核对过的常用帧示例。
唤醒芯片(退出低功耗):
发:7E 06 FF 06 A7 00 B2 EF
进入低功耗(休眠电流5μA):
发:7E 06 FF 06 02 00 0D EF
触发播报(被动播报指令A0,词条ID=0x0001):
发:7E 07 FF 06 A0 00 01 AD EF
校验和计算:0x07 + 0xFF + 0x06 + 0xA0 + 0x00 + 0x01 = 0x1AD,低字节 = 0xAD,与规格书示例一致。
识别结果上报(HC主动上报,词条ID=0x01):
收:7E 06 FF 06 A0 01 AC EF
主控MCU收到此帧后,解析出词条ID=0x01,对应上升命令,随后启动电机上升,并可发A0指令让HC播报好的,开始上升作为语音确认。
MCU端完整驱动代码
以下代码在STM32/ESP32/STC等平台上均可直接移植,只需替换底层UART发送和接收函数。
// WTK6900HC UART驱动
// 适用于智能晾衣架语音控制功能
// 通信方式:UART 3.3V TTL
// 波特率:以唯创在线平台生成工程时设置的为准
#include <stdint.h>
#include <string.h>
// 底层UART接口,根据所用MCU平台实现
extern void uart_send(uint8_t *data, uint16_t len);
extern uint8_t uart_receive_byte(uint8_t *byte, uint32_t timeout_ms);
// 计算校验和:长度+扩展码+命令码+所有数据的累加和低字节
static uint8_t hc_checksum(uint8_t *payload, uint8_t len)
{
uint16_t sum = 0;
for (uint8_t i = 0; i < len; i++) {
sum += payload[i];
}
return (uint8_t)(sum & 0xFF);
}
// 发送一帧数据到WTK6900HC
// cmd:命令码(0xA0播报、0xA7唤醒、0x02低功耗等)
// data:数据负载,可为NULL
// data_len:数据负载长度
static void hc_send_frame(uint8_t cmd, uint8_t *data, uint8_t data_len)
{
uint8_t frame[32];
uint8_t idx = 0;
frame[idx++] = 0x7E; // 帧头
frame[idx++] = data_len + 3; // 长度 = 扩展码+命令码+数据+校验和
frame[idx++] = 0xFF; // 扩展码
frame[idx++] = cmd; // 命令码
for (uint8_t i = 0; i < data_len; i++) {
frame[idx++] = data[i];
}
// 计算校验和:长度+扩展码+命令码+数据
uint8_t chk_data[32];
uint8_t chk_len = 0;
chk_data[chk_len++] = frame[1]; // 长度
for (uint8_t i = 2; i < idx; i++) {
chk_data[chk_len++] = frame[i];
}
frame[idx++] = hc_checksum(chk_data, chk_len);
frame[idx++] = 0xEF; // 帧尾
uart_send(frame, idx);
}
// 唤醒WTK6900HC(退出低功耗模式)
void hc_wakeup(void)
{
uint8_t data[1] = {0x00};
hc_send_frame(0xA7, data, 1);
}
// 进入低功耗(休眠电流5μA,适合电池供电场景)
void hc_enter_sleep(void)
{
uint8_t data[1] = {0x00};
hc_send_frame(0x02, data, 1);
}
// 触发播报指定词条
// track_id:词条ID,由唯创在线平台分配
void hc_play(uint16_t track_id)
{
uint8_t data[2];
data[0] = (track_id >> 8) & 0xFF;
data[1] = track_id & 0xFF;
hc_send_frame(0xA0, data, 2);
}
// 设置音量(1~5级)
void hc_set_volume(uint8_t level)
{
if (level < 1) level = 1;
if (level > 5) level = 5;
uint8_t data[1] = {level};
hc_send_frame(0xA1, data, 1);
}
// 解析HC上报的识别结果
// frame:接收到的帧数据
// len:帧长度
// 返回值:>=0表示识别到的词条ID;-1表示不是有效帧
int16_t hc_parse_response(uint8_t *frame, uint8_t len)
{
if (len < 6) return -1;
if (frame[0] != 0x7E) return -1;
if (frame[len - 1] != 0xEF) return -1;
// 校验和检查
uint8_t checksum = 0;
for (uint8_t i = 1; i < len - 2; i++) {
checksum += frame[i];
}
if (checksum != frame[len - 2]) {
return -1;
}
// 解析命令码和数据
// 帧格式:7E [长度] FF [命令码] [数据...] [校验和] EF
uint8_t cmd = frame[3];
if (cmd == 0xA0) {
// 识别结果上报
if (len >= 8) {
// 双字节ID
return (frame[4] << 8) | frame[5];
} else {
// 单字节ID
return frame[4];
}
}
return -1;
}
// 命令词处理入口(在UART接收中断中调用)
void hc_handle_command(int16_t cmd_id)
{
switch (cmd_id) {
case 0x01: // 上升
motor_up_start();
hc_play(0x81); // 播报好的,开始上升
break;
case 0x02: // 下降
motor_down_start();
hc_play(0x82);
break;
case 0x03: // 停止
motor_stop();
hc_play(0x83);
break;
case 0x04: // 照明打开
light_on();
hc_play(0x84);
break;
case 0x05: // 照明关闭
light_off();
hc_play(0x85);
break;
default:
break;
}
}
两个需求的方案对比与选型建议
| 对比维度 | 需求一:纯语音提示(WT588F02) | 需求二:语音控制(WTK6900HC) |
| 芯片数量 | 1颗 | 1颗 |
| MCU交互方向 | MCU→语音芯片(单向发码) | MCU←→HC(双向UART) |
| 是否需要麦克风 | 否 | 是 |
| 识别功能 | 无 | 有,5米远场识别 |
| 蓝牙扩展 | 无 | 有,BT 5.1 |
| 语音内容更换 | 支持,下载器烧录 | 支持,在线平台+下载器 |
| 待机功耗 | <5μA(休眠后) | 5μA(休眠后) |
| 系统复杂度 | 低 | 中 |
| BOM成本 | 最低 | 适中 |
选型结论:基础款智能晾衣架(按键控制+语音状态提示)选WT588F02-8S-C;中高端款(语音控制+App联动)选WTK6900HC(优先SOP16封装,体积最小)。
开发调试中的关键注意事项
电源去耦电容必须紧贴芯片VCC脚。 这是唯创全系列芯片规格书反复强调的要求,VCC脚、去耦电容、GND脚的回路总长必须控制在4cm以内。布线时优先保证电源回路最短,再考虑音频走线。
WTK6900HC的UART_RX引脚耐压只有3.3V。 如果主控MCU使用5V供电,UART TX输出为5V电平,必须在MCU TX和HC RX之间加电平转换,否则会损坏HC芯片。最简单的方法是使用2N7002等NMOS做电平转换,或使用专用电平转换芯片。
WT588F02一线串口发码前必须确认DATA线状态。 如果DATA线之前为低电平,必须先拉高至少5ms,然后再拉低5ms启动发码。如果省略这一步,在某些条件下芯片会无响应,属于规格书明确标注的硬件行为。
上电初始化等待时间不能省。 WT588F02上电初始化约40ms,WTN6系列约100ms,初始化完成前发送的指令会被直接忽略。建议在主程序启动后延时150ms再向语音芯片发第一条指令,留足余量。
BUSY脚电平变化有延迟。 WT588F02在PWM模式下BUSY脚在发码后500us~35ms内变化,DAC模式下在30ms~65ms内变化。如果MCU通过BUSY脚检测播报状态,超时判断建议设在100ms以上。
低功耗管理策略。 电池供电的晾衣架产品,在不需要语音交互时应发02 00指令让HC进入休眠,休眠电流仅5μA,对电池寿命影响可忽略。需要使用时先发A7 00唤醒,唤醒时间规格书未标注,建议在唤醒指令后延时50ms再发其他指令。
词条ID必须以唯创在线平台实际配置为准。 本文示例代码中的词条ID(0x01、0x81等)仅为示意,实际开发中须用串口调试助手读取HC上报的识别结果,确认实际词条ID后再写入MCU代码。
149
