Micromppt
800mV-5.5Vin MPPT Boost Charger with Autonomous Perturb-and-Observe Setpoint Adjustment
UPDATE 4/22/25: Micromppt V3 has been release! This is the first relatively final build. The board is now configured for use with single cell lithium packs by default, and I have added a load output, and added battery and load protection circuitry.
All of the design files and Gebers/BOM/CPL files for PCBA can be accessed in the build artifacts of the latest action run in the Github repo
Micromppt is one of the first third-party packages on the Atopile Packages repo, so you can now easily install it into other atopile projects. I am working on setting up a way to order boards from me directly. Incoming updates will be focused on finalizing a more cost optimized base build and instructions on configuration for other cell chemistries.
#pragma experiment("BRIDGE_CONNECT")
import ElectricPower, ElectricSignal, ElectricLogic
import Inductor, Capacitor, Resistor, Diode, Fuse
module Micromppt:
# Based on STEVAL-ISV006V2 schematic
power = new ElectricPower
Vpv = new ElectricPower
Vpvr = new ElectricPower
Vbat = new ElectricPower
# Components
ic = new STMicroelectronics_SPV1040T_package
R1 = new Resistor; R1.resistance = 1Mohm +/- 10%; R1.package = "0402"
R2 = new Resistor; R2.resistance = 423kohm +/- 10%; R2.package = "0402"
R3 = new Resistor; R3.resistance = 1kohm +/- 10%; R3.package = "0402"
Rf1 = new Resistor; Rf1.resistance = 1kohm +/- 10%; Rf1.package = "0402"
Rf2 = new Resistor; Rf2.resistance = 1kohm +/- 10%; Rf2.package = "0402"
Rs = new Resistor; Rs.resistance = 10mohm +/- 5%; Rs.package = "R1206"
Cin = new Capacitor; Cin.capacitance = 10uF +/- 20%; Cin.package = "0603"
Cout1 = new Capacitor; Cout1.capacitance = 4.7uF +/- 20%; Cout1.package = "0603"
Cout2 = new Capacitor; Cout2.capacitance = 10uF +/- 20%; Cout2.package = "0603"
Cinsns = new Capacitor; Cinsns.capacitance = 100nF +/- 20%; Cinsns.package = "0402"
Coutsns = new Capacitor; Coutsns.capacitance = 1nF +/- 20%; Coutsns.package = "0402"
Cf = new Capacitor; Cf.capacitance = 1uF +/- 20%; Cf.package = "0402"
SW_L = new Inductor; SW_L.lcsc_id = "C5329540"
Dout = new TECH_PUBLIC_SRV05_4_P_T7_package
# Connectors
Vpv_Conn = new JST_Sales_America_B2B_PH_K_S_LF__SN_package
Vbat_Conn = new JST_Sales_America_B2B_PH_K_S_LF__SN_package
Vload_Conn = new JST_Sales_America_B2B_PH_K_S_LF__SN_package
# SPV1040 boost converter topology
ic.GND ~ power.lv
Vpvr.hv ~> Cin ~> power.lv
Vpvr.hv ~> R3 ~> ic.MPP_SET
ic.MPP_SET ~> Cinsns ~> power.lv
XSHUT = new ElectricLogic; XSHUT.line ~ ic.XSHUT
ic.XSHUT ~ ic.MPP_SET
Vpvr.hv ~> SW_L ~> ic.LX
ic.VCTRL ~> Coutsns ~> power.lv
ic.VOUT ~ Rs.p1
# Current sensing + output voltage divider
ic.ICTRL_PLUS ~ Cf.p1; ic.ICTRL_PLUS ~ Rf1.p1; Rf1.p2 ~ Rs.p1
ic.ICTRL_MINUS ~ Cf.p2; ic.ICTRL_MINUS ~ Rf2.p1; Rf2.p2 ~ Rs.p2
Rs.p2 ~ R1.p1; R1.p2 ~ ic.VCTRL
R1.p2 ~ R2.p1; R2.p2 ~ power.lv
Rs.p2 ~ Vbat.hv; Vbat ~ Cout2.power
# Battery protection (XB3306D)
bpc = new XySemi_XB3306D_package
bpc.VDD ~ Vbatr.hv; bpc.VM ~ Vbat.lv; bpc.GND ~ Vbatr.lv
# Load output with PTC fuse + reverse polarity diode
Load_D = new Diode; Load_D.lcsc_id = "C2943878"
ptc = new Littelfuse_0603L150SLYR_package
Vload_Conn.1 ~ ptc.2; ptc.1 ~> Vbat.hv
Vload_Conn.2 ~> Load_D ~> Vbatr.lv
To do:
- Release a cost/size optmized minimal build without protection circuitry, with assertion-driven configutation
- Add configuration guidelines and governing equations
- Add a list of recommended solar panels
OLD NEWS:
UPDATE 2/7/25:
Successfully tested the SPV1040 test board charging a supercapacitor and lipo. I redesigned a more compact, optimized PCB with atopile v3.
Gerbers/PCBA files are now built by running $ ato build -t all as of V3. See the atopile documentation for more details
Designed for low power solar powered devices. Max panel operating voltage = 5.5V
Based on the ST SPV1040 solar charging PMIC. See the AN3319 for additional resources on the operating modes and efficiency calculations.