基于 8051 单片机(Keil C51 工程)的电动汽车充电桩自动控温风扇控制项目。
项目核心流程:温度采集 -> 限幅滤波 -> PID 控制 -> PWM 输出 -> LCD 实时显示。
- 基于 DS18B20 的温度采集(主流程默认使用)
- 位置式 PID 控温(
kp=0.8,ki=0.1,kd=0.5) - Timer0 中断软件 PWM 输出(占空比
0~100) - LCD1602 显示当前温度、目标温度、PWM 输出
- 按键调节目标温度(KEY3 增,KEY4 减)
- 预留模块:DHT11、DS1302、ADC0832、UART 通信
| 模块 | 型号/说明 | 接口 |
|---|---|---|
| MCU | STC89C52(8051 兼容) | GPIO / Timer / UART |
| 温度传感器 | DS18B20 | 1-Wire(P3.7) |
| 显示 | LCD1602 兼容字符屏 | P0 数据口 + P2 控制口 |
| 执行器 | 风扇(经驱动级) | PWM/GPIO(P1.1) |
| 按键 | KEY1~KEY4 | P2.0 ~ P2.3 |
| 预留 RTC | DS1302 | 三线接口 |
| 预留 ADC | ADC0832 | 三线接口 |
| 预留温湿度 | DHT11 | 单总线时序 |
- 运行模式:裸机(无 RTOS)
- 调度方式:主循环 + 中断
- 中断:
tm0_isr:软件 PWM 输出Uart_Isr:UART 收发中断处理
FOSC = 11059200BAUD = 9600WDYZ = 251(显示逻辑对应25.1)- PID:
kp=0.8,ki=0.1,kd=0.5
.
├── USER/ # 用户核心代码
│ ├── main.c # 主流程、PID、按键、定时中断
│ ├── DS18.c/.h # DS18B20 驱动
│ ├── lcd.c/.h # LCD 驱动
│ ├── UART1.c/.h # 串口驱动
│ ├── delay.c/.h # 延时函数
│ ├── ad0832.c/.h # ADC0832(预留)
│ ├── ds1302.c/.h # DS1302(预留)
│ ├── dh11.c/.h # DHT11(预留)
│ └── PID.c/.h # 历史遗留文件(当前主逻辑未使用)
├── build/ # 构建产物(自动生成)
├── Listing/ # 列表文件(自动生成)
├── Obj/ # 目标文件(自动生成)
└── Thermo-Fan.uvproj # Keil 工程文件
在 VS Code 中可直接执行任务:
buildflashbuild and flash
或在 Keil 中打开 Thermo-Fan.uvproj 后编译下载。
- 上电后观察 LCD 是否正常显示。
- 检查温度刷新是否约每 300ms 更新。
- 按 KEY3/KEY4 调节目标温度,观察 PWM 值与风扇转速变化。
getTmpValue()采集 DS18B20 温度。Limit_Temperature()对突变温度进行限幅。PID_Calc()输出占空比ks。tm0_isr()依据ks生成 PWM,驱动风扇。show()刷新 LCD 显示。
- 建议将
PID_Calc从main.c拆分为独立控制模块,便于调参与测试。 - 若启用串口协议,建议新增接收缓冲区和帧状态机。
- 若扩展多传感器,建议统一采样接口层,减少主循环耦合。
当前仓库未声明 License。如需开源发布,建议补充 LICENSE 文件。