1. 项目背景与核心需求
去年冬天帮朋友改造老式注塑机温控系统时,发现市面上成品PLC温控模块要么功能冗余要么价格虚高。索性用STM32F103C8T6开发板为核心,配合K型热电偶和固态继电器,从零搭建了一套低成本温控系统。实测控温精度可达±0.5℃,成本不到200元,特别适合小型工业设备改造。
这套系统的核心诉求很明确:
- 替代老式机械温控器,解决触点老化导致的温度漂移问题
- 实现0-300℃范围内可编程温度曲线控制
- 具备过温保护和异常报警功能
- 保留原设备的急停开关等安全回路
2. 硬件架构设计
2.1 主控选型方案
选用STM32F103C8T6(蓝色pill开发板)基于三点考量:
- 内置12位ADC满足热电偶采样需求
- 72MHz主频可保证PID运算实时性
- 市面上存量充足且开发资料齐全
注意:务必选择正版ST芯片,某宝上有些兼容版ADC线性度不达标
2.2 温度采集模块
采用MAX6675热电偶转换模块,相比DS18B20等数字传感器:
- 支持K型热电偶直接接入
- 自带冷端补偿和信号放大
- SPI接口节省IO资源
- 0.25℃分辨率满足工业需求
接线时特别注意:
- 热电偶正负极必须正确连接
- 模块与MCU共地处理
- 远离电磁干扰源(如继电器)
2.3 功率驱动单元
选用FOTEK SSR-40DA固态继电器,关键参数:
- 40A负载能力(3倍余量设计)
- 过零触发减少电磁干扰
- 光电隔离增强安全性
实测发现需配合散热器使用,连续工作时外壳温度会升至60℃左右。
3. 软件实现细节
3.1 温度采集处理
// MAX6675数据读取示例 float Read_Temperature(void) { uint16_t raw_data; HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); HAL_SPI_Receive(&hspi1, (uint8_t*)&raw_data, 2, 100); HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); if(raw_data & 0x0004) return -1; // 热电偶断开检测 return (raw_data >> 3) * 0.25; // 转换为实际温度值 }3.2 PID算法实现
采用位置式PID控制器,关键参数:
typedef struct { float Kp; // 比例系数(建议2.5-3.0) float Ki; // 积分系数(建议0.01-0.05) float Kd; // 微分系数(建议1.0-2.0) float Error; // 当前误差 float Integral; // 积分项 float LastError;// 上次误差 } PID_Controller; float PID_Calculate(PID_Controller* pid, float setpoint, float feedback) { pid->Error = setpoint - feedback; pid->Integral += pid->Error; float output = pid->Kp * pid->Error + pid->Ki * pid->Integral + pid->Kd * (pid->Error - pid->LastError); pid->LastError = pid->Error; return output; }3.3 控制逻辑设计
采用状态机实现多段温控:
- 预热阶段:全功率加热至目标温度-10℃
- 恒温阶段:PID调节维持设定温度
- 保温阶段:允许±3℃波动降低能耗
- 报警状态:超过设定值+15℃立即切断电源
4. 现场调试要点
4.1 PID参数整定
通过临界比例度法确定基础参数:
- 先将Ki、Kd设为0,逐渐增大Kp至系统出现等幅振荡
- 记录此时的比例增益Ku和振荡周期Tu
- 按Z-N公式计算:
- Kp = 0.6*Ku
- Ki = 2*Kp/Tu
- Kd = Kp*Tu/8
4.2 抗干扰措施
- 热电偶信号线使用双绞线并套磁环
- 继电器输出端并联RC吸收回路(0.1μF+100Ω)
- PCB布局严格区分模拟/数字地
- 软件端添加滑动平均滤波
4.3 安全防护设计
- 硬件看门狗定时器(IWDG)
- 软件心跳包监测
- 双重过温保护(软件阈值+硬件温控开关)
- 紧急停止信号直连继电器控制端
5. 实测性能数据
测试条件:2000W加热管,环境温度25℃
| 指标 | 实测值 |
|---|---|
| 升温速率 | 12℃/min |
| 超调量 | ≤1.5℃ |
| 稳态误差 | ±0.3℃ |
| 温度恢复时间 | <30s |
6. 常见问题排查
6.1 温度读数跳变
- 检查热电偶接头是否氧化
- 测量MAX6675供电电压(需稳定5V)
- 在SPI时钟线加10kΩ上拉电阻
6.2 继电器误动作
- 确认控制端与负载端绝缘电压
- 检查MCU输出引脚驱动能力
- 避免继电器安装在振动部位
6.3 PID振荡严重
- 适当增大微分系数
- 降低采样频率至1Hz左右
- 检查加热器功率是否过大
这套系统经过半年连续运行验证,相比原设备节能15%以上,温度均匀性提升明显。后期准备增加Modbus RTU通讯接口,方便接入上位机监控系统。