1. 项目概述:当模糊逻辑遇上温控风扇
去年夏天,我在工作室调试一块STM32开发板时,发现传统的PID温控风扇在温度临界点附近频繁切换转速,发出恼人的嗡嗡声。这让我开始思考:有没有更接近人类思维方式的控制方法?于是,基于模糊控制的温控风扇设计应运而生。
这个项目的核心在于用模糊逻辑替代传统PID算法,实现更自然的温度调节。当环境温度从25℃缓慢上升到30℃时,风扇转速会像人类调节风速一样平缓增加,而不是在某个固定温度点突然跳变。这种控制方式特别适合对噪声敏感的场景,比如卧室、办公室或录音棚。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件架构设计
2.1 核心组件选型
我选择了STM32F103C8T6作为主控芯片,江湖人称"蓝pill",性价比极高。这款Cortex-M3内核的MCU具有:
- 72MHz主频,足够处理模糊算法
- 12位ADC,可读取模拟传感器
- 多达4个定时器,用于PWM生成
- 丰富的GPIO接口
温度传感器方面,DS18B20以其数字输出和±0.5℃的精度胜出。相比模拟传感器,它不需要额外的ADC电路,且采用单总线协议,只需一根数据线即可通信。
2.2 电机驱动方案
为了驱动12V直流风扇,我测试了三种方案:
- 普通三极管:成本低但效率差
- MOS管:效率高但需要复杂驱动电路
- L298N模块:集成双H桥,支持PWM调速
最终选择了L298N,虽然效率不是最高,但外围电路简单,自带散热片,特别适合原型开发。关键参数:
- 工作电压:5-35V
- 持续电流:2A
- 峰值电流:3A
- 内置续流二极管
3. 模糊控制系统实现
3.1 模糊化处理
首先需要将精确的输入量转换为模糊量。我们定义两个输入变量:
- 温度误差(e):当前温度与目标温度的差值
- 温度变化率(Δe):单位时间内温度的变化量
c复制// 温度误差的模糊集合定义
FuzzySet *e_NB = new FuzzySet(-10, -10, -8, -5); // 负大
FuzzySet *e_NS = new FuzzySet(-6, -4, -2, 0); // 负小
FuzzySet *e_Z = new FuzzySet(-1, 0, 0, 1); // 零
FuzzySet *e_PS
