Charge Controllers: PWM vs MPPT
The charge controller sits between the solar panel and the battery. It regulates current flow to prevent battery overcharge and manages the charging profile. Two fundamentally different control topologies are in common use: Pulse Width Modulation (PWM) and Maximum Power Point Tracking (MPPT). Selecting the wrong type typically costs 10 - 30% of available solar harvest (larger in cold or cloudy conditions, smaller when the panel's Vmp is close to the battery voltage) or can damage batteries.
How PWM Controllers Work
A PWM charge controller connects the solar panel directly to the battery through a switch (MOSFET or relay). When the battery voltage is low, the switch is fully on - the panel feeds the battery at whatever current the panel can supply at the battery's current voltage. As the battery approaches full charge, the controller begins pulsing the switch on and off at a duty cycle proportional to the difference between target and actual battery voltage. This reduces average current flow, preventing overcharge.
The critical limitation of PWM: the panel is forced to operate at battery voltage, not at its own maximum power point (MPP). A 12 V nominal panel has an MPP voltage (Vmpp) around 17 - 18 V but the battery sits at 12 - 14.6 V. The panel is clamped to the lower voltage, operating well off its power curve. This is the root cause of PWM's lower efficiency. PWM is well-matched only where the panel's Vmp is close to the battery voltage (e.g. a "12 V" PWM-type panel on a 12 V battery); the larger the gap between panel Vmp and battery voltage, the more an MPPT controller gains.
How MPPT Controllers Work
An MPPT controller inserts a DC-DC buck (or boost) converter between the panel and battery. The controller continuously monitors the panel's voltage and current output, computing P = V × I. It then incrementally adjusts the panel's operating point (by changing the duty cycle of the converter's switching transistor) to locate and track the voltage at which the panel delivers maximum power - the Maximum Power Point.
Because the converter can step voltage down (or up) at high efficiency, the panel operates at its optimal Vmpp (~17 - 18 V for a 12 V panel) while the battery receives the current it needs at battery voltage. This voltage step-down comes with a compensating current increase, delivering more total watts to the battery.
Efficiency Comparison
| Parameter | PWM Controller | MPPT Controller |
|---|---|---|
| Typical conversion efficiency | 65 - 75% of panel STC rating | 93 - 97% of panel STC rating |
| Panel voltage utilisation | Poor - clamped to battery voltage | Excellent - panel at MPP |
| Cold weather advantage | None | Significant - cold panels have higher Voc/Vmpp, MPPT captures this gain |
| Partial cloud benefit | None | Moderate - can still track the shifted MPP under clouds |
| Typical cost (5 - 20 A range) | $5 - 15 | $20 - 60 |
| Quiescent current consumption | 5 - 15 mA | 10 - 30 mA |
| Complexity / failure modes | Low - simple circuit | Moderate - switching converter can fail; firmware-dependent tracking |
When the Difference Matters
Small Panels (under ~10 Wp)
For very small panels (2 - 5 Wp paired with a small LiPo and an ESP32 or nRF52840 node), the absolute watt improvement from MPPT is tiny - perhaps 1 - 2 W - and the MPPT controller's own quiescent current (20 - 30 mA = 0.07 - 0.11 Wh/h) becomes a significant fraction of the total load. For these micro-installations, a dedicated LiPo solar charger IC such as the CN3791 (switching MPPT-style solar charger IC, ~$1) or TP4056 (simple linear CC/CV, no MPPT, ~$0.30) is the appropriate solution. Full-featured MPPT controllers add cost, quiescent drain, and complexity with minimal return. Note: neither the TP4056 nor the CN3791 has a low-temperature charge cutoff - see the cold-climate warning below before using either in a build that may charge below freezing.
Medium Panels (10 - 100 Wp)
This is where MPPT begins to pay for itself. Using the efficiency figures in the table above, a 20 Wp panel with a PWM controller delivers approximately 14 W to the battery in ideal conditions (20 Wp × 0.70). The same panel with an MPPT controller delivers approximately 19 W (20 Wp × 0.95) - about a 36% improvement. (Here "W" is the actual delivered power; "Wp" is reserved for the panel's STC rating.) Over a 5-day winter week at Seattle's 1.8 PSH average:
PWM: 20 Wp × 0.70 × 1.8 PSH × 5 days = 126 Wh MPPT: 20 Wp × 0.95 × 1.8 PSH × 5 days = 171 Wh Difference: 45 Wh - roughly an extra day of autonomy # Caveat: 1.8 PSH is an AVERAGE winter day. During a genuine multi-day # Pacific-NW storm, harvest from BOTH controller types drops toward zero, # so MPPT's advantage cannot be relied on to carry you through the storm. # MPPT helps you RECOVER faster between storms; the BATTERY RESERVE - not # the controller - must cover the no-sun stretch itself.
Large Panels (over 100 Wp) and Cold Climates
MPPT is the only correct choice. In cold climates (below freezing), panel Vmpp rises significantly - a 36-cell panel that has Vmpp = 17 V at 25 °C may have Vmpp = 20 - 21 V at −10 °C. A PWM controller cannot exploit this; an MPPT controller captures all of it.
Cold-climate charge cutoff (critical safety item): In sub-freezing conditions, ensure the LiFePO4 BMS or charge controller inhibits charging below 0 °C (32 °F). Never charge any lithium chemistry - including LiFePO4 - below 0 °C: sub-freezing charging causes lithium plating, leading to permanent capacity loss and a hidden internal-short fire risk. (Discharge is fine to much lower temperatures - LiFePO4 discharges to about −20 °C.) Use a BMS with low-temperature charge protection, or a charge controller with a battery temperature sensor. Bare charger ICs such as the TP4056 and CN3791 have no low-temperature cutoff, so add external low-temp protection for any cold-weather build.
LVD Settings for LiFePO4 Packs
Low Voltage Disconnect (LVD) is the battery voltage at which the charge controller cuts power to the load, protecting the battery from over-discharge. Setting LVD correctly for LiFePO4 is critical - these batteries have flat discharge curves that make "soft" voltage warnings less useful. Two distinct thresholds matter and should not be confused: the operating LVD (the load-disconnect you set for longevity, ~12.0 V / ~3.0 V per cell) and the BMS hard under-voltage protection (UVP) (an absolute floor, ~10.0 - 10.8 V / ~2.5 - 2.7 V per cell) that should only ever trip as a last-resort safety cutoff.
| Parameter | 12 V LiFePO4 (4S, 12.8 V nominal) | 12 V Lead Acid (12 V nominal) |
|---|---|---|
| Operating LVD (load disconnect) | ~12.0 V (3.0 V/cell, ≈ 10 - 20% SoC remaining) | 11.4 - 11.8 V (≈ 40 - 50% SoC) |
| BMS hard UVP (absolute floor) | 10.0 - 10.8 V (2.5 - 2.7 V/cell) - last-resort cutoff only | 10.5 - 11.0 V |
| LVD reconnect voltage (hysteresis) | 12.8 - 13.0 V (well above the operating LVD to avoid relay chatter) | 12.2 - 12.5 V |
| Absorption charge voltage | 14.2 - 14.6 V (3.55 - 3.65 V/cell; ~14.4 V typical) | 14.4 - 14.8 V |
| Float voltage | 13.5 - 13.6 V (3.375 - 3.40 V/cell; use ~13.5 V) | 13.2 - 13.8 V |
| Equalization | Do NOT equalize LiFePO4 | 15.0 - 16.0 V periodically |
SoC-from-voltage caveat: LiFePO4's discharge curve is very flat through the mid-range, so the percentage-of-charge values mapped to each voltage above are approximate - treat them as rough guidance, not a precise fuel gauge. Do NOT float a LiFePO4 pack at 14.4 V / 3.60 V per cell: that holds the pack near 100% and accelerates aging - use ~13.5 V. The reconnect/hysteresis thresholds shown are sensible defaults; confirm against your specific charge controller's manual (e.g. Victron, Epever, Morningstar) before relying on them. (as of 2026-06-08)
Critical: Many PWM controllers sold as "12 V" ship with default lead-acid charge profiles. If used with LiFePO4, the float voltage will be too low and the absorption voltage may be set for gel/AGM lead acid (14.1 V) which undercharges LiFePO4. Always verify and configure the LiFePO4 profile. Renogy Rover, Victron BlueSolar, and Epever controllers have configurable user-defined battery profiles.
Common Charge Controllers for Small LoRa Deployments
IC-Level (for integration into custom PCBs)
| IC | Type | Input Voltage | Max Charge Current | Chemistry | Cost |
|---|---|---|---|---|---|
| TP4056 | Linear CC/CV (no MPPT) | 4.5 - 8 V | 1 A | LiPo (4.2 V cutoff) | $0.25 - 0.40 |
| CN3791 | MPPT-style, switching | ~4.5 - 28 V (PV) | Up to ~4 A (IC capability; typical hobby boards limit to ~2 A via the sense resistor / external FET) | LiPo (4.2 V cutoff) | $0.80 - 1.20 |
| BQ24650 | MPPT, synchronous buck | Up to 28 V | Up to 10 A | Configurable (Li, LiFePO4) | $2 - 4 |
| SPV1040 | MPPT, boost converter | 0.3 - 5.5 V (per STMicro SPV1040 datasheet) | 1.8 A out | LiPo, NiMH | ~$1.50 - 2.50 (approx) |
Notes: the CN3791's 2 A figure commonly quoted for hobby breakout boards is a board-specific limit set by the sense resistor and external FET, not the IC's maximum (the IC supports constant current up to ~4 A and a wide PV input range). SPV1040 input range and output current are per the STMicro SPV1040 datasheet; IC prices are approximate. (as of 2026-06-08)
Module-Level (drop-in for 12 V systems)
| Module | Type | Panel Watts (max) | Features | Cost |
|---|---|---|---|---|
| Renogy Wanderer 10A PWM | PWM | 120 W | LCD, LVD, USB output | $20 |
| Epever Tracer AN 10A MPPT | MPPT | 130 W | RS485 MODBUS, LCD, configurable profiles | $35 - 45 |
| Victron SmartSolar 75/10 | MPPT | 145 W @ 12 V | Bluetooth, VictronConnect app, LiFePO4 profile | $55 - 65 |
| Genasun GVB-8 (8A MPPT) | MPPT | 110 W | Purpose-built LiFePO4 profiles, waterproof | $75 - 90 |
| SRNE ML2430 30A MPPT | MPPT | 390 W @ 12 V | LCD, multiple battery profiles, USB | $45 - 55 |
For most LoRa gateway installations (20 - 100 Wp), the Victron SmartSolar 75/10 is the recommended choice: Bluetooth monitoring allows verifying charge behaviour remotely, and the LiFePO4 profile is well-tested. For budget-constrained multi-node deployments, the Epever Tracer AN 10A provides RS485 telemetry for integration with Grafana monitoring stacks.
No comments to display
No comments to display