feat: 实现智能按摩器完整功能 (定时/语音/电机/显示)
- 新增MP3语音模块驱动,集成18个语音提示,支持播放/停止/音量调节 - 实现0/10/20/30分钟循环定时倒计时,实时显示剩余时间,定时结束自动停机 - 优化电机控制:一档力度提升至75%,降档冲击时间延长至800ms,降档时触发100%冲击防卡顿 - 屏幕显示重构为分区动态更新:时间状态(Zone1)/档位(Zone2)/加热(Zone3),性能优化 - 新增LED指示:运行时RUN_LED以500ms周期闪烁,无效操作ERR_LED亮1秒 - 操作逻辑改进:所有操作需先设定时间,否则播放"请先设定时间"并亮ERR_LED - 加热控制由GPIO改为PWM(TIM1_CH1),占空比300 - 调整USART3波特率为9600适配MP3模块 - FreeRTOS任务优化:Motor周期500ms,Screen周期10ms,新增定时器秒Tick处理 - 完善开发文档:MP3集成指南、校验和验证脚本、文件重命名工具等 新增文件:mp3_driver.h/c, 多项开发文档 修改文件:freertos.c, gbk_text.h/c, motor_driver.c, screen.h/c, usart.c, gpio.c等
This commit is contained in:
281
README.md
281
README.md
@@ -1,95 +1,280 @@
|
||||
# SmartMassager_STM32
|
||||
|
||||
STM32 智能按摩椅控制系统项目
|
||||
STM32 智能按摩器控制系统项目
|
||||
|
||||
## 项目概述
|
||||
|
||||
本项目基于 STM32 微控制器开发的智能按摩椅控制系统,集成了串口屏显示、FreeRTOS 实时操作系统、多种传感器控制等功能。
|
||||
本项目基于 STM32 微控制器开发的智能按摩器控制系统,集成了串口屏显示、FreeRTOS 实时操作系统、MP3语音提示、定时倒计时、多档位电机控制等功能。系统支持完整的按摩操作流程,包括定时设定、档位调节、加热控制等,并通过语音提示提供友好的用户交互体验。
|
||||
|
||||
## 硬件平台
|
||||
|
||||
- 主控芯片:STM32 系列微控制器
|
||||
- 显示屏:JC 系列串口屏(通过 USART1 通信)
|
||||
- 操作系统:FreeRTOS 实时操作系统
|
||||
- **主控芯片**: STM32F103XE 系列微控制器
|
||||
- **显示屏**: JC 系列串口屏(通过 USART1 通信,波特率 115200)
|
||||
- **MP3模块**: 通过 USART3 通信(波特率 9600)
|
||||
- **电机控制**: TIM3 PWM 输出(三档 PWM:75% / 85% / 95%)
|
||||
- **加热控制**: TIM1 CH1 PWM 输出(占空比 300)
|
||||
- **操作系统**: FreeRTOS 实时操作系统
|
||||
- **调试工具**: ST-LINK
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 核心功能
|
||||
|
||||
#### 1. 定时倒计时系统
|
||||
- 支持 0→10→20→30→0 分钟循环定时设定
|
||||
- 实时倒计时显示,动态更新剩余时间
|
||||
- 定时结束自动停止所有设备(电机、加热)
|
||||
- 运行中按下定时键可取消定时并停止
|
||||
|
||||
#### 2. MP3语音提示系统
|
||||
- 18个预设语音文件,覆盖所有操作场景
|
||||
- 支持播放控制:播放指定索引曲目、停止、暂停、设置音量、切换音源
|
||||
- 自动校验和计算,确保通信可靠性
|
||||
- 语音提示包括:欢迎语、定时设定、档位变化、加热开关、错误提示等
|
||||
|
||||
#### 3. 多档位电机控制
|
||||
- 三档力度调节:75%(一档) / 85%(二档) / 95%(三档)
|
||||
- 启动冲击时间:1500ms
|
||||
- 降档平滑过渡:800ms 适应时间 + 100% PWM 冲击
|
||||
- 精确的 PWM 通道控制:`Motor_StartAll()` / `Motor_StopAll()`
|
||||
- 优化一档力度从 65% 提升至 75%,改善低速按摩效果
|
||||
|
||||
#### 4. 加热控制
|
||||
- PWM 控制加热输出(TIM1 CH1,占空比 300)
|
||||
- 开关状态实时显示
|
||||
- 配合语音提示反馈
|
||||
|
||||
#### 5. 分区屏幕显示
|
||||
- **Zone1**: 显示时间状态(停止 / 设定时间 / 剩余时间倒计时)
|
||||
- **Zone2**: 显示按摩档位(停止 / 一档 / 二档 / 三档)
|
||||
- **Zone3**: 显示加热状态(开启 / 关闭)
|
||||
- 动态生成剩余时间 GBK 字符串("时间:剩余XX分")
|
||||
- 状态变化时才更新屏幕,优化性能
|
||||
|
||||
#### 6. LED指示灯
|
||||
- **RUN_LED**: 运行时以 500ms 周期闪烁,停止时熄灭
|
||||
- **ERR_LED**: 无效操作时亮 1 秒提示
|
||||
- 低电平点亮控制方式
|
||||
|
||||
#### 7. 操作安全机制
|
||||
- 所有操作(按摩、加热)需先设定时间,否则提示错误
|
||||
- 未设定时间操作时播放语音"请先设定时间"并点亮 ERR_LED
|
||||
- 完善的错误处理和用户提示
|
||||
|
||||
## 按键功能
|
||||
|
||||
| 按键 | 功能 | 说明 |
|
||||
|------|------|------|
|
||||
| **TIME_KEY** | 定时设定 | 循环切换:0→10→20→30→0 分钟 |
|
||||
| **M_KEY** | 加档 | 从当前档位递增(0→1→2→3),到三档时提示"已到最大档位" |
|
||||
| **M_KEYC7** | 减档 | 从当前档位递减(3→2→1→0),减到0档时停止按摩 |
|
||||
| **HOT_KEY** | 加热开关 | 切换加热开/关状态 |
|
||||
|
||||
## 软件架构
|
||||
|
||||
### 主要模块
|
||||
|
||||
1. **屏幕驱动模块** (`screen.c`)
|
||||
1. **MP3驱动模块** (`mp3_driver.c`)
|
||||
- 完整的 MP3 驱动协议实现
|
||||
- 支持播放控制命令封装
|
||||
- 自动校验和计算
|
||||
|
||||
2. **屏幕驱动模块** (`screen.c`)
|
||||
- 串口屏底层驱动实现
|
||||
- 支持基本绘图功能(点、线、矩形、圆形)
|
||||
- 分区显示功能(Zone1/Zone2/Zone3)
|
||||
- GBK 字符显示支持
|
||||
- 基本绘图功能(点、线、矩形、圆形)
|
||||
- 图片显示功能
|
||||
|
||||
2. **任务调度模块**
|
||||
- 基于 FreeRTOS 的多任务管理
|
||||
- 各子系统任务协调运行
|
||||
3. **电机驱动模块** (`motor_driver.c`)
|
||||
- 三档 PWM 控制
|
||||
- 启动加速功能
|
||||
- 降档冲击优化
|
||||
- 精确通道控制
|
||||
|
||||
3. **日志系统**
|
||||
4. **GBK文本模块** (`gbk_text.c`)
|
||||
- GBK 编码文本常量定义
|
||||
- 支持动态时间字符串生成
|
||||
|
||||
5. **任务调度模块** (`freertos.c`)
|
||||
- 基于 FreeRTOS 的多任务管理
|
||||
- Motor 任务(500ms 周期)
|
||||
- Screen 任务(10ms 周期)
|
||||
- 定时器 Tick 处理(1秒周期)
|
||||
|
||||
6. **日志系统**
|
||||
- 集成 EasyLogger 日志框架
|
||||
- 多级别日志输出
|
||||
|
||||
### 核心功能
|
||||
### 核心 API
|
||||
|
||||
#### 定时器 API
|
||||
- `Timer_CanOperate()` - 检查定时器是否可操作
|
||||
- `Timer_GetRemainingSeconds()` - 获取剩余秒数
|
||||
- `Timer_GetMinutes()` - 获取设定的分钟数
|
||||
- `Timer_IsRunning()` - 检查定时器是否运行中
|
||||
|
||||
#### MP3播放 API
|
||||
- `MP3_Play(uint8_t index)` - 播放指定索引曲目
|
||||
- `MP3_Stop()` - 停止播放
|
||||
- `MP3_Pause()` - 暂停播放
|
||||
- `MP3_SetVolume(uint8_t volume)` - 设置音量(0-30)
|
||||
- `MP3_SetSource(uint8_t source)` - 设置音源
|
||||
|
||||
#### 电机控制 API
|
||||
- `Motor_SetGear(uint8_t gear)` - 设置档位(0-3)
|
||||
- `Motor_StartAll()` - 启动所有电机通道
|
||||
- `Motor_StopAll()` - 停止所有电机通道
|
||||
- `Motor_GetCurrentGear()` - 获取当前档位
|
||||
|
||||
#### 屏幕控制 API
|
||||
- `Screen_Init()` - 屏幕初始化
|
||||
- `Screen_Clear()` - 清屏
|
||||
- `Screen_DrawText16_GBK()` - 绘制16号字体GBK文本
|
||||
- `Screen_DrawText24_GBK()` - 绘制24号字体GBK文本
|
||||
- `Screen_Box()` - 绘制矩形框
|
||||
- `Screen_Line()` - 绘制直线
|
||||
|
||||
#### 电机控制
|
||||
- 多档位速度控制
|
||||
- 启动加速功能
|
||||
- 过流、超温保护
|
||||
|
||||
#### 按键处理
|
||||
- 防抖处理
|
||||
- 四个功能按键:
|
||||
- M_KEY: 加档
|
||||
- M_KEYC7: 减档
|
||||
- HOT_KEY: 热敷开关
|
||||
- TIME_KEY: 定时功能
|
||||
|
||||
#### 音频播放
|
||||
- MP3音频播放支持
|
||||
- TF卡文件读取
|
||||
- `Screen_ShowZone1_Time()` - 显示Zone1时间状态
|
||||
- `Screen_ShowZone2_Gear()` - 显示Zone2档位状态
|
||||
- `Screen_ShowZone3_Heat()` - 显示Zone3加热状态
|
||||
|
||||
## 开发环境
|
||||
|
||||
- IDE: STM32CubeIDE
|
||||
- 编译器: GCC ARM
|
||||
- 调试工具: ST-LINK
|
||||
- **IDE**: STM32CubeIDE
|
||||
- **编译器**: GCC ARM
|
||||
- **构建工具**: CMake
|
||||
- **调试工具**: ST-LINK
|
||||
|
||||
## 构建说明
|
||||
|
||||
1. 克隆项目到本地
|
||||
2. 使用 STM32CubeIDE 导入项目
|
||||
3. 配置目标芯片型号
|
||||
3. 配置目标芯片型号(STM32F103XE)
|
||||
4. 编译项目
|
||||
5. 通过 ST-LINK 下载到目标板
|
||||
|
||||
### 依赖文件
|
||||
- `CMakeLists.txt` - CMake 构建配置
|
||||
- `CMakePresets.json` - CMake 预设配置
|
||||
- `STM32F103XX_FLASH.ld` - 链接脚本
|
||||
- `startup_stm32f103xe.s` - 启动文件
|
||||
|
||||
## 使用说明
|
||||
|
||||
1. 上电后系统自动初始化
|
||||
2. 屏幕显示设备名称和加载界面
|
||||
3. 初始化完成后进入主操作界面
|
||||
4. 通过按键控制按摩功能
|
||||
### 基本操作流程
|
||||
|
||||
## 注意事项
|
||||
1. **上电启动**
|
||||
- 系统自动初始化
|
||||
- 播放欢迎语音(MP3文件1)
|
||||
- 屏幕显示加载界面
|
||||
|
||||
- 请确保电源电压符合要求
|
||||
- 避免在潮湿环境中使用
|
||||
- 定期检查连接线路
|
||||
- 如遇异常情况请立即断电
|
||||
2. **设定时间**
|
||||
- 按下 `TIME_KEY` 选择定时时长(10/20/30分钟)
|
||||
- 屏幕显示设定时间
|
||||
- 播放相应语音提示
|
||||
|
||||
## 版本信息
|
||||
3. **启动按摩**
|
||||
- 按下 `M_KEY` 启动按摩(一档)
|
||||
- RUN_LED 开始闪烁
|
||||
- 开始倒计时
|
||||
|
||||
- 当前版本: v1.0.0
|
||||
- 发布日期: 2024年
|
||||
4. **调节档位**
|
||||
- 按 `M_KEY` 加档(一档→二档→三档)
|
||||
- 按 `M_KEYC7` 减档(三档→二档→一档→停止)
|
||||
- 每次操作播放语音提示
|
||||
|
||||
5. **加热控制**
|
||||
- 按 `HOT_KEY` 开关加热
|
||||
- 屏幕显示加热状态
|
||||
- 播放语音提示
|
||||
|
||||
6. **定时结束**
|
||||
- 倒计时归零
|
||||
- 自动停止所有设备
|
||||
- 播放"定时结束,按摩结束"语音
|
||||
|
||||
### 语音文件索引
|
||||
|
||||
| 索引 | 语音内容 | 触发时机 |
|
||||
|------|----------|----------|
|
||||
| 1 | 欢迎语 | 系统启动 |
|
||||
| 2 | 设定10分钟 | 定时键按下 |
|
||||
| 3 | 设定20分钟 | 定时键按下 |
|
||||
| 4 | 设定30分钟 | 定时键按下 |
|
||||
| 5 | 取消定时 | 定时键取消 |
|
||||
| 6 | 按摩已停止 | 取消定时 |
|
||||
| 7 | 按摩开始 | 首次启动按摩 |
|
||||
| 8 | 一档 | 加档到一档 |
|
||||
| 9 | 二档 | 加档到二档 |
|
||||
| 10 | 三档 | 加档到三档 |
|
||||
| 11 | 已到最大档位 | 尝试加到四档 |
|
||||
| 12 | 一档 | 降档到一档 |
|
||||
| 13 | 二档 | 降档到二档 |
|
||||
| 14 | 按摩停止 | 降档到零档 |
|
||||
| 15 | 加热已开 | 打开加热 |
|
||||
| 16 | 加热已关 | 关闭加热 |
|
||||
| 17 | 请先设定时间 | 未设定时间操作 |
|
||||
| 18 | 定时结束,按摩结束 | 倒计时结束 |
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
SmartMassager_STM32/
|
||||
├── Core/ # 核心代码
|
||||
│ ├── Inc/ # 头文件
|
||||
│ │ ├── mp3_driver.h # MP3驱动头文件
|
||||
│ │ ├── motor_driver.h # 电机驱动头文件
|
||||
│ │ ├── screen.h # 屏幕驱动头文件
|
||||
│ │ ├── gbk_text.h # GBK文本定义
|
||||
│ │ └── freertos.h # FreeRTOS配置
|
||||
│ └── Src/ # 源文件
|
||||
│ ├── mp3_driver.c # MP3驱动实现
|
||||
│ ├── motor_driver.c # 电机驱动实现
|
||||
│ ├── screen.c # 屏幕驱动实现
|
||||
│ ├── gbk_text.c # GBK文本实现
|
||||
│ ├── freertos.c # FreeRTOS任务实现
|
||||
│ └── main.c # 主程序
|
||||
├── Drivers/ # STM32 HAL驱动
|
||||
├── Middlewares/ # 中间件(FreeRTOS)
|
||||
├── Development_Docs/ # 开发文档
|
||||
│ └── Serial_Screen_Docs/ # 串口屏相关文档
|
||||
│ ├── LIST/ # MP3集成文档和脚本
|
||||
│ └── 测试记录/ # 功能测试记录
|
||||
├── build/ # 构建输出目录
|
||||
├── CMakeLists.txt # CMake配置
|
||||
├── anmo.ioc # STM32CubeMX项目文件
|
||||
└── README.md # 项目说明文档
|
||||
```
|
||||
|
||||
## 文档资源
|
||||
|
||||
### 开发文档
|
||||
- `Development_Docs/Serial_Screen_Docs/LIST/mp3_integration_summary.md` - MP3集成文档
|
||||
- `Development_Docs/Serial_Screen_Docs/LIST/mp3_usage_example.py` - MP3使用示例
|
||||
- `Development_Docs/Serial_Screen_Docs/LIST/rename_mp3_files.py` - MP3文件重命名脚本
|
||||
- `Development_Docs/Serial_Screen_Docs/LIST/verify_mp3_checksum.py` - MP3校验和验证脚本
|
||||
|
||||
### 测试记录
|
||||
- `Development_Docs/测试记录/` - 功能测试记录目录
|
||||
|
||||
## 技术支持
|
||||
|
||||
如有问题请联系开发团队或查看相关技术文档。
|
||||
如有问题请联系开发团队或查看相关技术文档。
|
||||
|
||||
## 版本信息
|
||||
|
||||
- **当前版本**: v2.0.0
|
||||
- **发布日期**: 2025年2月
|
||||
- **主要更新**:
|
||||
- ✅ 完整实现定时倒计时功能
|
||||
- ✅ 集成MP3语音提示系统
|
||||
- ✅ 优化电机控制(一档力度提升、降档平滑)
|
||||
- ✅ 新增分区屏幕显示
|
||||
- ✅ 实现LED运行指示和错误提示
|
||||
- ✅ 完善操作安全机制
|
||||
|
||||
## 许可证
|
||||
|
||||
本项目仅供学习和参考使用。
|
||||
|
||||
---
|
||||
|
||||
**注意**: 使用前请确保所有硬件连接正确,电源电压符合要求,避免在潮湿环境中使用。
|
||||
Reference in New Issue
Block a user