1. 项目概述
这个智能水壶项目是我去年为一个健康科技公司做的硬件开发案例。当时客户的需求很明确:要做一个能精确控制水温、记录饮水量并通过手机APP交互的智能水壶。经过方案对比,最终选择了STM32F103C8T6作为主控芯片,配合DS18B20温度传感器和HC-05蓝牙模块,实现了一套完整的智能水壶解决方案。
相比市面上常见的智能水壶,我们这个方案有几个独特优势:首先是成本控制,整套BOM成本可以控制在50元以内;其次是响应速度,从检测到水温变化到执行加热动作的延迟不超过200ms;最重要的是功耗表现,在待机状态下整机电流可以控制在5μA以下,这对需要频繁充电的便携设备来说至关重要。
2. 硬件设计与选型
2.1 主控芯片选择
为什么选择STM32F103C8T6?这个决定是经过多维度考量的:
-
性能需求:水壶控制需要实时采集温度数据(每秒2-3次采样),同时处理蓝牙通信和加热控制。Cortex-M3内核的72MHz主频完全够用。
-
外设资源:
- 内置12位ADC,可以直接读取温度传感器信号
- 多个定时器,用于PWM加热控制
- USART接口连接蓝牙模块
- 充足的GPIO用于按键、LED等外设
-
成本因素:零售价约10元,批量采购可低至6-7元,性价比极高。
-
开发生态:丰富的库函数支持和成熟的开发工具链,大大缩短开发周期。
注意:STM32有多个系列,F1系列虽然较老但稳定可靠,对于这种消费级产品完全够用。不要盲目追求新型号,会增加不必要的成本。
2.2 关键传感器选型
温度传感器对比了三种方案:
| 传感器型号 | 精度 | 接口 | 价格 | 最终选择 |
|---|---|---|---|---|
| DS18B20 | ±0.5℃ | 单总线 | 3元 | ✓ |
| NTC热敏电阻 | ±1℃ | 模拟量 | 0.5元 | ✗ |
| PT100 | ±0.1℃ | 模拟量 | 15元 | ✗ |
选择DS18B20的原因:
- 数字输出,抗干扰能力强
- 单总线接口节省IO资源
- 防水封装可直接接触液体
- 精度满足需求(±0.5℃)
实测中发现一个坑:DS18B20的采样周期需要750ms,如果频繁读取会导致数据不变。我们的解决方案是设置1秒的采样间隔,并在固件中做滑动平均滤波。
2.3 加热控制方案
加热模块采用PWM控制MOS管的方式,关键参数:
- 加热功率:300W(12V/25A)
- PWM频率:1kHz(避免可闻噪声)
- 占空比分辨率:1%(使用TIM1高级定时器)
电路设计要点:
- 使用IRF3205 MOS管,Vds=55V,Id=110A,留足余量
- 栅极驱动采用TC4427 MOSFET驱动器
- 加入电流采样电阻(0.01Ω/5W)用于过流保护
- PCB布局时大电流走线宽度≥3mm
3. 软件架构设计
3.1 主程序流程图
c复制void main() {
hardware_init(); // 硬件初始化
ble_init(); // 蓝牙模块初始化
timer_init(); // 定时器初始化
while(1) {
read_temp(); // 读取温度
control_heat(); // 控制加热
handle_ble(); // 处理蓝牙通信
update_display(); // 更新显示
}
}
3.2 温度控制算法
采用增量式PID算法,代码实现关键部分:
c复制float PID_Calc(PID *pid, float actual_temp) {
float err = pid->target - actual_temp;
float d_err = err - pid->last_err;
pid->integral += err;
if(pid->integral > pid->max_integral)
pid->integral = pid->max_integral;
else if(pid->integral < -pid->max_integral)
pid->integral = -pid->max_integral;
float output = pid->Kp * err +
pid->Ki * pid->integral +
pid->Kd * d_err;
pid->last_err = err;
return output;
}
参数整定经验:
- Kp初始值设为(100%输出)/(目标温差)
- Ki=Kp/10,Kd=Kp*2
- 实际测试时先调P,再调I,最后调D
- 最终参数:Kp=8.0, Ki=0.5, Kd=16.0
3.3 蓝牙通信协议
自定义的简单协议格式:
| 字节 | 含义 | 示例 |
|---|---|---|
| 0 | 帧头 | 0xAA |
| 1 | 命令 | 0x01(设置温度) |
| 2-3 | 数据 | 温度值*10 |
| 4 | 校验和 | 前面字节累加和 |
手机APP开发要点:
- 使用Android的BluetoothGATT API
- 连接间隔建议设置为20-30ms
- 数据分包发送,每包不超过20字节
- 加入超时重传机制
4. 低功耗设计技巧
4.1 电源管理方案
整机供电架构:
- 输入:5V/2A USB或12V/3A适配器
- 主电源:RT8059(5V→3.3V DCDC)
- 加热电源:直接12V输入
- 待机功耗:<0.1mA
关键实现:
- 不使用LDO而用DCDC,效率>90%
- 蓝牙模块单独供电控制
- 加热期间关闭非必要外设
- 利用STM32的Stop模式
4.2 软件优化措施
- 事件驱动架构:大部分时间MCU处于Stop模式
- 外设时钟动态管理:按需开启时钟
- 减少轮询:使用中断唤醒
- 代码优化:
- 避免浮点运算
- 查表代替实时计算
- 使用位带操作
实测效果:
- 持续加热:约500mA
- 待机状态:<0.1mA
- 2000mAh电池可待机超过1年
5. 生产测试方案
5.1 测试工装设计
自制测试架包含:
- 温度校准:高精度温度计对比
- 电流测试:0.1mA分辨率
- 蓝牙测试:自动收发测试
- 按键寿命:机械臂按压测试
测试流程:
- 上电自检(3秒)
- 加热测试(升至60℃)
- 蓝牙配对测试
- 功耗测试
- 外观检查
5.2 常见故障排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 不加热 | MOS管损坏 | 更换MOS管 |
| 温度不准 | 传感器未校准 | 重新校准 |
| 蓝牙连不上 | 模块固件问题 | 重新烧录 |
| 耗电快 | 软件未进低功耗 | 检查代码 |
生产良率提升技巧:
- 焊接后先用酒精清洗
- 程序烧录前擦除全片
- 老化测试至少24小时
- 采用防呆接口设计
6. 用户体验优化
6.1 手机APP功能
- 温度预设:常用温度快捷设置
- 饮水记录:统计每日饮水量
- 提醒功能:定时喝水提醒
- 固件升级:OTA更新
UI设计要点:
- 大按钮适合单手操作
- 温度调节采用旋钮设计
- 饮水记录可视化展示
- 配色符合品牌VI
6.2 硬件交互设计
- 触控按键:IP67防水
- LED指示灯:RGB显示状态
- 声音反馈:轻柔提示音
- 防烫设计:双层隔热结构
人机工程学考量:
- 壶嘴倒水不滴漏
- 手柄握感舒适
- 重量平衡设计
- 一键煮沸快捷操作
这个项目从原型到量产用了4个月时间,最大的收获是认识到硬件产品开发中细节决定成败。比如最初没考虑MOS管的散热问题,导致第一批样品有10%的故障率。后来加了散热片和温度监控才解决。另一个教训是蓝牙天线设计,最初PCB天线效果不好,改用了外接天线后通信距离从3米提升到了10米。