1. 项目背景与需求分析
健身自行车作为最常见的室内有氧运动器械之一,其数据采集系统的设计一直是个值得深入研究的课题。传统健身车往往只提供简单的转速和里程显示,而现代用户对运动数据的精确性和多样性有着更高的需求。
我在去年为一个健身工作室改造旧式健身车时,发现市面上的商用数据采集模块价格普遍在2000元以上,这对于中小型健身房来说是个不小的负担。于是萌生了用STM32自主开发一套低成本、高精度数据采集系统的想法。
这套系统需要实现的核心功能包括:
- 实时采集踏频(RPM)
- 计算瞬时功率(Watt)
- 记录运动时长和消耗卡路里
- 通过无线方式传输数据到手机APP
- 本地OLED屏幕显示关键指标
2. 硬件系统设计
2.1 主控芯片选型
经过对比STM32F1、F4和H7三个系列,最终选择了STM32F411CEU6作为主控,主要基于以下考虑:
- 84MHz主频足够处理传感器数据
- 内置浮点运算单元(FPU)便于功率计算
- 128KB Flash+64KB RAM满足需求
- 价格仅25元左右(采购量100+时)
提示:F4系列相比F1的最大优势是内置FPU,在进行功率计算的浮点运算时效率提升明显。实测F103在相同算法下需要12ms,而F411仅需3ms。
2.2 传感器方案设计
2.2.1 踏频检测
采用霍尔传感器+磁钢的方案:
- 使用3144霍尔传感器(单价0.8元)
- 在飞轮上均匀安装8颗N35磁钢
- 采样间隔设置为10ms
- 使用TIMER输入捕获功能测量脉冲间隔
关键计算公式:
code复制RPM = (60 × 磁钢数量) / (脉冲间隔 × 脉冲数)
2.2.2 功率计算
功率计算基于扭矩和角速度:
code复制功率(W) = 扭矩(N·m) × 角速度(rad/s)
由于直接测量扭矩成本较高,本设计采用经验公式估算:
code复制功率 = (0.011 × RPM²) + (0.2 × RPM) + 5
这个公式是通过对不同体重测试者(50-90kg)进行实测数据回归分析得出的。
2.3 外围电路设计
2.3.1 电源管理
- 采用TP4056充电管理芯片
- 3.7V 18650锂电池供电
- AMS1117-3.3V稳压芯片
- 整体待机电流<5mA
2.3.2 显示模块
选用0.96寸OLED(I2C接口),显示内容布局:
code复制[1] RPM: 85
[2] POWER: 120W
[3] TIME: 12:30
[4] CAL: 285Kcal
2.3.3 无线传输
使用ESP-01S WiFi模块,通过UART与STM32通信,每5秒发送一次JSON格式数据:
json复制{
"rpm":85,
"power":120,
"time":750,
"calorie":285
}
3. 软件系统实现
3.1 开发环境搭建
推荐使用VSCode+PlatformIO开发环境:
- 安装PlatformIO插件
- 创建STM32F4项目
- 添加依赖库:
- Adafruit_SSD1306(OLED驱动)
- ArduinoJson(数据序列化)
3.2 关键代码实现
3.2.1 踏频测量
使用TIM2的输入捕获功能:
c复制void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
if(htim->Instance == TIM2) {
static uint32_t last = 0;
uint32_t now = [HAL](https://taotoken.net/?utm_source=hardware)_GetTick();
if(last != 0) {
pulse_interval = now - last;
}
last = now;
}
}
3.2.2 功率计算
每秒钟更新一次:
c复制void calculate_power() {
float rpm = get_current_rpm();
power = 0.011f * rpm * rpm + 0.2f * rpm + 5;
}
3.2.3 数据发送任务
使用FreeRTOS创建独立任务:
c复制void vSenderTask(void *pvParameters) {
while(1) {
send_data_to_wifi();
vTaskDelay(5000 / portTICK_PERIOD_MS);
}
}
4. 系统调试与优化
4.1 常见问题排查
4.1.1 踏频数据跳变
现象:低速时RPM显示不稳定
解决方法:
- 增加软件滤波算法
- 调整霍尔传感器间隙(1-2mm最佳)
- 添加硬件RC滤波(10kΩ+0.1μF)
4.1.2 WiFi连接不稳定
优化措施:
- 增加AT指令重试机制
- 添加看门狗复位功能
- 改用更稳定的TCP协议
4.2 功耗优化
通过以下手段将平均功耗从18mA降至5mA:
- 将OLED刷新率从60Hz降至10Hz
- 启用STM32的STOP模式
- 优化传感器供电时序
5. 实测数据对比
与商业产品对比测试结果(30分钟骑行):
| 指标 | 本系统 | 商用品A | 误差率 |
|---|---|---|---|
| 踏频(RPM) | 82 | 85 | 3.5% |
| 功率(W) | 115 | 120 | 4.2% |
| 卡路里(Kcal) | 280 | 275 | 1.8% |
6. 扩展应用方向
基于现有系统可以进一步开发:
- 阻力电机控制(通过PWM调节)
- 蓝牙双模传输(同时支持APP和健身车交互)
- 用户识别功能(RFID或NFC)
- 云端数据存储与分析
我在实际部署中发现,系统的稳定性很大程度上取决于电源管理设计。建议在批量生产时:
- 选用带保护板的18650电池
- 增加电压监测电路
- 优化低电量提示功能
对于想复现该项目的开发者,建议先从踏频检测入手,这是整个系统的基础。可以先使用串口打印原始脉冲数据,确保传感器安装位置和软件算法都正确后,再逐步添加其他功能模块。
