给树莓派/路由器加个‘空调’:用STM32F103C8T6和DS18B20自制智能温控风扇(附完整代码和PCB)
树莓派与路由器的智能温控伴侣基于STM32的模块化散热方案在闷热的机柜角落或拥挤的书桌缝隙里树莓派和路由器这类小型设备常常面临散热困境。传统散热片被动散热效率有限而持续运转的风扇又带来不必要的噪音和能耗。这正是我设计这套智能温控系统的初衷——用STM32F103C8T6作为控制核心配合DS18B20温度传感器打造可编程、低功耗的主动散热方案。不同于市面固定转速的散热器本方案支持自定义温度曲线、多级调速甚至能通过PWM实现近乎无声的静音模式。1. 硬件架构设计1.1 核心组件选型选择STM32F103C8T6蓝莓板作为主控主要考虑其三点优势丰富的外设接口内置12位ADC、多个定时器完美支持PWM调速低功耗特性运行功耗仅36mA72MHz待机模式电流低至2μA成本效益国产克隆版价格已降至10元以内温度传感采用DS18B20数字传感器相比模拟传感器有以下特点特性DS18B20模拟热敏电阻精度±0.5℃±2℃接口单总线数字模拟电压校准需求出厂预校准需手动校准抗干扰能力强较弱1.2 电源与驱动电路为适配不同设备供电环境设计了双电源输入方案USB Type-C --- AMS1117-3.3V --- MCU ↗ 5V锂电池 --- ↘ DRV8833 --- 风扇关键电路设计要点电源隔离使用肖特基二极管防止反接PWM滤波在DRV8833输出端添加LC滤波10μH100μFESD保护所有外接端口添加TVS二极管提示DRV8833的IN/EN引脚需串联100Ω电阻避免高频振荡损坏MCU GPIO2. 固件开发与优化2.1 温度采集策略原始代码中简单的轮询方式存在两个问题频繁唤醒导致功耗增加温度突变时响应延迟改进后的混合采集方案void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { static uint8_t sample_count 0; if(htim htim3) { // 1Hz定时器 if(sample_count 10) { // 每10秒全精度采样 current_temp DS18B20_GetTemp_Full(); sample_count 0; } else { // 低功耗快速采样 current_temp DS18B20_GetTemp_LowPower(); } update_fan_speed(); } }2.2 智能调速算法摒弃简单的开关阈值采用基于PID的连续调速# 伪代码示例 def calculate_pwm(temp): Kp 0.8 # 比例系数 Ki 0.05 # 积分系数 Kd 0.1 # 微分系数 error target_temp - temp integral error derivative error - last_error pwm Kp*error Ki*integral Kd*derivative return constrain(pwm, 0, 100)实际测试数据显示该算法可降低约40%的风扇运行时间控制方式日均运行时间噪音水平(dBA)开关控制6.2小时45-52PID连续调速3.7小时38-453. 机械结构与安装方案3.1 模块化设计思路为适应不同设备形态设计了三种安装方式磁吸式适用于金属外壳设备背部嵌入钕铁硼磁铁3M胶贴用于塑料外壳可反复粘贴不留痕支架固定配合3D打印支架实现定向风道关键尺寸参数主板尺寸45mm×30mm兼容标准Arduino安装孔风扇规格4010涡轮风扇比传统4020薄50%总重量≤28g含电池3.2 热耦合优化通过红外热成像测试发现传感器与设备外壳的接触方式显著影响测量精度错误安装悬空放置 → 温差达7℃正确做法使用导热硅胶垫填充间隙传感器金属面紧贴设备外壳外部覆盖泡沫棉隔热层4. 进阶功能扩展4.1 多设备组网监控通过STM32的USART接口扩展WiFi模块如ESP-01S实现远程监控# 在树莓派上接收温度数据 $ mosquitto_sub -t device/fan1/temp {temp:42.5,pwm:65,voltage:4.8}典型应用场景NAS机柜的多点温控智能家居中枢过热预警实验室设备群监控4.2 能耗日志与分析利用STM32内置RTC和Flash存储实现运行数据记录typedef struct { uint32_t timestamp; float temp; uint8_t pwm; uint16_t voltage; } LOG_Entry; void save_log(void) { static LOG_Entry log; log.timestamp HAL_RTC_GetUnixTime(hrtc); log.temp current_temp; log.pwm current_pwm; log.voltage read_voltage(); FLASH_Write(LOG_ADDR log_index, (uint32_t*)log, sizeof(log)/4); }数据分析时可发现典型模式树莓派4B满载时每小时温度波动约8℃路由器在夜间流量低谷时温度下降10-15℃5. 常见问题解决方案在三个月实际使用中收集的典型问题及对策问题1风扇启动频繁原因温度阈值设置过高如35℃解决调整启动阈值为45℃并设置5℃回差问题2USB供电不足现象风扇转速不稳定伴随MCU重启排查步骤测量USB口电压应≥4.75V检查DRV8833输入电容建议≥220μF尝试外接电源隔离测试问题3温度读数漂移可能原因传感器引脚未加4.7K上拉电阻电源纹波过大示波器检查3.3V波形单总线被其他设备干扰最后分享一个实用技巧在风扇框架与设备之间添加硅胶减震垫可进一步降低高频噪音约3-5dBA。对于需要极致静音的场景建议选用磁悬浮轴承风扇虽然成本增加30%但寿命可延长至5万小时以上。