# stm32_spi_oled **Repository Path**: rinanfang/stm32_spi_oled ## Basic Information - **Project Name**: stm32_spi_oled - **Description**: 通过 PWM 驱动 6 路加热丝,并配合 6 路 PT100 温度传感器进行实时温度采集与闭环控制;温度与状态通过 SPI 屏幕(OLED/TFT)显示。 目标:稳定、独立地控制 6 个加热通道的温度 测温:PT100(每通道一支),经前端温度采集电路转换 加热:每通道一组 PWM,驱动功率级(如 MOSFET)加热丝 显示:板载 SPI 显示屏用于显示温度、状态与告警 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-11-03 - **Last Updated**: 2025-12-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目简介 !!!!!!!!!!注意晶闸管的贴片是和220V的零线连在一起,切勿触碰,我已经被电了一次了 本项目用于多通道恒温控制:通过 PWM 驱动 6 路加热丝,并配合 6 路 PT100 温度传感器进行实时温度采集与闭环控制;温度与状态通过 SPI 屏幕(OLED/TFT)显示。 - **目标**:稳定、独立地控制 6 个加热通道的温度 - **测温**:PT100(每通道一支),经前端温度采集电路转换 - **加热**:每通道一组 PWM,驱动功率级(如 MOSFET)加热丝 - **显示**:板载 SPI 显示屏用于显示温度、状态与告警 ## 功能特性 - **6 路独立恒温**:每个通道独立测温与 PWM 控制 - **实时显示**:显示当前温度、目标温度、加热占空比/状态 - **阈值告警(可扩展)**:超温/传感器异常可触发告警逻辑 - **参数可配置**:目标温度、采样/控制周期、PWM 限幅等(见配置说明) - **平滑控制**:支持测量/输出低通滤波与输出斜率限制(让调节“慢慢变、更稳”) - **双界面与交互**:温度显示界面/设置界面,支持编码器旋钮与按键交互 - **额外温度源**:支持 DS18B20 温度采集并显示(作为参考/环境温度) ## 硬件与系统说明 - **传感器**:PT100(建议使用专用测温前端/模块,将电阻—温度转换为 MCU 可读信号) - **可选传感器**:DS18B20(单总线温度传感器)读取并显示参考温度 - **功率驱动**:PWM → 功率级(MOSFET/固态继电器),驱动加热丝 - **显示接口**:SPI 显示屏(OLED/TFT),用于本地人机显示 - **MCU 平台**:STM32(基于 HAL 库工程) > 提示:PT100 需精确的测温前端(如恒流源+放大/ADC 或 MAX31865 等),请根据实际硬件原理图接入相应外设接口。 ## 目录结构(摘录) - `Core/`:STM32 HAL 工程主体(`Src/main.c`、`Inc/main.h` 等) - `User/`:用户逻辑与驱动(如 `QDTFT_demo.c`、`Lcd_Driver.h`、`my_define.h` 等) ## 快速开始 1. 准备环境: - Windows 开发机(推荐 Windows 11,PowerShell 终端) - STM32 开发工具(推荐 STM32CubeIDE 或 Keil MDK-ARM) 2. 打开工程:将本仓库导入 IDE,检查目标芯片、时钟与外设配置是否与硬件一致。 3. 编译与下载:连接仿真器(ST-LINK),编译通过后烧录至目标板。 4. 上电验证: - 显示屏应显示 6 路通道的实时温度/状态 - 加热丝会依据目标温度自动调节 PWM 占空比 ## 使用说明 - **通道定义**:共 6 路(CH1~CH6),一一对应 PT100 与加热丝。 - **目标温度**:默认值与上下限可在配置头文件中修改(示例:`User/my_define.h`)。 - **PWM 输出**:建议在 `TIM/PWM` 初始化中设定合适的频率与占空比范围,避免低频可闻噪音与高频开关损耗过大。 - **异常处理**:若 PT100 断路/短路或读数异常,应关闭对应通道加热并提示告警(请根据硬件与项目需求完善)。 ### 按键与交互 - `key_0`:在“温度显示界面”和“设置界面”之间切换 - 旋钮按下(`knob_push`):在设置界面中切换当前设置通道(`set_x` 在 1..6 循环) - 旋钮旋转(`knob_a`/`knob_b`):调整当前通道目标温度(范围约为 -9 ~ 99,单位用 `#` 代替 `°C`) - 读数夹紧范围:测量值在约 [-90, 90] 之间夹紧,避免显示/控制异常跳变 - 占空比限幅:PWM 占空比被限制在 [0.001, 1.0](约 0.1% ~ 100%) ## 控制算法(PID) 本项目提供 PID 闭环控制,并新增“平滑控制”能力: - 测量值低通滤波(meas_tau):让误差计算更稳,减少测量噪声干扰 - 输出值低通滤波(out_tau):让输出变化更柔和,避免突变 - 输出斜率限制(max_slew_per_sec):限制单位时间内的最大输出变化量 在 `Core/Src/main.c` 初始化 PID 后即可配置: - `PID_ConfigFilter(&pid, meas_tau_seconds, out_tau_seconds);` - `PID_ConfigSlew(&pid, max_rate_per_sec);` 示例(默认已启用): - `meas_tau = 1.0s`:测量低通较慢,先“稳一会儿” - `out_tau = 2.0s`:输出低通更慢,变化更平滑 - `max_slew_per_sec = 0.15`:每秒最多变化 0.15 的占空比 调参建议(按从“更稳/更慢”到“更灵敏/更快”) - 优先增大 `out_tau` 或减小 `max_slew_per_sec`,可显著降低输出波动与突变 - 需要更抗噪时,增大 `meas_tau`(但响应会更慢) - 与平滑配合时,可适当降低 `Kp/Ki`,整体更“稳重” ## 配置与扩展 - 在 `User/my_define.h`(及相关 `*.c` 文件)中可调整: - 目标温度、控制周期、告警阈值 - PWM 频率与占空比限幅 - 显示刷新与页面布局 - 可按需加入更先进的控制算法(如 PID/自整定),或串口/总线下位机通信。 ## 版本信息 - 当前版本:v0.2.0(2025-11-08) ### 变更记录 - v0.2.0(2025-11-08) - PID 新增“平滑控制”能力: - 测量值低通滤波(`meas_tau`) - 输出值低通滤波(`out_tau`) - 输出斜率限制(`max_slew_per_sec`) - 新增 API:`PID_ConfigFilter`、`PID_ConfigSlew` - 在 `Core/Src/main.c` 初始化时默认启用:`meas_tau=1.0s`、`out_tau=2.0s`、`max_slew_per_sec=0.15` - 使用 # 代替 摄氏度 - 温度闭环控制 - 两个界面 一个是温度显示界面, 一个是设置界面 - 新增 DS18B20 温度采样显示(`DS18B20_Get_Temp`,以 `machine.ds18b20_tempture` 展示) - 交互逻辑:`key_0` 切换模式;`knob_push` 轮换 `set_x`;旋钮旋转调节目标温度 - 取值限幅:测量值夹紧至 [-90, 90];PWM 占空比夹紧至 [0.001, 1.0] - 更新文档:增加 PID 平滑与调参说明 ## 安全注意事项 - 加热器具备潜在高温与功率风险,务必加入硬件级限流/过温保护。 - 对每路加热功率做充分热设计,确保导线与器件额定值裕量。 - 出厂/长期运行前进行温度标定与异常工况测试。 ## 免责声明 本项目提供参考实现,实际应用需依据您的硬件原理图与安全规范进行验证与加固。请对因使用本项目造成的任何风险自行负责。