No description
  • Python 99%
  • Shell 1%
Find a file
2026-09-07 23:48:48 -03:00
calc Close the disconnect analysis and set the efficiency requirement (M2) 2026-09-07 23:48:48 -03:00
docs Close the disconnect analysis and set the efficiency requirement (M2) 2026-09-07 23:48:48 -03:00
firmware Create repository skeleton, licenses, spec and kickoff ADRs (M0) 2026-09-07 19:53:34 -03:00
hardware Close the disconnect analysis and set the efficiency requirement (M2) 2026-09-07 23:48:48 -03:00
tools Close the disconnect analysis and set the efficiency requirement (M2) 2026-09-07 23:48:48 -03:00
.gitignore Apply the independent review: fix what three reviewers found (M2) 2026-09-07 23:18:09 -03:00
CHANGES.md Create repository skeleton, licenses, spec and kickoff ADRs (M0) 2026-09-07 19:53:34 -03:00
Instructions.md Add project instruction file 2026-09-07 19:53:34 -03:00
LICENSE Create repository skeleton, licenses, spec and kickoff ADRs (M0) 2026-09-07 19:53:34 -03:00
LICENSE-docs Create repository skeleton, licenses, spec and kickoff ADRs (M0) 2026-09-07 19:53:34 -03:00
LICENSE-firmware Create repository skeleton, licenses, spec and kickoff ADRs (M0) 2026-09-07 19:53:34 -03:00
README.md Evaluate controller and compute the power stage (M1) 2026-09-07 20:45:09 -03:00

SANTELMO

Open-hardware, marine-grade 12 V to 48 V DC-DC battery charger.

SANTELMO charges a 15S or 16S LiFePO4 house bank (48 V nominal) from a 12 V lead-acid starter system driven by an engine alternator, without discharging the starter battery and without overloading the alternator. It covers the functions of a Victron Orion-Tr Smart 12/48-8 and adds a built-in web interface over WiFi and Ethernet, dual-stack, IPv6 first.

Design target 500 W; guaranteed rating 400 W until the thermal test at bring-up passes (ADR-0006).

Status

Milestone M1 (controller evaluation and calculations) delivered, awaiting review. See docs/m1-report.md, docs/calculations.md and the work plan in Instructions.md, section 10. Next: M2, schematics.

Design summary

  • Two boards in one aluminum enclosure: PWR (power stage, analog control, hardware safety ceilings) and CTRL (ESP32-S3, W5500 Ethernet, USB-C). See docs/adr/0001-two-boards.md.
  • Non-isolated, single-point-grounded, per ABYC E-11 practice. See docs/adr/0003-non-isolated.md.
  • 4-switch buck-boost controller LT8705A, 150 kHz; the BQ25756 was evaluated and rejected on its 20 A input current limit. See docs/adr/0002-controller-choice.md.
  • Safety ceilings (output voltage, 45 A in, 10 A out, OV latch) are set by resistor networks and an independent comparator. A bank switch on PWR selects the 15S or 16S ceilings in hardware; firmware can only lower the setpoints, never raise them. See docs/adr/0005-bank-cell-count-selectable.md and docs/bank-voltages.md.
  • ESP32-S3-WROOM-1U + W5500 on ESP-IDF 5.x, dual-stack networking, IPv6 first. See docs/adr/0004-esp32s3-w5500.md.

Full electrical specification: docs/spec.md.

Source Location

This notice is required by CERN-OHL-S-2.0 section 3.3.

https://git.pop.coop/sailstation/santelmo

The same URL goes on the PCB silkscreen of every board.

Licensing

Part License File
Hardware (schematics, layout, libraries, enclosure) CERN-OHL-S-2.0 LICENSE
Firmware GPL-3.0-or-later LICENSE-firmware
Documentation CC-BY-SA-4.0 LICENSE-docs

Modifications to the hardware are recorded in CHANGES.md as required by CERN-OHL-S-2.0 section 3.3(b).

Repository layout

docs/            specification, ADRs, calculations, test results, manual
calc/            Python scripts that produce every number in the docs
hardware/        KiCad 9 projects (pwr, ctrl), libraries, enclosure, releases
firmware/        ESP-IDF 5.x project
tools/           kicad-cli export scripts, release script, flash script

Calculations

Every number in docs/ comes from a script in calc/ or a recorded measurement. To run the scripts and their tests:

python -m venv .venv
source .venv/bin/activate
pip install numpy scipy matplotlib pandas skidl kicad-skip pytest
cd calc && python -m pytest -q

Working rules

Instructions.md is the contract for this project. Sections 2 and 3 are closed decisions. Changing one requires a new ADR that supersedes the old one and gives the three justifications in section 0.2. The working name MINUANO used in that file was replaced by SANTELMO at kickoff (docs/m0-kickoff-answers.md).

Git: main is protected, work happens on feature/* branches, merged with merge commits. No squash, no rebase of shared history, no force-push.