最近闲来无事就想制作一款智能手表,为此我直接从网上找到一个开源项目OV-Watch
。这里我们就以这个开源项目为例,一步步就讲解,从最初的电路原理图绘制,到PCB
打样焊接,到最后的程序编写烧录测试。
由于该开源项目包含了若干个版本,这里我们在复刻的时候以当前最新版本为例,即V2.4
版本。
一、需求分析
我们要设计一款智能手环,我们通常需要经历如下几个步骤:
- 市场需求调研,调研市场上销量比较高(受大众欢迎)的产品一般都具备哪些功能;
- 技术方案预言,调研目前智能手环通常采用的硬件设计以及软件设计方案。
1.1 功能需求
设计一款智能手环涉及的功能多种多样,通常涵盖健康监测、运动跟踪、通知提醒、以及与手机的连接等功能。
1.1.1 健康监测功能
- 心率监测:通过光学传感器(
PPG
,光电容积脉搏波传感器)测量佩戴者的心率; - 血氧监测:利用光学传感器测量血氧饱和度(
SpO2
); - 睡眠监测:通过加速度计和陀螺仪结合算法来监测睡眠阶段(深睡、浅睡等);
- 压力监测:通过心率变异性分析来估算压力水平;
- 体温监测:一些高级手环可以监测体温变化;
- 步态监测:检测步伐和运动模式,帮助记录步数、运动量。
1.1.2 运动跟踪
- 运动模式:支持跑步、骑行、游泳、登山等不同运动模式,并能记录运动数据;
GPS
路径记录:使用内置GPS
模块记录运动路径,或通过蓝牙与手机共享GPS
数据.
1.1.3 通知提醒功能
- 来电、短信、应用通知提醒:通过与手机的蓝牙连接,接收来电、短信、社交应用的提醒;
- 振动提醒:当有通知时,通过内置的振动电机进行提醒。
1.1.4 电池管理
- 低功耗:智能手环通常要求长时间待机,因此需要高效的电池管理系统,确保电池能够支持长时间使用;
- 快速充电:支持快速充电技术,减少充电时间。
1.1.5 用户交互
- 触摸屏:手环通常会有触摸屏,用于显示信息和交互;
- 按键或触控感应:提供一定的物理按键或触摸控制功能;
- 语音助手:部分高端手环可能内置语音助手,支持语音控制。
1.1.6 蓝牙连接
- 手机同步:通过蓝牙与智能手机同步数据,查看运动、健康数据,接收通知等。
- 蓝牙低能耗 (
BLE
):为了延长电池使用寿命,智能手环通常会使用BLE
协议来降低功耗。
1.2 硬件组成
要实现这些功能,智能手环通常需要以下硬件组件;
1.2.1 MCU/SoC
- 功能:作为智能手环的大脑,处理各种传感器数据,控制其他硬件模块;
- 推荐芯片:低功耗的微控制器(如
STMicroelectronics STM32
系列、Nordic Semiconductor nRF52
系列、Qualcomm Snapdragon Wear
系列)或专用的SoC
(如高通骁龙Wear
系列)。这些芯片支持BLE
、低功耗设计,适合穿戴设备;
1.2.2 传感器模块
- 心率监测:光电容积脉搏波传感器(
PPG
)。常用的芯片如Maxim Integrated
的MAX30100/30102
,Lando
的EM7028
、AMS
的AS7050
等; - 血氧监测:
PPG
传感器也用于血氧监测(SpO2
)。如前所述的MAX30100
、EM7028
也可用于血氧检测; - 温度/测量:用于检测环境的温度和湿度。常见的芯片有
Aosong Electronics
的AHT20
/AHT21
; - 海拔测量:用于测量大气压。常见的芯片有
Sensirion
的SPL06
、Bosch Sensortec
的BMP180
; - 运动跟踪:
- 加速度计和陀螺仪:用于测量佩戴者的运动和姿势。常见的芯片有:
InvenSense
的MPU6050
(6轴传感器),STMicroelectronics
的LSM6DSOX
(6轴传感器),Bosch Sensortec
的BNO055
(9轴传感器)等; GPS
模块:对于需要高精度位置追踪的手环,可以使用GPS
芯片,如u-blox NEO-M8N
或MediaTek 的 MT3333
;- 压力传感器:例如
Bosch Sensortec
的BMP280
,用于监测气压和压力水平。
- 加速度计和陀螺仪:用于测量佩戴者的运动和姿势。常见的芯片有:
1.2.3 显示屏
OLED
显示屏:许多智能手环使用OLED
显示屏,因为它们能提供清晰、节能的显示效果;- 屏幕控制芯片:例如,
SSD1306
控制器,用于驱动OLED
显示器。
1.2.4 电池和充电管理
- 锂电池:大多数智能手环使用小型锂电池,容量一般在
100mAh
到300mAh
之间,具体视续航需求而定; - 充电管理
IC
:如Texas Instruments
的BQ24195
、南京拓微的TP4056M
,用于电池充电和管理; - 低功耗设计:优化电池的续航,利用低功耗
MCU
、屏幕和传感器设计,以及高效的电源管理模块。
1.2.5 振动电机
- 功能:用于振动提醒功能;
- 推荐:使用小型的
LRA
(线性振动执行器)或ERM
(偏心旋转质量振动执行器)。
1.2.6 蓝牙模块
- 功能:支持蓝牙低能耗(
BLE
)协议,进行数据同步、通知提醒等功能; - 推荐芯片:如
Nordic Semiconductor
的nRF52840
、Broadcom
的BCM43438
、Keen High Electronics
的KT6368A
。
1.2.7 外壳与传感器窗口
- 功能:提供坚固的外壳保护,同时确保传感器的有效工作(如心率传感器需要透光设计);
- 材料:常用的外壳材料有塑料、铝合金、陶瓷等,传感器窗口通常使用透明的塑料或玻璃。
二、OV-Watch
简介
OV-Watch
项目制作的是一个基于STM32F411CUE6
和FreeRTOS
和LVGL
的低成本的超多功能的STM32
智能手表。
![img](https://gitee.com/zyly2033/blog-pic/raw/master/202411301013394.png)
其实现了日历、计算器、秒表、NFC
、蓝牙无线升级、与手机传信息、抬腕亮屏、心率检测、环境温湿度检测、指南针、海拔测量等功能。
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301102590.jpeg)
- 电源部分:手表使用的是
3.7V
锂电池,通过TPS63020
(升压-降压转换器)提供3V3
电源,V2.2
版本之后,充电口留了两个焊盘,用来接触磁吸充电口;- 特别注意,
V2.0
版本使用的无线充电,使用了芯片T3168
,但是用无线充电的话,加上线圈和多的器件,体积就非常大了,同时还有散热问题;
- 特别注意,
- 蓝牙部分:
V2.2
用的是HC-04
(邮票孔封装);V2.3
版本改成了用国产芯片KT6328A
;V2.4
换成了KT6368A
;
NFC
部分:V2.0
版本的IC
卡复制器模块介绍详见:https://oshwhub.com/no_chicken/ICka-fu-zhi-qi
;V2.2
版本为了精简减小体积,仅有UID
卡,可以被外部读卡器读写。而在V2.0
版本中,用的是RC522
和一张UID卡
组成的,可以自行复制外部IC
卡,然后也可以被外部读卡器读写如下图所示:
![img](https://gitee.com/zyly2033/blog-pic/raw/master/202411301107469.png)
2.1 系统组成
系统框图如下所示:
其中:
- 主控使用
STM32F411CEU6
; - 操作系统使用
FreeRTOS
; - 图形库使用的
LVGL
; - 传感器部分:手势识别使用6轴
MPU6050
; - 心率血氧使用的是
EM7028
; - 海拔测量用的气压计
SPL06-001
; - 电子指南针使用
LSM303DLHC
; - 蓝牙芯片换成了
KT6368A
(V2.4
版本),有SPP
功能,支持无线升级。
2.2 软件框架
智能手表的软件架构如下所示:
![img](https://gitee.com/zyly2033/blog-pic/raw/master/202411301115110.jpeg)
三、电路原理图设计
电路原理图分为两部分,核心板和背板,我们首先放上完整的原理图:
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301128244.png)
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301129814.png)
注意:这里没有KT6368
电路原理图,这个下面我们单独介绍。
3.1 供电部分
3.1.1 TPS63020
介绍
供电部分使用了TPS63020
, TPS63020
设备为由双电池或三电池碱性、镍镉或镍氢电池、单电池锂离子或锂聚合物电池、超级电容器或其他供电轨供电的产品提供电源解决方案;
- 输入电压:
1.8V-5.5V
; - 可调整的输出电压
1.2V-5.5V
; - 输出电流:当输入电压大于
2.5V
时,输出电压为3.3V
时,电流2A
; - 转换效率高:工作静态电流:
25µA
,带模式选择的节能模式; - 平均电流模式
buck-boost
转换:模式之间的自动转换; - 安全可靠的操作特性:具有过热、过压保护,停机期间断开负载回路。
TPS63020
一共14个引脚:
EN
使能引脚(12):启用输入(1启用,0禁用)不能为悬空状态FB
可调版本的电压反馈(3):必须连接到固定输出电压版本的VOUT
;GND
(2):控制逻辑接地;L1
(8
、9
):电感器连接;L2
(6
、7
):电感器连接;PG
(14
):输出功率良好(1良好,0故障;漏极开路),可以保持打开状态;PGND
(15):电源接地;PS/SYNC
(13):启用/禁用省电模式(1禁用,0启用,同步时钟信号)不能为悬空状态;VIN
(10
、11
):输入电压;VINA
(1
):控制级电源电压;VOUT
(4
、5
):buck-boost
变换器输出。
3.1.2 电路原理图
输入端接到3.7V
锂电池,使能端TPS_EN
接到MCU
的PA3
(POWER_EN
), 用于MCU
控制使能, 软件控制供电。
同时Bat
电池端接到开关, 即可以按键按下让供电芯片使能, 这个按键也复用为KEY2
, PA4
(WAKE)
为高的时候代表按键按下;
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301133336.png)
TPS63020
输出电压由外部电阻分压器设置。电阻分压器必须连接在VOUT
、FB
和GND
之间。反馈电压VFB
为500 mV
标准值
,低压侧电阻器R13
(FB
和GND
之间)必须保持在200k
的范围内;
由于R12
为1MΩ
,R13
为v180K
Ω,所以VOUT=3.3V
,所以电路原理图中VOUT
输出连接到3.3V
。
3.2 充电部分(TP4056M
)
充电部分使用TP4056M
, 用于给标准3.7V
锂电池充电, 输入为5V
,接口通过过孔连接到Back
的两个焊盘, 对应2.84mm
磁吸线的两个触点, 一个+5V
一个GND
, 该芯片具体的外围电路设计可以详见手册;
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301703305.png)
VIN
输入电压为5V
,经过A7
整流二极管,它的正向导通电压通常在0.7V
左右,则到VBUS
电压大概为4.3V
.
VBUS
连接到TP4056M
的VCC
(4
)引脚,用于给该芯片供电。
右侧连接的两个发光二极管为充电状态指示灯;
CHRG
(7
)连接的指示灯通常为红色,表示正处于充电状态;STDBY
(6
)连接的指示灯通常为绿色,表示充电完成。
BAT
(5
)引脚为输出引脚,连接锂电池正极。
3.3 LCD
3.3.1 电路原理图
核心板可以外接SPI
通信的LCD
屏;
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301722950.png)
这里我们将MCU
侧的引脚列出来:
STM32F411CEU6 | AFC01-S18FCA-00 |
---|---|
PA15 | TP_RST |
PB4 | TP_SDA |
PB6 | TP_SCL |
PB7 | LCD_RST |
PB5 | LCD_MOSI |
PB3 | LCD_CLK |
PB8 | LCD_CS |
PB9 | LCD_DC |
PB0 | LCD_BLK |
3.3.2 P169H002-CT
比如这里可以外接P169H002-CTP
电容触摸屏;
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301726228.jpeg)
引脚定义如下:
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301726055.jpeg)
需要注意的是:LCD
引脚和电路原理图中的引脚顺序是反过来的。
3.4 EEPROM
(BL24C02F
)
BL24C02F
提供2048
比特串行电可擦写存储器,组成256
个字节,每页16
个字节,共16
页,其采用I2C
通信;
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301743049.png)
这里我们将MCU
侧的引脚列出来:
STM32F411CEU6 | BL24C02F |
---|---|
PA12 | PROM_SCL |
PA11 | PROM_SDA |
3.5 背板I2C
总线
背板原理图上使用了大量的传感器模块,主要通过I2C
总线与各个I2C
传感器通信;
3.5.1 MPU6050
MPU6050
是一个6轴姿态传感器(3轴加速度计和3轴陀螺仪传感器),可以测量芯片自身X
、Y
、Z
轴的加速度、角度参数,通过数据融合,可以得到姿态角。其在四轴飞行器中使用的较多,这里我们需要使用该传感器进行运动检测;
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301749618.png)
MPU6050
同样采用的I2C
通信;
STM32F411CEU6 | MPU6050 |
---|---|
PB12 | MPU6050_INT |
PB14 | MPU6050_SCL |
PB13 | MPU6050_SDA |
3.5.2 SPL06-001
SPL06-001
是一款小型的数字压力传感器,分辨率可达0.06pa
;
SPL06-001
同样采用的I2C
通信;
STM32F411CEU6 | SPL06-001 |
---|---|
PB14 | SPL_SCL |
PB13 | SPL_SDA |
3.5.3 AHT21
AHT21
是一款小型温湿度传感器;
AHT21
同样采用的I2C
通信;
STM32F411CEU6 | AHT21 |
---|---|
PB14 | AHT_SCL |
PB13 | AHT_SDA |
3.5.4 LSM303DLHC
LSM303DLHC
是一款由意法半导体(STMicroelectronics
)推出的三轴加速度计和三轴磁力计组合传感器。它可以同时测量加速度和地磁场,因此常用于运动追踪、导航、地理定位等应用。
LSM303DLHC
同样采用的I2C
通信;
STM32F411CEU6 | LSM303DLHC |
---|---|
PB14 | LSM_SCL |
PB13 | LSM_SDA |
3.5.5 EM7028
EM7028
是一款低功耗心率传感器,通过光学检测来监测心率。它包括16
位ADC
、可调增益和分辨率,以及接口模块,包括心率传感器(HRS
)和带有2个绿色LED
的内部LED
电流驱动器
EM7028
同样采用的I2C
通信;
STM32F411CEU6 | EM7028 |
---|---|
PB14 | EM7028_SCL |
PB13 | EM7028_SDA |
PB15 | LED_EN |
3.6 KT6368A
KT6368A
芯片是一款支持蓝牙双模的纯数据芯片,蓝牙5.1
版本。芯片的亮点在超小尺寸SOP8
封装,性价高。以及简单明了的透传和串口AT
控制功能。大大降低了嵌入蓝牙在其它产品的开发难度和成本同时支持SPP
和BLE
。但是只能任选其中一个协议使用。
KT6368A
采用串口通信;
STM32F411CEU6 | KT6368A |
---|---|
PA10(USART1_RX) | BLE_TX |
PA9(USART1_TX) | BLE_RX |
PA8 | BLE_EN |
四、PCB
打样焊接
4.1 PCB
打样
既然要从头开始,那我首页我们就需要有一块PCB
电路板,我们打开链接智能手表OV-Watch
,找到PCB
小节,然后点击在编译集中打开;选中智能手表OV-Watch
项目,选择菜单栏【下单】中的【嘉立创-PCB
/SMT
】。
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301908682.png)
往我这里仅仅是打印了十块板子,大概花费了我50大洋,耐心等待两到三天,就可以收到寄过来的PCB
板子。
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301839457.png)
4.2 硬件材料准备
这里我们需要购买电路原理图中的电子元件,涉及到二极管、发光二极管、三极管、贴片电阻、贴片电容、各种芯片、按键、排针等;
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301857381.png)
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301858038.png)
第一张图片为核心板的BOM
清单,第二张图为背板的BOM
清单;这些元件可以直接从立创商城购买;
![](https://gitee.com/zyly2033/blog-pic/raw/master/202411301907148.png)
不过还有部分元件立创商场可能购买不到,或者价格过于昂贵,因此我还从淘宝购买了部分元件;
除此之外,我们还需要从淘宝购买:
五、OTA
升级
V2.4
版本以后的手表的代码分为Bootloader
和APP
了,为的是方便用户戴在手上进行不用拆解的升级,BOOT
区后面划分了一个Flag
区,用于记录是否是完整的APP
,这个位置是APP
传输完成后才记录的,为的是保证程序完整性。
![img](https://gitee.com/zyly2033/blog-pic/raw/master/202411301121227.jpeg)
参考文章
[1] 立创硬件开源
[2] 油炸鸡开源硬件手册网站
[3] github
仓库: https://github.com/No-Chicken/OV-Watch
[4] gitee
仓库: https://gitee.com/kingham/OV-Watch