Skip to the content
2 layersEthernet, the printed circuit board in 3D

This cell-sim is designed to mimic a LiPo battery pack for develpoment of the surrounding electronics, like a BMS.

Copper layers
2
Thickness
1.6 mm
Parts
32
Nets
37
Pads
126
Tracks, vias
164, 18
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
25 Jul 2024
Updated
10 Apr 2026

Overview

Ethernet is an open-source printed circuit board by atopile, from the atopile/cell-sim repository on GitHub, published under the MIT licence. It is a 2-layer board with 32 parts on 37 nets, routed with 164 tracks and 18 vias.

Its parts include 16 capacitors, 13 resistors and 3 ICs. It belongs with the power and interfaces and adapters boards of this library.

README

README.md

Cell Simulator

This cell-sim is designed to mimic a LiPo battery pack for develpoment of the surrounding electronics, like a BMS.

  • 16 channels
  • Open-Source hardware design, you can embed onto your own HIL setup
  • ⚡️ 0-4.5V and 0-500mA per channel
  • DMM muxed to each channel for arbitarily precise measurment
  • Open-circuit simulation on each channel
  • 📏 16bit ADC feedback for voltage and current
  • 🔌 USB w/ Python software interface (+ 100MBit Ethernet + WiFi waiting for firmware support)

IMG_0374 3

Design overview

Cell Diagram

Board Render

Getting Started

  1. Install python if you don't have it already
  2. Install the requirements pip install -r requirements.txt
  3. Connect the board via USB Port
  4. Power the board with the 12V input (supply: 1A minimum, 3A recommended)
  5. Run the example python script python example_set_voltages.py
  6. Voltages should be set to 3.5V, then rainbow from 1V to 4V across the 16 channels and current should be close to 0A.

Test Output

You should see something like this: Rainbow

Notes

  1. To get best low noise performance, use a quality power supply for the input supply.

Manufacturing

Board is intended to be manufactured with JLC, files are in the main directory of the repository. Note, the highlighted isolated regulator needs to be depopulated:

Screenshot 2026-02-26 at 3 23 36 PM

Firmware

Update Firmware

We use PlatformIO to build and upload the firmware via USB.

  1. Install PlatformIO: https://platformio.org/install
  2. Connect the board via USB (might need to accept connection popup on Mac)
  3. Run pio run -t upload or install the PlatformIO VSCode extension and use the upload button.

API Docs

Connecting to cellsim

python
from lib.cellsim import CellSim
cellsim = CellSim(port)

Enable outputs

Each cell has a relay in series between the cell output and the connector, this can be used to simulate open-wire faults for example.

python
# Global enable/disable
cellsim.enableOutputAll()
time.sleep(1)
cellsim.disableOutputAll()
time.sleep(1)

# Enable/disable one at a time
# Turn relays on in a wave
for i in range(1, 17):
    cellsim.enableOutput(i)
    time.sleep(0.1)

time.sleep(1)

# Turn relays off in a wave
for i in range(1, 17):
    cellsim.disableOutput(i)
    time.sleep(0.1)

Setting voltages

Each output voltage can be specified between 0.5V and 4.4V

python
# Set all at once
cellsim.setAllVoltages(3.5)
time.sleep(1)

# Set one at a time
print("\nSetting rainbow voltage pattern...")
for i in range(16):
    voltage = 1.0 + (3.0 * i / 15)  # Spread 1V to 4V across 16 channels
    cellsim.setVoltage(i + 1, voltage)

Measuring voltages (onboard)

Each channel has an onboard 16bit ADC that measures the cell output. Note this is not a kelvin connection to your DUT, the measurement will only be accurate when minimal current is being drawn by the DUT.

python
voltages = cellsim.getAllVoltages()
print(f"Voltages: {[f'{v:.3f}' for v in voltages]}")

Measuring voltages externally

To take a precision measurement, each channel has a multiplexed output that connects to the DMM connector via a relay.

python
channel_to_measure = 3
# Enable DMM
cellsim.enableDMM(channel_to_measure)

# take measurment using external DMM
# that is connected to the DMM banana outputs
time.sleep(1)

cellsim.disableDMM()

Load switch

Each channel has a resistor + mosfet across its output, this can be used to speed up the discharge of the output capacitors. For example when transitioning from a high output voltage to a low output voltage, there will be an RC decay time before the voltage settles, typically in the ~100ms range. Turning on the load switch will make this much faster.

python
cellsim.enableLoadSwitchAll()
time.sleep(1)

cellsim.disableLoadSwitchAll()
time.sleep(1)

Disconnecting session

Once your test is finished, you can use the following to close the serial session:

python
  cellsim.close()

Parts

