Skip to main content

A universal cycling protocol

Project description

aurora-biologic logo aurora-biologic logo


Overview

aurora-unicycler defines a universal battery cycling protocol that can be exported to different formats.

Features

  • Define a cycling protocol based on a Python Pydantic model, with validation
  • Save a unicycler protocol as a human-readable .json
  • Export protocols into different formats:
    • Biologic .mps
    • Neware .xml
    • tomato 0.2.3 .json
    • PyBaMM string list
    • BattINFO .jsonld

This is particularly useful for high-throughput battery experiments, as protocols can be programmatically defined, and sample IDs and capacities can be attached at the last second.

Check out our standalone APIs for controlling cyclers with Python or command line:

We also have a full application with a GUI, including a graphical interface to create these protocols:

Installation

Install on Python >3.10 with

pip install aurora-unicycler

Usage

Making a protocol

Define a protocol using Python

from aurora-unicycler import *

my_protocol = Protocol(
    measurement = MeasurementParams(
        time_s=10,
        voltage_V=0.1,
    ),
    safety = SafetyParams(
        max_voltage_V=5,
        min_voltage_V=0,
        max_current_mA=10,
        min_current_mA=-10,
    ),
    method = [
        Tag(
            tag="my_tag",
        ),
        ConstantCurrent(
            rate_C=0.5,
            until_voltage_V=4.2,
            until_time_s=3*60*60,
        ),
        ConstantVoltage(
            voltage_V=4.2,
            until_rate_C=0.05,
            until_time_s=60*60,
        ),
        ConstantCurrent(
            rate_C=-0.5,
            until_voltage_V=3.5,
            until_time_s=3*60*60,
        ),
        Loop(
            loop_to="my_tag",
            cycle_count=100,
        )
    ]
)

You can also create a protocol from a python dictionary or JSON - you will not get type checking in an IDE, but it will still validate at runtime.

my_protocol = Protocol.from_dict(
    {
        "measurement": {"time_s": 10, "voltage_V": 0.1}
        "safety": {"max_voltage_V": 5}
        "method": [
            {"step": "open_circuit_voltage", "until_time_s": 1},
            {"step": "tag", "tag": "tag1"},
            {"step": "constant_current", "rate_C": 0.5, "until_voltage_V": 4.2},
            {"step": "constant_voltage", "voltage_V": 4.2, "until_rate_C": 0.05},
            {"step": "constant_current", "rate_C": -0.5, "until_voltage_V": 3.0},
            {"step": "loop", "loop_to": "tag1", "cycle_count": 100},
        ],
    ]
)
my_protocol = Protocol.from_json("path/to/file.json")

Converting a protocol

Once you have a protocol object, you can optionally attach a sample name and capacity and convert to other formats.

  • Biologic MPS settings, tested on MPG2 cyclers with EC-lab 11.52 and 11.61:
mps_string = my_protocol.to_biologic_mps(
    sample_name="test-sample",
    capacity_mAh=45,
    save_path="some/location/settings.mps",
)
  • Neware XML, tested on BTS8:
xml_string = my_protocol.to_neware_xml(
    sample_name="test-sample",
    capacity_mAh=45,
    save_path="some/location/protocol.xml",
)
  • Tomato, tested on 0.2.3:
json_string = my_protocol.to_tomato_json(
    sample_name="test-sample",
    capacity_mAh=45,
    save_path="some/location/protocol.json",
)
  • PyBaMM experiment (list of strings):
pybamm_list = my_protocol.to_pybamm_experiment()
  • BattINFO JSON-LD:
jsonld_string = my_protocol.to_battinfo_jsonld(
    capacity_mAh=45,
    include_context=True,
    save_path="some/location/protocol.jsonld",
)

Contributors

Acknowledgements

This software was developed at the Laboratory of Materials for Energy Conversion at Empa, the Swiss Federal Laboratories for Materials Science and Technology, and supported by funding from the IntelLiGent project from the European Union’s research and innovation program under grant agreement No. 101069765, and from the Swiss State Secretariat for Education, Research, and Innovation (SERI) under contract No. 22.001422.

IntelLiGent logo IntelLiGent logo     EU flag     Swiss secretariat

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aurora_unicycler-0.4.2.tar.gz (52.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aurora_unicycler-0.4.2-py3-none-any.whl (16.1 kB view details)

Uploaded Python 3

File details

Details for the file aurora_unicycler-0.4.2.tar.gz.

File metadata

  • Download URL: aurora_unicycler-0.4.2.tar.gz
  • Upload date:
  • Size: 52.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.5

File hashes

Hashes for aurora_unicycler-0.4.2.tar.gz
Algorithm Hash digest
SHA256 31996f5405d54fa83d96ed3659e9941fa7de85f0a777e9c95577da9b1de4324b
MD5 905825b95bee8146ea9767eaa108bab0
BLAKE2b-256 a83cdf88b6c4c824361cac912fad4bec6d91d273e7b01d2c961a5c03d7b8de63

See more details on using hashes here.

File details

Details for the file aurora_unicycler-0.4.2-py3-none-any.whl.

File metadata

File hashes

Hashes for aurora_unicycler-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ff01680c34f87f2a5ceebcb63d65e0f0a41cf996e874c2b488a22e1c7cc8efa1
MD5 1d2ad6cc9d4381f682793184e2904a70
BLAKE2b-256 b95e94d6faaf17e28144c7172d89fb906c12a610d6a84df8d331e62aab1e1db6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page