1. 项目概述:风光互补智慧路灯系统设计
这个基于STM32的智慧路灯项目,是我去年为某工业园区设计的实际案例。系统采用太阳能+风能双供电模式,配合锂电池储能和智能调光功能,实现了完全离网运行的绿色照明方案。相比传统路灯,这套系统每年能为园区节省约60%的电费支出,特别适合无市电覆盖或电力不稳定的区域部署。
核心设计思路是通过环境能源最大化利用和智能化控制来平衡能耗。系统架构上分为三个层次:能源采集层(太阳能电池板+微型风力发电机)、能源管理层(TP4056充电芯片+锂电池+升压电路)、智能控制层(STM32+光敏传感器+WiFi模块)。这种分层设计保证了各模块的独立性,便于后期维护和功能扩展。
2. 硬件系统设计与选型
2.1 主控芯片选型与电路设计
选用STM32F103C8T6作为主控芯片主要基于三点考虑:首先,Cortex-M3内核提供足够的处理能力(72MHz主频)应对多任务需求;其次,内置的12位ADC可满足光敏电阻的精确采样;最后,丰富的外设接口(USART、GPIO等)方便连接各类模块。
最小系统电路设计要点:
- 复位电路:采用10kΩ上拉电阻+100nF电容组合,确保稳定复位
- 时钟电路:8MHz晶振配合22pF负载电容,实测频率误差<0.5%
- 调试接口:预留SWD接口,方便程序下载和调试
实际调试中发现,在PCB布局时需注意将去耦电容(100nF)尽量靠近芯片电源引脚,否则可能导致ADC采样异常。建议每个电源引脚单独配置去耦电容。
2.2 风光互补供电系统
2.2.1 太阳能充电模块
选用18V/20W多晶硅太阳能板,通过TP4056充电管理芯片为18650锂电池充电。关键参数计算:
- 太阳能板开路电压:18V
- TP4056最大输入电压:6V
- 因此需要分压电路:R1=10kΩ,R2=4.7kΩ,分压后电压=18×(4.7/(10+4.7))=5.75V
充电保护电路设计:
- 过压保护:TP4056内置4.2V截止
- 过流保护:通过PROG引脚电阻设定(1kΩ对应1A)
- 反接保护:SS34肖特基二极管
2.2.2 风力发电模块
采用小型垂直轴风力发电机(额定12V/10W),发电电路包含:
- 整流桥:GBJ2510 25A/1000V
- 储能电容:2200μF/25V电解电容
- 电压调节:LM2596降压至5V
风光互补系统的协同工作逻辑:
- 优先使用太阳能充电(效率更高)
- 当光照不足时自动切换至风力发电
- 两种能源同时存在时并行充电
2.3 升压与电源管理
锂电池输出经过MT3608升压芯片稳定至5V系统电压,关键参数配置:
- 反馈电阻:R1=1MΩ,R2=200kΩ
- 输出电压计算:Vout=0.6×(1+R1/R2)=5.1V
- 最大输出电流:2A(需加散热片)
电源路径管理采用MOSFET实现自动切换:
- 外部电源优先供电
- 断开外部电源时无缝切换至电池供电
- 切换响应时间<10ms
3. 核心功能实现细节
3.1 光敏检测与PWM调光
光敏电阻(GL5528)分压电路设计:
- 光敏电阻:暗电阻1MΩ,亮电阻10kΩ
- 分压电阻:10kΩ精密电阻
- ADC采样值换算公式:
c复制// 假设ADC为12位(0-4095) light_level = 4095 - ADC_Read(PA0); // 分4档控制 if(light_level > 3000) pwm_duty = 90%; // 档位4 else if(light_level > 2000) pwm_duty = 70%; // 档位3 else if(light_level > 1000) pwm_duty = 50%; // 档位2 else pwm_duty = 30%; // 档位1
PWM驱动电路设计:
- MOSFET选型:IRLZ44N(Vgs=5V可完全导通)
- 栅极驱动电阻:100Ω限流
- 续流二极管:FR107快恢复二极管
3.2 WiFi通信协议设计
采用ESP8266模块实现无线控制,自定义的简洁通信协议:
- 命令格式:*[指令字符]#
- *C#:关闭LED
- *A#:开启自动模式
- 数据上报格式:*[电池状态][充电状态]D[档位]#
- 示例:*BYD1#(电池供电,正在充电,档位1)
- *BND2#(电池供电,未充电,档位2)
AT指令配置流程:
bash复制AT+CWMODE=1 // 设置为Station模式
AT+CWJAP="SSID","password" // 连接WiFi
AT+CIPMUX=1 // 启用多连接
AT+CIPSERVER=1,8080 // 启动TCP服务器
3.3 锂电池管理策略
充放电保护机制:
- 过放保护:电压<3.3V时切断输出
- 过充保护:电压>4.2V时停止充电
- 温度保护:NTC检测,>60℃停止工作
电量估算算法:
c复制float get_battery_percent() {
float voltage = ADC_Read(PA1) * 3.3 / 4095 * 2; // 分压比1:1
if(voltage > 4.1) return 100;
else if(voltage > 3.8) return 60 + (voltage-3.8)*133;
else if(voltage > 3.5) return 30 + (voltage-3.5)*100;
else return voltage*8.57; // 3.0-3.5V线性区间
}
4. 软件架构与关键代码
4.1 主程序流程图
系统采用状态机设计模式,主要状态包括:
- 初始化状态:外设初始化
- 能源检测状态:检查供电来源
- 光照采集状态:ADC采样
- 通信处理状态:解析WiFi/串口命令
- 故障处理状态:异常检测
c复制while(1) {
switch(sys_state) {
case INIT_STATE:
hardware_init();
sys_state = POWER_CHECK;
break;
case POWER_CHECK:
check_power_source();
sys_state = LIGHT_SENSING;
break;
// 其他状态处理...
}
}
4.2 中断服务设计
关键中断配置:
- ADC采样中断:定时触发(1Hz)
- USART中断:接收WiFi数据
- TIM中断:PWM波形生成
ADC采样中断服务例程:
c复制void ADC1_IRQHandler() {
if(ADC_GetITStatus(ADC1, ADC_IT_EOC)) {
light_adc = ADC_GetConversionValue(ADC1);
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
}
}
5. 系统优化与实测数据
5.1 功耗优化措施
通过实测发现几个功耗优化点:
- 空闲时降低主频:从72MHz降至24MHz,节省约40mA电流
- 外设动态管理:不使用的接口时钟关闭
- WiFi模块间歇工作:每5分钟唤醒一次(保持心跳)
实测功耗对比:
| 工作模式 | 电流消耗 | 续航时间(2000mAh) |
|---|---|---|
| 全功率 | 320mA | 6小时 |
| 优化模式 | 180mA | 11小时 |
| 待机模式 | 5mA | 16天 |
5.2 环境适应性改进
针对不同环境的调整:
- 高寒地区:选用低温锂电池(-20℃可工作)
- 多风区域:增加发电机转速限制电路
- 高湿环境:PCB喷涂三防漆
6. 常见问题解决方案
6.1 充电异常排查
问题现象:锂电池无法充电
排查步骤:
- 测量太阳能板输出电压(正常应>7V)
- 检查TP4056的PROG引脚电阻(应为1kΩ)
- 测试BAT引脚电压(空载时应≈4.2V)
- 检查锂电池保护板是否触发
6.2 WiFi连接不稳定
解决方案:
- 调整ESP8266天线位置
- 修改WiFi模块供电电路(增加100μF电容)
- 优化TCP重连机制:
c复制void wifi_reconnect() {
while(ESP8266_SendCmd("AT+CWJAP?\r\n", "OK", 2000) != 1) {
ESP8266_SendCmd("AT+CWJAP=\"SSID\",\"PWD\"\r\n", "OK", 5000);
delay(1000);
}
}
6.3 PWM调光闪烁问题
可能原因及处理:
- 电源纹波过大:在LED驱动端增加470μF电容
- PWM频率过低:调整至1kHz以上
- MOSFET开关损耗:栅极增加10kΩ下拉电阻
7. 项目扩展方向
在实际部署后,我总结了几个有价值的扩展方向:
- 加入ZigBee组网:实现路灯之间的自组网通信
- 增加人体感应:通过红外传感器实现人来灯亮
- 远程OTA升级:通过WiFi更新固件
- 数据统计分析:记录能耗数据供后期优化
针对人体感应功能的硬件修改建议:
- 传感器选型:HC-SR501
- 电路连接:3.3V供电,信号线接PC13
- 软件处理:中断唤醒+防误触发算法
这个项目最让我满意的部分是风光互补供电系统的可靠性设计。在连续三个月的实地测试中,系统在各种天气条件下都保持了稳定运行,验证了硬件设计和控制策略的合理性。对于想复现项目的开发者,我建议特别注意锂电池的保护电路设计,这是系统安全运行的关键保障。
