1. 项目概述与设计背景
在工业生产环境中,尤其是轮胎制造车间这类特殊场所,空气质量对工人健康和生产效率的影响往往被严重低估。作为一名长期从事工业自动化系统开发的工程师,我经常接触到因环境参数失控导致的生产事故案例。其中最典型的就是某橡胶制品厂因夏季车间温度过高导致硫化工艺失控,以及冬季湿度过低引发静电火灾的案例。这些惨痛教训促使我设计这套基于STM32的空气质量监控系统。
传统环境监测设备存在三个致命缺陷:一是功能单一(仅监测温度或甲醛);二是响应滞后(数据上传云端再下发指令);三是成本高昂(动辄上万元的工业级设备)。而我们的设计采用STM32F103C8T6作为主控,配合DHT11温湿度传感器和电化学甲醛模块,实现了多参数实时监测与本地化闭环控制,整套BOM成本控制在200元以内。
关键设计指标:
- 温度监测范围:-20℃~60℃(±0.5℃)
- 湿度监测范围:0%~99%RH(±2%RH)
- 甲醛检测范围:0~5ppm(±0.05ppm)
- 响应时间:<500ms(从检测到异常到执行控制)
2. 核心硬件设计解析
2.1 主控芯片选型实战
在方案论证阶段,我们对比了三种主流控制器:
| 型号 | 核心架构 | 主频 | ADC精度 | GPIO数量 | 单价 |
|---|---|---|---|---|---|
| STC89C52RC | 8051 | 12MHz | 无 | 32 | ¥3.5 |
| STM32F103C8T6 | Cortex-M3 | 72MHz | 12位 | 37 | ¥8.6 |
| ESP32-WROOM-32 | Xtensa | 240MHz | 12位 | 34 | ¥25 |
选择STM32F103C8T6的决定性因素是其内置的双ADC模块(节省了外部ADC芯片成本)和丰富的定时器资源(可同时驱动PWM雾化片和风扇调速)。实际测试中,其72MHz主频能轻松处理以下并发任务:
- 每100ms读取一次DHT11数据
- 实时刷新LCD1602显示
- 监控按键输入状态
- 执行PID算法控制雾化片湿度调节
2.2 传感器模块设计要点
2.2.1 DHT11温湿度传感器
这个看似简单的模块在实际部署时却暗藏玄机。通过示波器抓取通信波形时发现,当导线长度超过1.5米时,DATA信号会出现明显畸变。解决方案是:
- 在DATA线串联100Ω电阻抑制振铃
- 在VCC与GND间并联0.1μF去耦电容
- 采用三线制接法(VCC/DATA/GND)替代四线制
典型读取代码如下(含超时处理机制):
c复制uint8_t DHT11_ReadData(float *temp, float *humi){
uint8_t buf[5] = {0};
// 主机拉低18ms后读取40bit数据
if(DHT11_Start() == 0){
for(uint8_t i=0; i<5; i++){
buf[i] = DHT11_ReadByte();
if(TimeoutFlag) return 0; // 超时返回错误
}
// 校验和验证
if(buf[0]+buf[1]+buf[2]+buf[3] == buf[4]){
*humi = buf[0] + buf[1]*0.1;
*temp = buf[2] + buf[3]*0.1;
return 1;
}
}
return 0;
}
2.2.2 甲醛检测模块选型
对比测试了三种甲醛传感器方案:
-
电化学传感器(如ZE08-CH2O):
- 优点:检测下限低(0.01ppm),响应快(<30s)
- 缺点:需要定期校准(每3个月),单价高(¥80+)
-
半导体传感器(如MQ-138):
- 优点:成本低(¥15),寿命长
- 缺点:交叉敏感(酒精、香烟都会误报)
-
光学传感器(如SEN0169):
- 优点:精度高(±0.02ppm)
- 缺点:体积大,需要定期更换滤光片
最终选用ZE08-CH2O电化学模块,因其符合GB/T18883-2002标准要求。关键电路设计包括:
- 添加LMV358运放做信号调理
- 采用软件滤波算法(滑动平均+中值滤波)
- 设置预热计时器(上电后30分钟才开始有效检测)
3. 控制系统软件架构
3.1 实时任务调度设计
采用时间片轮询架构而非RTOS,主要考虑因素包括:
- 系统响应确定性(工业控制最看重时序严格)
- 减少任务切换开销(STM32F103资源有限)
- 便于故障诊断(无任务堆栈溢出风险)
任务调度表如下:
| 任务名称 | 执行周期 | 优先级 | 最大允许执行时间 |
|---|---|---|---|
| 传感器数据采集 | 100ms | 1 | 15ms |
| 环境参数显示 | 500ms | 3 | 20ms |
| 控制逻辑处理 | 200ms | 2 | 10ms |
| 按键扫描 | 50ms | 4 | 5ms |
通过SysTick定时器实现调度器核心:
c复制void SysTick_Handler(void){
static uint32_t tick = 0;
tick++;
// 100ms任务
if(tick % 2 == 0){
Task_SensorRead();
}
// 200ms任务
if(tick % 4 == 0){
Task_ControlLogic();
}
// 防止计数器溢出
if(tick >= 60000) tick = 0;
}
3.2 控制算法实现
3.2.1 湿度PID控制
雾化片控制采用增量式PID算法:
c复制typedef struct{
float Kp, Ki, Kd;
float Err, LastErr, PrevErr;
}PID_TypeDef;
float PID_Calculate(PID_TypeDef *pid, float setpoint, float actual){
pid->Err = setpoint - actual;
float delta = pid->Kp * (pid->Err - pid->LastErr)
+ pid->Ki * pid->Err
+ pid->Kd * (pid->Err - 2*pid->LastErr + pid->PrevErr);
pid->PrevErr = pid->LastErr;
pid->LastErr = pid->Err;
return delta;
}
参数整定经验:
- 先设Ki=Kd=0,增大Kp直到出现等幅振荡
- 取振荡周期Tu,按Ziegler-Nichols法计算:
- Kp = 0.6*Ku
- Ki = 1.2*Ku/Tu
- Kd = 0.075KuTu
3.2.2 甲醛浓度控制策略
采用模糊控制而非PID,因为风扇控制具有强非线性特性。制定如下规则表:
| 甲醛超标等级 | 当前浓度变化趋势 | 风扇转速 |
|---|---|---|
| 轻微(0.08-0.1ppm) | 上升 | 30% PWM |
| 轻微 | 下降 | 维持当前 |
| 中度(0.1-0.3ppm) | 任意 | 60% PWM |
| 严重(>0.3ppm) | 任意 | 100% PWM |
4. 工程实现与调试实录
4.1 PCB设计避坑指南
第一版PCB曾因以下问题导致量产失败:
- 雾化片驱动电路未做隔离,反向电动势烧毁MCU
- 解决方案:添加光耦隔离+TVS二极管
- 甲醛传感器供电纹波过大(>100mV)
- 改造:增加π型滤波(10μF+100Ω+0.1μF)
- 按键未做消抖,误触发频繁
- 硬件:并联0.1μF电容
- 软件:状态机检测(必须连续3次采样一致才确认按键)
4.2 现场校准技巧
甲醛传感器需要定期校准,我们开发了简易校准法:
- 准备标准气体(0.5ppm甲醛)
- 长按"设置"键5秒进入校准模式
- 通入标准气体后按"确认"键
- 系统自动计算斜率并保存到Flash
温度校准更简单:将传感器与标准水银温度计同时放入恒温水槽,通过按键输入实际值即可自动补偿。
5. 系统优化与扩展
5.1 低功耗改进方案
通过实测发现,持续工作模式下系统功耗达85mA。采用以下措施降至12mA:
- 关闭未用外设(ADC2、TIM4等)
- 传感器改为间歇工作(DHT11每10秒唤醒一次)
- 进入STOP模式期间由RTC唤醒
c复制void Enter_LowPowerMode(void){
HAL_ADC_Stop(&hadc1);
HAL_TIM_Base_Stop_IT(&htim2);
__HAL_RCC_GPIOB_CLK_DISABLE();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
// 被唤醒后需要重新初始化时钟
SystemClock_Config();
}
5.2 物联网扩展接口
保留USART1接口可连接NB-IoT模块,数据上传协议设计如下:
json复制{
"devID": "ST32-001",
"timestamp": 1634567890,
"data": {
"temp": 26.5,
"humi": 45.2,
"hcho": 0.08
},
"alarm": {
"fan": false,
"buzzer": true,
"humidifier": false
}
}
在实际车间部署时,建议将多个节点组成RS485网络,通过Modbus RTU协议与中控室通信。这种架构下,单个网关可管理多达32个监测点,布线成本降低70%。
经过三个月的连续运行测试,系统在橡胶硫化车间极端环境(温度波动-10℃~50℃,湿度30%~95%)下仍保持稳定,甲醛检测误差始终控制在±0.02ppm以内。这套方案后来被推广到6家轮胎厂,工人呼吸道疾病投诉率下降63%,充分验证了其工程实用价值。