1. 项目概述
这个基于HC32L130单片机的智能壁挂炉控制系统,是我在去年冬天为朋友家老式壁挂炉改造时开发的一个实用项目。传统壁挂炉往往只有简单的机械式温控,不仅能耗高,而且使用体验差。通过这个小巧的嵌入式系统,我们实现了精准的PID温度控制、燃烧效率优化、远程蓝牙操控等现代化功能,让老设备焕发新生。
系统核心功能包括:
- 双模式温控(采暖/热水)
- 实时燃烧效率计算与显示
- 燃气用量统计
- 多时段定时开关机
- 三组温度预设快速切换
- 蓝牙无线控制
- 故障自诊断与记录
实测表明,这套系统使燃气利用率提升了12-15%,配合定时功能,每月节省燃气费用约20%。下面我将从硬件设计、软件架构到具体实现,详细分享这个项目的开发过程。
2. 硬件设计解析
2.1 主控选型考量
选择小华半导体的HC32L130单片机主要基于以下几点考虑:
- 低功耗特性:作为24小时运行的设备,MCU的待机电流仅1.5μA,运行模式4mA@16MHz
- 丰富外设:内置12位ADC、PWM定时器、UART等必要外设
- 成本优势:单价不到5元,BOM成本可控
- 开发便利:支持标准ARM开发工具链
2.2 关键传感器选型
温度检测方案
采用10K NTC热敏电阻(B值3950)检测水温,其特性为:
- 精度:±0.5℃(在20-80℃范围内)
- 响应时间:<15秒(水中)
- 电路设计:简单的分压电路,ADC采样
温度计算公式:
c复制float rt = 10000.0f * (4095.0f - adc_val) / adc_val;
float temp = 1.0f / (log(rt / 10000.0f) / B_VALUE + 1.0f / 298.15f) - 273.15f;
燃气检测方案
- 流量检测:霍尔脉冲式流量计(1000脉冲/升)
- 压力检测:MPX5100DP压力传感器(0-5kPa)
2.3 执行机构控制
- 燃气比例阀:PWM控制(频率1kHz)
- 变频风机:PWM控制(频率1kHz)
- 驱动电路采用光耦隔离+MOSFET方案,确保安全可靠
2.4 人机接口设计
- LCD1602:显示温度、模式、故障信息
- 五按键:上调、下调、模式切换、故障复位、预设切换
- 蓝牙模块:HC-05实现手机控制
3. 软件架构设计
3.1 代码组织架构
采用分层设计,模块化编程:
code复制├── hc32l130.h // 寄存器定义+宏定义+结构体
├── hc32l130_driver.c // 硬件驱动层
└── main.c // 业务逻辑层
3.2 关键功能模块
-
数据采集模块
- 温度采样(1Hz)
- 燃气流量统计
- 安全检测(火焰、风压、水流)
-
控制算法模块
- PID温度控制
- 燃烧效率计算
c复制if(Work_Mode == MODE_HEATING) { heat_effective = 600.0f * 4.186f * (Temp_Out - Temp_In); } else { heat_effective = 8.0f * 60.0f * 4.186f * (Temp_HotWater - 15.0f); } Burn_Efficiency = (heat_effective / (Gas_Volume_Real * 36000.0f)) * 100; -
用户交互模块
- 按键扫描与处理
- LCD显示更新
- 蓝牙指令解析
-
存储模块
- 故障码存储(FLASH)
- 定时任务存储
- 预设温度存储
4. 核心功能实现
4.1 PID温度控制实现
采用位置式PID算法,参数经过Ziegler-Nichols法整定:
c复制#define PID_KP 28.0f
#define PID_KI 0.45f
#define PID_KD 0.25f
uint8_t PID_Control(float target, float current) {
Err = target - current;
Integral += Err;
// 抗积分饱和
if(Integral > 200) Integral = 200;
if(Integral < -200) Integral = -200;
float output = PID_KP*Err + PID_KI*Integral + PID_KD*(Err-LastErr);
LastErr = Err;
// 输出限幅
if(output < 20) output = 20; // 最小开度
if(output > 100) output = 100;
return (uint8_t)output;
}
4.2 多时段定时功能
使用结构体数组存储定时任务:
c复制typedef struct {
uint8_t enable;
uint8_t hour_on;
uint8_t min_on;
uint8_t hour_off;
uint8_t min_off;
uint8_t mode;
uint8_t temp;
} TimerTask_t;
TimerTask_t TimerTask[MAX_TIMER_NUM];
定时检查逻辑:
c复制void Check_TimerTask() {
for(int i=0; i<MAX_TIMER_NUM; i++) {
if(!TimerTask[i].enable) continue;
if(sys_hour==TimerTask[i].hour_on && sys_min==TimerTask[i].min_on) {
Work_Mode = TimerTask[i].mode;
if(Work_Mode == MODE_HEATING)
SetTemp_Heating = TimerTask[i].temp;
else
SetTemp_HotWater = TimerTask[i].temp;
}
if(sys_hour==TimerTask[i].hour_off && sys_min==TimerTask[i].min_off) {
Work_Mode = MODE_STANDBY;
}
}
}
4.3 蓝牙通信协议设计
自定义简单文本协议:
code复制ON // 开启采暖
OFF // 待机
TSET55 // 设置温度55℃
TIME1230 // 设置时间12:30
PRE // 切换预设
解析实现:
c复制void BT_ParseCmd() {
if(strstr((char*)uart_rx_buf, "ON")) {
Work_Mode = MODE_HEATING;
}
else if(strstr((char*)uart_rx_buf, "TSET")) {
int t = atoi((char*)&uart_rx_buf[4]);
SetTemp_Heating = t;
}
// 其他指令处理...
}
5. 开发经验与优化技巧
5.1 关键参数调试心得
-
PID参数整定:
- 先设Ki=Kd=0,增大Kp直到系统振荡
- 取振荡周期Tu和增益Ku,按Z-N公式计算
- 现场微调时,优先保证稳定性而非响应速度
-
NTC温度采样优化:
- 添加0.1μF电容滤波
- 采用中值滤波算法
- 分段线性化校正(每5℃一个校准点)
-
燃气流量补偿:
c复制// 压力补偿 flow = flow * (GAS_STD_PRESSURE / Gas_Pressure);
5.2 常见问题排查
-
火焰检测不稳定:
- 现象:频繁误报熄火
- 解决:增加50ms延时滤波,调整离子针接地
-
LCD显示乱码:
- 检查初始化时序
- 确保EN信号脉冲宽度>450ns
- 电源电压稳定在5V±0.2V
-
蓝牙连接中断:
- 检查模块供电
- 确保UART波特率一致(9600bps)
- 添加AT+UART=9600,0,0指令初始化
5.3 功耗优化技巧
-
主循环加入延时:
c复制while(1) { // ...业务逻辑 Delay_ms(100); // 降低CPU占用率 } -
外设动态管理:
- 不使用时关闭ADC电源
- 降低PWM频率(1kHz→500Hz)
-
利用低功耗模式:
c复制__WFI(); // 等待中断
6. 项目扩展方向
-
物联网集成:
- 替换蓝牙为WiFi模块
- 对接云平台实现远程监控
-
能效优化:
- 添加室外温度补偿
- 学习用户习惯的智能调度
-
安全增强:
- CO浓度检测
- 泄漏自动关断
这个项目最让我满意的是它的实用价值——用不到100元的成本,显著提升了老式壁挂炉的能效和易用性。在零下15℃的实测中,系统稳定运行了整个采暖季,用户反馈操作简便且节能效果明显。
