michealsmitch/lithium-ion-cell-pre-charge-process-curves
Lithium-ion Cell Pre-charge (YC) Process Curves Channel-level process curves from the pre-charge station of a cylindrical lithium-ion cell line. Every tester channel is sampled natively every 30 seconds for the whole process, giving the full voltage / current / capacity trajectory of each cell from the moment it is clamped. This is the pre-charge (YC) dataset. The capacity-grading stage is a completely different process and is published separately; the two are deliberately… See the full description on the dataset page: https://huggingface.co/datasets/michealsmitch/lithium-ion-cell-pre-charge-process-curves.
Lithium-ion Cell Pre-charge (YC) Process Curves
Channel-level process curves from the pre-charge station of a cylindrical lithium-ion cell line. Every tester channel is sampled natively every 30 seconds for the whole process, giving the full voltage / current / capacity trajectory of each cell from the moment it is clamped.
This is the pre-charge (YC) dataset. The capacity-grading stage is a completely different process and is published separately; the two are deliberately never mixed.
- 4 runs, 1 machine, 1 product, 1 lot
- 1,024 tester channels / 1,023 loaded cells (99.9 % tray utilisation)
- 3 process steps per run, roughly 8 minutes per run
中文速览
本数据集是圆柱锂电芯产线预充(YC)工序的逐通道过程曲线:测试柜每个通道每 30 秒采一个点,完整记录每颗电芯从夹紧到结束的电压 / 电流 / 容量轨迹。
- 4 次运行、1 台设备、1 个产品(
HJ)、1 个批次(HJ7PM28100) - 1,024 个通道位 / 1,023 只实际装载电芯
- 每次运行 3 个工步(静置 → 恒流充电 → 静置),全程约 8 分钟
预充与分容是两道完全不同的工序,因此拆成两个独立数据集,不合并。
Files
This repository contains a single split (train) holding the entire dataset. No train/test partition is provided — see Suggested splitting below.
Quickstart
from datasets import load_dataset
import pandas as pd
runs = load_dataset("parquet", data_files="data/runs.parquet", split="train").to_pandas()
print(runs[["run_id", "product", "lot_id", "tester", "n_loaded"]])
curves = load_dataset("parquet", data_files="data/curves/*.parquet", split="train")
d = curves.to_pandas()
d = d[d.is_loaded] # drop empty tray sockets
print(d.groupby("step_no").agg(v_start=("voltage_mv", "first"),
v_end=("voltage_mv", "last"),
cap=("accumulated_capacity_mah", "max")))Process description
Cells come straight from electrolyte filling at an open-circuit voltage near 0.2 V, with no SEI on the anode. The recipe applies a very small constant current for a fixed short time and then rests. Only a tiny amount of charge — well under 1 % of rated capacity — is transferred before the cell moves on to formation.
Observed in the data: incoming OCV ≈ 0.19 V, a step up to ≈ 2.3 V while charging, relaxing to ≈ 2.0 V after a one-minute rest.
Set-points are not restated in this card. The current, voltage limit and timing are plainly visible as the plateau and cut-off in the data itself. Omitting the table here is a documentation choice by the data owner, not a technical safeguard — anyone holding the curves can read the set-points straight off them.
Schema
curves — one row per channel per sample
Vendor columns are translated from Simplified Chinese to English and keep the source order; the four leading columns are the only ones added, so that a sample can be tied back to a run and to a physical tray socket.
runs — one row per tester run
Controlled vocabularies
step_name: rest, cc_charge, cccv_charge, cc_discharge, cccv_discharge, end
stop_condition: time, channel_disable
Any value not listed is passed through unchanged from the vendor file.
Indexing — tray socket vs tester channel
tray_position (the physical socket of the cell on the tray) and power_channel (the tester's power-supply channel, and the name of the source file) are not the same number. They differ by a fixed wiring permutation which is constant for a given tester but different between lines — the whole pre-charge line uses one permutation:
i.e. a 16×16 transpose. Never assume tray_position == power_channel; both are delivered per row, so (run_id, power_channel, tray_position) is complete.
Known issues and caveats
What is deliberately not included
Deleted vendor columns: circuit_voltage_drop_mv and cable_resistance (fixture contact metrics of the tester, not properties of the cell) and cdc_capacity_mah (a firmware artefact holding negative values).
Reproducing / uploading
pip install pandas pyarrow
python prepare.py --root /path/to/raw --out . # emits both datasets
hf auth login
hf upload <user>/<dataset-name> . . --repo-type datasetThe source files are GBK / cp936 encoded, so reading them as UTF-8 fails.
Licence, privacy and intended use
License & Commercial Use: This sample dataset is released under the CC BY-NC 4.0 license for strictly non-commercial and academic research purposes.
Commercial Licensing: This repository contains only a small subset of a massive 1TB+ industrial-grade dataset, which includes full-lifecycle lithium battery manufacturing data (CCD vision defects, high-frequency formation time-series data, etc.). If you wish to use this data for commercial algorithm training, enterprise product development, or want to acquire the full dataset, please contact me for a commercial license:
Email: michael.smitch.20260912@gmail.com
