拓冰建站拓冰建站
首页 / 资讯中心 / 正文

离网风光互补发电系统设计与MPPT算法仿真实现

简介这一定位于毕业设计场景的离线风光互补系统设计包面向新能源、电气工程相关专业学生与工程技术人员解决离网供电系统中风能/太阳能互补利用、能量管理与控制策略设计等问题。压缩包共7个文件、约1.27MB含1份PDF论文、3个MATLAB的m脚本、2个SchDoc原理图文件及1个说明txt分别覆盖系统方案论证、MPPT最大功率跟踪算法与硬件模块化电路设计结构清晰便于对照学习。内容从系统架构出发改进了最大功率跟踪控制策略提供Simulink仿真模型以及能量管理、蓄电池充放电保护等程序框架可帮助读者快速理解设计流程并复用代码。该思路已在毕业设计中应用目前已有113人学习适合需要完成类似课题或提升新能源系统设计能力的开发者参考。1. 离网站点供电为什么要把风和光搭在一起在基站、监控杆、小型气象站这类离网场景里负载真正需要的不是“两台发电机”而是一个不会在傍晚断电的供电系统。光伏白天出力稳定、夜间归零风机恰好相反夜间和恶劣天气下往往出力更高两者叠加后蓄电池的配置容量能下降三成以上。这套小型离线风光互补式发电系统解决的就是这个协调问题用 MATLAB/Simulink 做仿真验证用 PO 和 TSR 两种策略分别跟踪光伏和风机的最大功率点硬件落在 24V 直流母线上统一完成能量调度和蓄电池充放电管理。给毕业设计或中小型离网项目做参考重点不是抄原理图而是看懂 MPPT_single.m、MPPT_wind.m 里的算法边界以及原理图中保护和采样电路为什么那样接。2. 系统架构与母线能量管理2.1 供电拓扑与母线电压分级这套系统的骨架是一条 24V 直流母线光伏组件经过 Boost 变换器接入风机经过三相整流后再由 Boost 升压接入蓄电池通过双向 Buck-Boost 挂在母线上负载直接从母线取电。母线电压取得低功率器件和绝缘成本都小但电压太低会让线路压降占比变大24V 是中小型离网系统里平衡得比较好的选择12V 蓄电池两节串联正好匹配。母线电压在这里不只是电源它本身就是一种“通信信号”。不同电压区间对应不同的工作状态控制器只需要采样母线电压就能判断该让谁出力、让谁退出母线电压区间系统状态控制动作小于 21.0V过放保护切断负载等待恢复21.0V ~ 22.5V电池放电Buck-Boost 放电回路投入22.5V ~ 27.0V正常范围双向变换器根据负载决定充放27.0V ~ 28.5V电池接近充满转入恒压充电或浮充大于 28.5V母线过压投入泄荷电阻限制 MPPT 功率这套分级逻辑写进软件后很多硬件上的“联动保护”就不需要额外搭比较器电路了。常见做法是在主循环里每 10ms 采样一次母线电压用滞回比较防止在边界上反复切换。比如 21.0V 切断负载后要等电压回升到 22.5V 才重新接入避免夜间风机阵风导致负载频繁通断。2.2 Simulink 仿真中的工作模式切换在 MATLAB/Simulink 里做系统级仿真时我会把能量管理拆成三个模块光伏 MPPT 子模块、风机 MPPT 子模块、蓄电池管理子模块。三个模块之间不直接通信而是通过一个共享的母线电压变量互相约束这样更接近硬件上的实际耦合关系。母线电压由所有子模块的电流代数和决定任何一侧的出力变化都会体现在电压上。仿真中先判断模式再决定 MPPT 是否使能。核心逻辑可以写成这样一段离散状态判断% mode_switch.m —— 母线电压驱动的模式切换 Vbus read_bus_voltage(); % 读取母线电压 Pload 100; % 固定负载功率 if Vbus 21.0 mode 0; % 过放停机 elseif Vbus 22.5 mode 1; % 电池放电MPPT 不使能 elseif Pload Ppv_max Pwind_max mode 2; % 发电不足进入放电模式 elseif Vbus 28.5 mode 3; % 母线过压泄荷并退出 MPPT else mode 4; % 正常 MPPT 工作 end代码里read_bus_voltage()在 Simulink 中对应一个电压测量块的输出Ppv_max和Pwind_max由两个 MPPT 模块实时估算。这里的关键点是模式优先级电量保护高于 MPPT 跟踪。如果电池已经入过放区继续跑最大功率跟踪反而会把母线电压拉垮先切到放电模式保负载等电压回升再恢复跟踪这样的顺序不能反。2.3 为什么离线系统必须先稳母线再进 MPPT并网系统有电网撑住电压MPPT 只管追功率就行。离线系统没有这个“电压锚点”母线电压要靠变换器自己建立。实际调试中常见的故障是光伏 Boost 一上电就进入 MPPT占空比大幅摆动母线电压跟着剧烈波动最终系统死锁。解决办法是给启动加一段斜坡先以固定小占空比让母线电容充到 24V 附近再启动 MPPT 搜索。MPPT_single_start.m 里那段初始化正是干这个的它会设置起始占空比、清空历史功率记录、等待母线稳定后才会进入 MPPT_single.m 的主循环。3. MPPT 算法选型与 MATLAB 代码实现3.1 PO、电导增量法与 TSR 的适用边界光伏组件和风机虽然都做最大功率跟踪但被控对象的特性差异很大。光伏的 P-V 曲线是单峰用扰动观察法PO或电导增量法INC都能收敛到全局最大点风机则不同它的输出功率随风速变化剧烈而且机械时间常数大PO 直接套用会频繁误判方向。算法适用对象优点需要留意的点PO光伏实现简单不依赖组件模型稳态时在 MPP 附近振荡步长难选电导增量法光伏判断基于 dI/dV 与 -I/V 的比较方向更明确对电流采样噪声敏感需要滤波TSR风机响应快风速变化时不丢失目标需要知道 λ_opt 和叶轮半径在 MPPT_single.m 里用的是电导增量法——在最大功率点处dP/dV 等于零展开后得到条件 dI/dV -I/V。把这个关系转换成占空比修正方向比 PO 少一层功率计算方向判断也更直接。MPPT_wind.m 那侧走的是 TSR 路线因为风力机的最佳叶尖速比 λ_opt 是出厂特性查表比盲目扰动可靠。3.2 电导增量法核心循环下面这段代码是 MPPT_single.m 的简化版保留了完整的占空比更新逻辑% MPPT_single.m —— 电导增量法最大功率跟踪 function D_next inc_mppt(Vpv, Ipv, V_old, I_old, D, dD) dV Vpv - V_old; dI Ipv - I_old; if abs(dV) 1e-3 % 电压几乎没有变化根据电流增量判断方向 if dI 0 D_next D - dD; else D_next D dD; end else % 计算电导增量 dI/dV与 -I/V 比较 if dI / dV Ipv / Vpv 0 % 当前工作在最大功率点左侧需要减小占空比升压 D_next D - dD; else D_next D dD; end end D_next min(0.95, max(0.1, D_next)); end这里默认 Boost 变换器“占空比增大 → 输入阻抗降低 → 光伏工作点电压降低”所以工作点落在 P-V 曲线左侧时减小占空比会让电压往 Vmpp 靠近。abs(dV) 1e-3的分支处理的是电压采样量化后可能出现的死区防止 dV 为零时除零错误。dD取 0.005 到 0.02 之间太小收敛慢太大会在最大功率点附近持续振荡。实际调用时不会在 Simulink 的连续模型中直接跑这个函数而是用一个 MATLAB Function 块采样周期设为 20ms。这个时间要远大于开关周期10kHz PWM 对应 0.1ms又不能太大否则光照突变时跟踪跟不上。仿真中我会把 MPPT 周期设在 0.02s 到 0.05s 之间用噪声信号叠加在光伏输出上验证稳定性。3.3 风机侧 TSR 跟踪的实现思路风力机的功率方程是 P 0.5·ρ·A·Cp(λ, β)·v³其中 λ 是叶尖速比β 是桨距角。小型风机桨距角固定为 0功率系数 Cp 随 λ 变化在某个最佳叶尖速比 λ_opt 处取得最大值。控制的目标就是让叶轮转速始终跟随风速变化保持 λ ≈ λ_opt。核心换算代码很短% MPPT_wind.m —— 根据风速计算同步电机的转速参考 rho 1.225; % 空气密度 kg/m3 R 0.8; % 叶轮半径 m lambda_opt 8.1; % 最佳叶尖速比 omega_ref lambda_opt * v_wind / R; % 角速度参考系统的功率曲线是通过在MATLAB里做场景模拟和查表拟合得的omega_ref就是 MPU 的决策控制量。风速大于切入风速但小于额定风速时用omega_ref作为转速外环的目标值内环控制整流桥电流风速超过额定值时切换到限功率模式把转速拉回安全范围防止飞车。这一段在毕业设计的论文里有完整推导但实际写代码时更常用的是查表 PI 调节而非实时求解气动方程。3.4 Simulink 模型中的参数配对仿真模型里最容易忽略的是开关频率和采样时间的匹配。PWM 发生器设 10kHz但 MPPT 决策周期 20ms两者相差 200 倍中间必须有离散采样保持。我一般这样配光伏板模型用连续时间Boost 和负载用平均模型PWM 由 10kHz 载波产生MPPT 模块每 400 个载波周期更新一次占空比。光伏模型的输出还要加一个 1kHz 低通滤波器滤掉开关纹波后再进 MPPT 采样。如果不加电导增量法里的 dI/dV 会被纹波噪声污染算法会误判方向稳态功率可能比 MPP 低 5% 以上。这个现象在做仿真的人眼里常被归结为“算法不收敛”其实是采样链路的问题跟算法本身没关系。4. 原理图硬件设计与蓄电池充放电保护4.1 主控板与驱动传感器板的分工压缩包里的 main.SchDoc 和 driver_sensor.SchDoc 分别是主控板与驱动传感板。主控板以 STM32F103C8T6 最小系统为核心这颗芯片 72MHz 主频、3 路 12 位 ADC、多个高级定时器用在离线电源控制的场景里资源正好而且最小系统板的参考设计在工程社区里很成熟画原理图时可以省掉很多查手册的时间。主控板负责 MPPT 计算、模式切换、通信和状态指示驱动传感板专门做功率回路的采样与驱动两层板中间通过排针连接避免大电流走线干扰 MCU 的模拟地。这样拆分的好处是调试时不需要每次都带着高压部分操作。先单独给主控板供电烧录程序用信号发生器模拟传感器输出验证 MPPT 逻辑正确后再把功率板插上去。4.2 采样电路的参数选择driver_sensor.SchDoc 里的核心采样电路是高边电流采样。蓄电池充放电电流和光伏输入电流都是直流用采样电阻加运算放大器的方式比霍尔传感器更省成本精度在 2% 以内对 MPPT 和充放电管理足够。采样电阻取 10mΩ满载 10A 时压降只有 100mV功率损耗 1W选 2W 封装留够余量。输出电压与电流的换算关系是Vout Vref I_load · R_shunt · A_gainR_shunt是 10mΩA_gain是同相放大电路的放大倍数取 50 倍时每安培对应 0.5V 输出。Vref是 1.65V 偏置由 TL431 精密基准产生这样双向电流充电和放电都能映射到 ADC 的 0~3.3V 输入范围。STM32 的 ADC 是 12 位参考电压 3.3V理论上分辨率约 0.8mV对应电流分辨率约 1.6mA实际噪声底大概在 5mA 左右对系统的控制精度完全够用。4.3 三段式充电状态机蓄电池是离线系统里最容易损坏的部件充放电保护不能只靠分立比较器必须由软件状态机完整管理。这套系统的充电策略是标准的恒流-恒压-浮充三段式状态切换条件基于电池电压和充电电流两个量// battery_charge.c —— 三段式充电状态机 typedef enum {CC_MODE, CV_MODE, FLOAT_MODE, FAULT_MODE} ChargeState; ChargeState state CC_MODE; float Vbat read_battery_voltage(); float Ibat read_battery_current(); switch (state) { case CC_MODE: // 恒流充电以 0.2C 电流充电电压达到 27.4V 转恒压 set_charge_current(0.2f * BATTERY_CAPACITY); if (Vbat 27.4f) state CV_MODE; break; case CV_MODE: // 恒压充电维持 27.4V电流降到 0.05C 转浮充 set_charge_voltage(27.4f); if (Ibat 0.05f * BATTERY_CAPACITY) state FLOAT_MODE; break; case FLOAT_MODE: // 浮充电压降到 26.8V 维持电池充满状态 set_charge_voltage(26.8f); break; case FAULT_MODE: break; }BATTERY_CAPACITY单位是 Ah0.2C的充电电流意味着 100Ah 电池按 20A 恒流充。恒压值 27.4V 对应 12V 电池两节串联的均充电压浮充 26.8V。温度变化时这些阈值要补偿常见做法是 NTC 贴在电池外壳上每摄氏度调整约 -3mV/单节也就是两节串联时 -6mV/℃。4.4 过放、反接与过压保护过放保护不采用“到点就断”这样一刀切系统分两级处理。母线电压低于 22.5V 时先发出告警并把负载切到次要回路低于 21.0V 时才彻底切断输出。回充恢复电压设置 22.5V 滞回区间这样夜间蓄电池电压在小幅波动时不会反复通断负载。防反接用的是 P 沟道 MOSFET 背靠背结构两个管子源极相接串联在电池正极回路中。正常接法时体二极管方向正确MOSFET 导通压降只有几毫伏接反时体二极管反偏电流根本流不进去。这个方案对低压系统很实用压降比肖特基二极管低一个数量级。泄荷电路在母线电压超过 28.5V 时投入用一个 PWM 控制的功率电阻把多余能量消耗掉。这里不能简单用继电器通断——母线电压在 28.5V 附近振荡时继电器会频繁跳闸用 PWM 占空比线性调节泄荷功率电压超得越多泄荷越强系统更平滑。5. 调试中的波形判断与硬件排错技巧5.1 仿真阶段三步确认 MPPT 是否真正收敛仿真跑完一遍之后不要只看最终功率数据要在 Scope 里观察三个信号。第一是光伏工作点电压波形应该在一个窄范围内做锯齿状调整锯齿幅度大致等于扰动步长对应的电压变化如果锯齿越来越大说明算法在振荡需要减小 dD 或增大 MPPT 周期。第二是母线电压纹波应小于光伏输出电压纹波的 1.5 倍若超过说明 Boost 输出电容容量不足。第三是占空比在光照突变后的恢复时间1000W/m² 到 800W/m² 的阶跃应在 0.5s 内回到稳态。大于 1s 就说明电导增量法的采样带宽不足。5.2 硬件调试顺序先通控制再通功率拿到焊接完的板子第一步不要接光伏板也不要接风机。先给主控板供 3.3V用万用表确认所有电源轨正常再用示波器看晶振波形——不起振的话一切免谈。确认 MCU 跑起来后用 USB 转串口连接调试口往 ADC 通道注入已知电压验证采样值和真实值一致。第二步接蓄电池组但要在电池正极串联一个 5A 保险丝。此时会产生母线电压测量母线电容两端电压应该是 24V 上下。只有母线稳定建立起来后才允许接光伏板和风机。风机整流后如果母线反灌电流会驱动风机反转所以风电入口必须加防反二极管原理图上画了焊接时比较容易漏。5.3 常见故障的定位路径故障现象优先检查点MPPT 占空比持续满幅振荡电流采样是否接入高边ADC 参考电压是否稳定接上光伏板后母线电压反而下降Boost 电感是否饱和占空比初始化值是否过大风机转但不充电整流桥后防反二极管方向TSR 的风速方向风速处理逻辑电池充满后母线电压仍然偏高状态机是否进入 FLOAT_MODE恒压环 PI 参数是否饱和PWM 无输出定时器死区配置是否正确光耦驱动芯片供电是否缺失调试中还有一个容易出问题的位置电感啸叫。占空比扰动频率落在音频范围内时Boost 电感会发出“吱吱”声这不是故障但提示你把 MPPT 决策周期从 20ms 改到 50ms让占空比变化频率远离电感和电容的谐振点。光伏侧和风机侧的传感器driver_sensor.SchDoc里的运放和比较器需要单独一张表做校准把万用表读数与串口打印的 ADC 换算电流值对比修正采样电阻和放大倍数的误差再让软件里存的实际电流更接近电路中的真实值。把这一轮标定做完仿真里调好的电导增量法和 TSR 参数搬到硬件上时才不需要大改。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门