32
QtyValueFootprintReferences
616V 100nF X7R ±10% 0402 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSlib:C0402C8, C9, C10, C11, C12, C13
462.5mW Thick Film Resistors 50V ±100ppm/℃ ±1% 33Ω 0402 Chip Resistor - Surface Mount ROHSlib:R0402R3, R4, R8, R9
462.5mW Thick Film Resistors 50V ±100ppm/℃ ±1% 49.9Ω 0402 Chip Resistor - Surface Mount ROHSlib:R0402R5, R6, R10, R11
250V 10nF X7R ±10% 0402 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSlib:C0402C5, C6
250V 10pF C0G ±5% 0402 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSlib:C0402C15, C16
250V 6.8nF X7R ±10% 0402 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSlib:C0402C3, C4
262.5mW Thick Film Resistors 50V ±100ppm/℃ ±1% 200Ω 0402 Chip Resistor - Surface Mount ROHSlib:R0402R1, R2
110V 4.7uF X5R ±20% 0402 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSlib:C0402C7
125V 10uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSlib:C0805C14
150V 1nF X7R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSlib:C0805C1
150V 22nF X7R ±10% 0402 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSlib:C0402C2
162.5mW Thick Film Resistors 50V ±1% ±200ppm/℃ 10Ω 0402 Chip Resistor - Surface Mount ROHSlib:R0402R7
162.5mW Thick Film Resistors 50V ±100ppm/℃ ±1% 12.4kΩ 0402 Chip Resistor - Surface Mount ROHSlib:R0402R12
162.5mW Thick Film Resistors 50V ±100ppm/℃ ±1% 1MΩ 0402 Chip Resistor - Surface Mount ROHSlib:R0402R13
1?lib:LQFP-48_L7.0-W7.0-P0.50-LS9.0-BLU1
1?lib:RJ45-TH_J1B1211CCDU2
1?lib:CRYSTAL-SMD_4P-L3.2-W2.5-BLU3

More from atopile/cell-sim

5
  • 4 layers220 × 110 mmCell sim, the printed circuit board in 3D

    Cell sim

    atopile/cell-sim

    This cell-sim is designed to mimic a LiPo battery pack for develpoment of the surrounding electronics, like a BMS.

    1,152 parts25MIT
  • 4 layersCell, the printed circuit board in 3D

    Cell

    atopile/cell-sim

    This cell-sim is designed to mimic a LiPo battery pack for develpoment of the surrounding electronics, like a BMS.

    63 parts25MIT
  • 2 layersTca9548apwr, the printed circuit board in 3D

    Tca9548apwr

    atopile/cell-sim

    This cell-sim is designed to mimic a LiPo battery pack for develpoment of the surrounding electronics, like a BMS.

    20 parts25MIT
  • 2 layers225.7 × 100.8 mmLv2842xlvddcr, the printed circuit board in 3D

    Lv2842xlvddcr

    atopile/cell-sim

    This cell-sim is designed to mimic a LiPo battery pack for develpoment of the surrounding electronics, like a BMS.

    8 parts25MIT
  • 2 layers225.7 × 100.8 mmLevel shifter, the printed circuit board in 3D

    Level shifter

    atopile/cell-sim

    This cell-sim is designed to mimic a LiPo battery pack for develpoment of the surrounding electronics, like a BMS.

    3 parts25MIT

Similar boards

  • 2 layers50 × 23.2 mmAnalog, the printed circuit board in 3D

    Analog

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    32 parts1kGPL-3.0
  • 2 layers136.8 × 54.2 mmRetropie zero, the printed circuit board in 3D

    Retropie zero

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    32 parts915
  • 2 layersMooltipass top, the printed circuit board in 3D

    Mooltipass top

    limpkin/mooltipass

    Github repository dedicated to the mooltipass project

    32 parts531
  • 2 layers16 × 20 mmESPKey, the printed circuit board in 3D

    ESPKey

    octosavvi/ESPKey

    Wiegand data logger, replay device and micro door-controller

    32 parts353GPL-2.0
  • 2 layers82 × 40.9 mmDisplay7447, the printed circuit board in 3D

    Display7447

    zmaker/arduino_cookbook

    gli sketch del nuovo progetto Arduino Cookbook e dei video di YouTube

    32 parts269
  • 2 layers40 × 38 mmShield, the printed circuit board in 3D

    Shield

    murexrobotics/electrical

    Highly integrated electronics design and printed circuit boards (PCBs) for the MATE ROV Competition. Attempt the impossible.

    32 parts192MIT
  • 2 layers47 × 39 mmQrss clock tx, the printed circuit board in 3D

    Qrss clock tx

    swharden/AVR-projects

    A collection of standalone AVR projects written in C

    32 parts184MIT
  • 2 layers30.9 × 63 mmStm32-io extend, the printed circuit board in 3D

    Stm32-io extend

    hardenedlinux/cheap-pcb

    Cheap PCB: Better understanding the current status of hardware supply chain

    32 parts170CC0-1.0

Questions

What parts does the Ethernet use?

32 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Ethernet KiCad files?

From the atopile/cell-sim repository on GitHub, at the commit this page was made from: the board is elec/layout/ethernet/ethernet.kicad_pcb and its schematic elec/layout/cell/cell.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ethernet design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).