STM32 TEC 温控与 PID 自动整定

📅 2026/7/19 4:04:52
STM32 TEC 温控与 PID 自动整定
1. 项目概述本项目基于STM32F407VET6实现了一个 TEC 温度采集与闭环控制系统。系统使用ADS1256采集 NTC 电桥差分电压通过温度模型换算实际温度再由增量式 PID控制DAC8568输出。项目同时加入了基于继电反馈振荡的 PID 自动整定、串口 DMA 通信、上位机命令解析和运行数据回传功能。硬件连接2. 系统工作流程flowchart TD A[系统上电] -- B[初始化时钟、GPIO、DMA、USART1] B -- C[初始化 DAC8568 与 ADS1256] C -- D[初始化 PID 控制器] D -- E[获得有效温度后启动自动整定] E --gt; F[ADS1256 经过滤波函数采集 AIN0-AIN1 差分码值] F --gt; G[码值转换为差分电压] G --gt; H[还原 NTC 节点电压] H --gt; I[将电压转换为NTC温度] I --gt; J{启动PID自动整定模式} J --gt;|自动整定| K[继电高低输出产生温度振荡] K --gt; L[统计振荡幅值和周期] L --gt; M[计算并写入 Kp、Ki、Kd] M --gt; N[进入增量式 PID 闭环控制] J --gt;|闭环控制| N N --gt; O[增量式 PID 计算等效温度输出] O --gt; P[温度设定值换算为 DAC 电压] P --gt; Q[DAC8568 输出电压至 TEC 控制通道] I --gt; R[USART1 每 500 ms 回传温度、电压和 ADC 原码] S[上位机命令] --gt; T[DMA 接收与命令解析] T --gt; U[设置温度、电流或 DAC 输出]3. 主要功能3.1 温度采集ADS1256 工作在差分采样模式当前使用AIN0 - AIN1。配置为 PGA1、50 SPS读取 24 位有符号码值。对多次采样结果排序并去掉头尾极值取剩下值的平均值降低瞬时噪声影响。将 ADC 原码换算为差分电压并结合 DAC2 参考电压还原 NTC 节点电压。3.2 NTC 温度换算根据 10 kΩ NTC、10 kΩ 分压电阻和 B3950 参数建立温度模型。实现“节点电压 → NTC 电阻 → 温度”的正向换算。通过B值公式实现“温度 → NTC 电压”的反向换算供 PID 输出映射使用。对无效电压、无效电阻及绝对温度范围进行检查。3.3 DAC 输出使用 GPIO 模拟串行时序驱动 8 通道 DAC8568。支持 05 V 电压输出和 065535 原始码输出。当前 TEC1 使用 DAC A 通道第二控制/参考通道使用 DAC C。保存各 DAC 通道最近一次输出码值便于主循环计算和数据回传。3.4 PID 闭环控制项目采用增量式 PIDΔu(k) Kp[e(k)-e(k-1)] Ki·e(k) Kd[e(k)-2e(k-1)e(k-2)]主要处理包括保存前两次误差并计算 PID 增量。小误差区域进行误差平滑和增量衰减减小稳态抖动。对 PID 等效温度输出进行限幅。将等效温度换算成 NTC 对应电压再通过 DAC 输出。3.5 PID 自动整定自动整定采用继电反馈法在目标温度附近交替输出高、低控制量。利用温度越过迟滞上下限产生稳定振荡。记录每个周期的峰谷幅值和振荡周期。检查最近多个周期是否稳定。根据继电幅值计算临界增益Ku和临界周期Tu。默认使用较保守的Tyreus–Luyben PID规则计算参数。按实际 200 ms 控制周期将连续 PID 参数转换为工程使用的离散增量式参数。成功后自动写入Kp、Ki、Kd并进入闭环控制。整定模块还包括温度安全限制、总超时、半周期超时、振荡幅值检查、失败恢复、手动终止和进度查询。3.6 串口通信USART1115200、8N1。RX 使用 DMA Circular 模式TX 使用 DMA Normal 模式。结合 IDLE、DMA 半满和 DMA 完成事件解析以\r\n结尾的命令。当前支持SETTEMPERATURE...SETCIRCUT...SETDAC0...SETDAC2...主循环每 500 ms 回传温度、ADC 差分电压、DAC 差分电压、DAC 通道电压和 ADC 原码。4. 我完成的主要工作使用 CubeMX 建立 STM32F407 工程完成 168 MHz 系统时钟、GPIO、USART1 和 DMA 配置。完成 ADS1256 软件时序驱动包括寄存器配置、差分通道选择、24 位有符号采样、滤波和电压换算。完成 DAC8568 软件时序驱动实现多通道初始化、电压输出、码值输出及输出状态记录。建立 NTC 电桥数学模型实现差分电压、节点电压、电阻和温度之间的双向换算。实现带小误差平滑、分段增量和输出限幅的增量式 PID 温控算法。实现非阻塞继电反馈 PID 自动整定加入周期稳定性判断、安全限制、超时和失败恢复。封装手动、自动整定和闭环三种控制模式使主循环只需周期调用统一控制任务。实现 USART1 DMA 收发、行命令解析、参数范围检查、DAC 手动控制和状态数据回传。在main.c中完成采集、换算、整定、闭环输出、命令处理和数据发送的整体集成。编写 ADS1256、DAC8568、NTC 模块配置说明并整理差分采样测试数据和误差统计。5. 工程文件说明5.1 CubeMX 与基础工程文件/目录作用.mxprojectSTM32CubeMX 工程辅助信息。TempCubeMX.iocMCU、时钟、GPIO、USART1、DMA 和中断配置源文件。Core/Inc/main.hADS1256、DAC8568 引脚定义及公共声明。Core/Inc/gpio.h、dma.h、usart.hCubeMX 外设初始化接口。Core/Inc/stm32f4xx_it.h中断处理函数声明。Core/Inc/stm32f4xx_hal_conf.hHAL 模块和系统参数配置。Core/Src/main.c系统初始化、主循环及所有功能模块的集成入口。Core/Src/gpio.cADS1256 和 DAC8568 GPIO 初始化。Core/Src/dma.cUSART1 RX/TX DMA 及中断配置。Core/Src/usart.cUSART1、DMA 通道和串口 GPIO 配置。Core/Src/stm32f4xx_it.cSysTick、USART1 和 DMA 中断转发。Core/Src/stm32f4xx_hal_msp.cHAL 底层全局初始化。Core/Src/system_stm32f4xx.cSTM32F4 系统时钟和核心启动支持。5.2 用户功能模块文件作用USER/ads1255.c/.hADS1255/ADS1256 驱动、差分采样、滤波和电压换算。USER/bsp_DAC8568.c/.hDAC8568 初始化、软件串行通信和多通道输出。USER/thermal.c/.hNTC 电桥、电阻、温度和电压换算。USER/formula.c/.hPID 数据结构、增量式 PID、温度到电压映射及 TEC 通道输出。USER/pid.c/.h继电反馈自动整定及手动/整定/闭环模式管理。USER/uart1_comm.c/.hUSART1 DMA 环形接收、行缓存、格式化 DMA 发送和异常恢复。USER/command_parser.c/.h上位机命令解析、参数检查、目标值和 DAC 输出控制。5.3 驱动库、启动和构建文件文件/目录作用Drivers/CMSIS/ARM Cortex-M4 内核、设备头文件和编译器适配层。Drivers/STM32F4xx_HAL_Driver/STM32F4 GPIO、DMA、UART、RCC、FLASH、PWR 等 HAL 驱动。MDK-ARM/startup_stm32f407xx.sSTM32F407 中断向量表和启动代码。MDK-ARM/RTE/Keil 运行环境组件配置。MDK-ARM/TempCubeMX.uvprojxKeil 工程文件。MDK-ARM/TempCubeMX.uvoptx、.uvguix*Keil 调试、界面和用户选项。MDK-ARM/TempCubeMX/编译产生的.o、.d、.crf、.map、.axf、.hex、日志等文件。MDK-ARM/*bak、.dep、.lst工程备份、依赖和汇编列表文件。5.4 配置与测试资料文件作用ADS1255_CubeMX配置流程.mdADS1256 引脚、CubeMX 和驱动接入说明。DAC8568_CubeMX配置流程.mdDAC8568 引脚配置、驱动和主函数调用说明。thermal配置.mdNTC 电桥原理、计算公式和主程序调用流程。增量式formula配置.md增量式PID的原理、计算过程说明。自动整定PID配置.md继电反馈自动整定通过振荡参数计算得到PID参数写入。数据整理差分.txtDAC 差分输出与 ADS1256 实测数据、误差及重复性统计。6. 当前工程状态系统能够完成 DAC 输出、ADC 差分采样、NTC 温度计算和串口数据输出。PID 自动整定任务采用非阻塞方式运行不会长时间阻塞主循环。自动整定成功后可直接切换到正常 PID 闭环控制。Keil 构建结果为0 个错误、17 个警告已生成 HEX 并完成下载验证。后续可继续处理浮点类型转换、文件末尾换行等编译警告并增加自动整定参数和结果的串口查询命令。7.运行结果演示视频STM32系统温控演示视频