# TempController_STM32F103 **Repository Path**: yanweiwei_1981/tempcontroller_stm32f103 ## Basic Information - **Project Name**: TempController_STM32F103 - **Description**: 微型温控项目 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-21 - **Last Updated**: 2026-06-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STM32F103 温控模块 基于STM32F103C8T6的高精度温度控制系统,支持TMP117温度传感器和MOSFET加热控制。 ## 项目结构 ``` TempController_STM32F103/ ├── Core/ # 核心代码 │ ├── Inc/ # 头文件 │ └── Src/ # 源文件 ├── Drivers/ # STM32 HAL驱动库 ├── Hardware/OLED/ # OLED驱动 ├── System/ # 系统模块(delay, sys) ├── MDK-ARM/ # Keil工程文件 ├── PC_Test_Software/ # 上位机测试软件 ├── Labwindows-CVI_Test_APP/ # LabWindows/CVI测试程序 └── Docs/ # 文档 ``` ## 硬件配置 | 外设 | 引脚 | 功能 | |------|------|------| | I2C1 | PB6(SCL), PB7(SDA) | TMP117温度传感器 | | TIM2_CH1 | PA0 | PWM加热控制(MOSFET驱动) | | USART1 | PA9(TX), PA10(RX) | 串口调试通信 | | USART3 | PB10(TX), PB11(RX) | Modbus RS485通信 | | SPI1 | PA4(CS), PA5(SCK), PA7(MOSI) | OLED显示屏 | | LED | PC13 | 状态指示灯 | ## 调试进度记录 ### 2026-06-21 - [x] 项目框架搭建完成 - [x] STM32 HAL库配置 - [x] I2C1初始化(用于TMP117通信) - [x] TIM2 PWM配置(1kHz,用于MOSFET控制) - [x] USART1初始化(9600bps,调试串口) - [x] SPI1初始化(用于OLED通信) - [x] GPIO初始化(LED、OLED控制引脚) - [x] TMP117驱动开发完成 - [x] PID控制器实现 - [x] 串口协议实现 - [x] OLED显示屏驱动(SSD1315) - [x] EEPROM参数存储模块 - [x] 模拟温度模式调试通过 - [x] LED闪烁指示功能验证通过 **待调试项(等待硬件):** - [ ] TMP117温度传感器焊接与验证 - [ ] MOSFET驱动模块焊接与验证 - [ ] 真实温度读取测试 - [ ] PID温度控制闭环调试 - [ ] OLED显示效果优化 - [ ] Modbus RS485通信测试 - [ ] 高温/低温告警功能验证 - [ ] 参数保存与恢复功能测试 ### 调试注意事项 1. **模拟温度模式**:当前 `SIMULATE_TEMP_ENABLE = 1`,可直接测试PID控制和OLED显示 2. **硬件连接**:TMP117 AD引脚接地时I2C地址为0x48 3. **PWM输出**:PA0引脚输出1kHz PWM,控制MOSFET驱动加热模块 4. **串口调试**:USART1(PA9/PA10),波特率9600,用于打印调试信息 ### 测试命令(串口) 通过串口发送以下命令测试功能: ``` :R # 读取当前温度 :S37.0 # 设置目标温度为37°C :M1 # 启动温控 :M0 # 停止温控 :K # 读取PID参数 :K2.0,0.5,1.0 # 设置PID参数 :G # 获取完整状态 :W # 保存参数到EEPROM :D # 恢复默认参数 :V # 读取版本号 ``` ### 编译环境 - Keil MDK-ARM v5.x - STM32CubeMX - Python 3.6+(上位机软件) ### 固件版本 - 当前版本:V1.3 - 默认目标温度:37°C - 默认PID参数:Kp=1.0, Ki=0.1, Kd=0.5 ## 功能模块说明 ### 1. TMP117温度传感器驱动 - **文件**: Core/Src/tmp117.c - **接口**: I2C(100kHz) - **精度**: ±0.1°C(典型值) - **温度范围**: -55°C ~ 150°C - **分辨率**: 0.0078125°C(16位ADC) ### 2. PID控制器 - **文件**: Core/Src/pid_controller.c - **控制周期**: 100ms - **输出范围**: 0~100%(对应PWM占空比) - **参数**: Kp(比例), Ki(积分), Kd(微分) ### 3. OLED显示屏驱动 - **文件**: Core/Src/ssd1315.c - **芯片**: SSD1315(128×64像素) - **接口**: SPI(软件模拟) - **显示模式**: 温度模式、状态模式、简洁模式 ### 4. 串口协议 - **文件**: Core/Src/uart_protocol.c - **格式**: ASCII协议(以冒号开头) - **通信速率**: 9600bps - **命令类型**: 读温度、设目标、启停控制、PID参数、状态查询 ### 5. EEPROM存储 - **文件**: Core/Src/eeprom_storage.c - **存储介质**: STM32内部Flash(模拟EEPROM) - **存储内容**: 目标温度、PID参数、告警阈值、运行模式、温度偏移 ## 硬件调试步骤 ### 步骤1:基础硬件检查 1. 检查电源连接(5V/3.3V) 2. 确认USB转串口连接正常 3. 验证ST-Link下载器连接(SWD接口) 4. 检查LED是否正常闪烁(PC13) ### 步骤2:串口调试 1. 打开串口助手(波特率9600,8N1) 2. 上电后应看到启动信息 3. 发送 `:R` 命令读取温度(模拟模式下应有返回) 4. 发送 `:V` 命令验证版本号 ### 步骤3:TMP117传感器调试 1. **焊接传感器**: 将TMP117焊接到电路板 2. **确认I2C地址**: 根据AD引脚配置确认地址(默认0x48) 3. **读取设备ID**: 发送读取命令验证通信 4. **读取温度**: 对比室温确认准确性 5. **校准偏移**: 通过 `:Oxxx.x` 命令调整温度偏移 ### 步骤4:MOSFET加热控制 1. **连接加热模块**: 将MOSFET驱动板连接到PA0引脚 2. **测试PWM输出**: 设置目标温度高于当前温度 3. **启动温控**: 发送 `:M1` 启动PID控制 4. **观察PWM**: 使用示波器观察PA0引脚的PWM波形 5. **验证加热效果**: 观察温度是否上升 ### 步骤5:OLED显示调试 1. **检查SPI连接**: PA4(CS), PA5(SCK), PA7(MOSI) 2. **检查控制引脚**: PA3(DC), PA8(RES) 3. **上电检查**: 屏幕应显示温度信息 4. **切换显示模式**: 通过串口命令切换显示模式 ## PID参数调优指南 ### 参数作用 | 参数 | 作用 | 调整影响 | |------|------|----------| | Kp | 比例控制 | 增大响应速度,过大易振荡 | | Ki | 积分控制 | 消除稳态误差,过大易超调 | | Kd | 微分控制 | 抑制振荡,过大易受噪声影响 | ### 调优步骤 1. **初始设置**: Kp=1.0, Ki=0.0, Kd=0.0 2. **增大Kp**: 直到温度出现轻微振荡 3. **减小Kp**: 回到不振荡的最大值 4. **增加Ki**: 逐步增加直到消除稳态误差 5. **增加Kd**: 减小振荡,改善响应速度 ### 推荐参数 | 应用场景 | Kp | Ki | Kd | |----------|----|----|----| | 快速升温 | 2.0 | 0.2 | 0.5 | | 稳定控温 | 1.0 | 0.1 | 0.3 | | 高精度控温 | 0.5 | 0.05 | 0.2 | ## 常见问题排查 ### 问题1:串口无输出 - 检查串口线连接(TX/RX是否交叉) - 确认波特率设置(9600) - 检查USART1引脚配置(PA9/PA10) - 验证电源是否正常 ### 问题2:TMP117读取失败 - 检查I2C引脚连接(PB6=SCL, PB7=SDA) - 确认传感器已正确焊接 - 检查I2C上拉电阻(4.7kΩ) - 验证设备地址是否正确(0x48) ### 问题3:PWM输出无效果 - 检查PA0引脚连接 - 确认MOSFET驱动板供电正常 - 验证TIM2配置是否正确 - 使用示波器测量PWM波形 ### 问题4:OLED不显示 - 检查SPI引脚连接 - 确认DC和RES引脚状态 - 检查OLED屏幕供电 - 验证SSD1315初始化流程 ### 问题5:温度控制不稳定 - 检查加热功率是否足够 - 调整PID参数(减小Kp或增加Kd) - 检查传感器安装位置(远离热源) - 增加控制周期或采样平均 ## 调试工具 ### 硬件工具 - ST-Link V2/V3(程序下载与调试) - USB转TTL串口模块(串口通信) - 示波器(测量PWM波形) - 万用表(测量电压和电流) ### 软件工具 - Keil MDK-ARM(代码编译与调试) - STM32CubeMX(外设配置) - 串口助手(串口调试) - PC测试软件(上位机监控) ## 注意事项 1. **电源安全**: 加热模块工作时会产生高温,注意散热 2. **传感器安装**: TMP117应安装在被测物体附近,避免直接接触热源 3. **MOSFET驱动**: 确保驱动板能承受所需电流,必要时增加散热片 4. **参数保存**: 重要参数通过EEPROM保存,避免掉电丢失 5. **告警功能**: 设置合理的高温/低温告警阈值,确保安全 ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_feature 分支 3. 提交代码 4. 新建 Pull Request 5. 代码推送到远程仓库:git push origin master 6. 代码强制推送到仓库:git push -f origin master