Test Types & Methods

Suivre les tests de cyclage batterie

Découvrez comment enregistrer les données de cyclage charge/décharge, suivre la perte de capacité et surveiller les performances des cellules à travers la.

JJulien Buteau
intermediate11 min de lecture14 mars 2026

Comment suivre les données de test de cyclage batterie avec TofuPilot

Les tests de cyclage batterie génèrent des milliers de points de données par cellule : courbes de tension, profils de courant, relevés de température, mesures de capacité sur des centaines de cycles. TofuPilot stocke tout dans un format structuré et interrogeable pour que vous puissiez suivre la perte de capacité, comparer les cellules et détecter les problèmes de qualité avant qu'ils n'atteignent le pack.

À quoi ressemblent les données de cyclage batterie

Un seul test de cyclage de cellule produit :

Point de donnéesPar cycleSur 500 cycles
Tension vs temps~1 000 échantillons500 000 échantillons
Courant vs temps~1 000 échantillons500 000 échantillons
Température~100 échantillons50 000 échantillons
Capacité de charge (Ah)1 valeur500 valeurs
Capacité de décharge (Ah)1 valeur500 valeurs
Rendement coulombique1 valeur500 valeurs

Multipliez cela par des centaines ou des milliers de cellules en production, et vous faites face à un problème de gestion de données que les tableurs ne peuvent pas résoudre.

Enregistrement des données de cyclage dans TofuPilot

Téléchargement par cycle

Téléchargez les résultats après chaque cycle de charge/décharge. Cela vous donne une visibilité en temps réel sur les performances de la cellule.

battery_cycle_test.py
from tofupilot import TofuPilotClient

client = TofuPilotClient()

def log_cycle(cell_serial, cycle_number, charge_ah, discharge_ah, temp_max, voltage_curve):
    coulombic_eff = discharge_ah / charge_ah * 100 if charge_ah > 0 else 0
    capacity_retention = discharge_ah / nominal_capacity * 100

    client.create_run(
        procedure_id=f"CELL-CYCLING-C{cycle_number}",
        unit_under_test={"serial_number": cell_serial},
        run_passed=capacity_retention > 80 and temp_max < 45,
        steps=[{
            "name": f"Cycle {cycle_number}",
            "step_type": "measurement",
            "status": capacity_retention > 80,
            "measurements": [
                {"name": "charge_capacity_ah", "value": charge_ah, "unit": "Ah", "limit_low": 2.8},
                {"name": "discharge_capacity_ah", "value": discharge_ah, "unit": "Ah", "limit_low": 2.8},
                {"name": "coulombic_efficiency_pct", "value": coulombic_eff, "unit": "%", "limit_low": 99.0},
                {"name": "capacity_retention_pct", "value": capacity_retention, "unit": "%", "limit_low": 80.0},
                {"name": "max_temperature_c", "value": temp_max, "unit": "°C", "limit_high": 45.0},
                {"name": "voltage_curve_v", "value": voltage_curve, "unit": "V"},
            ],
        }],
    )

Téléchargement du résumé de fin de vie

Après la fin du cyclage, téléchargez un résumé avec les métriques clés de vieillissement.

battery_eol_summary.py
client.create_run(
    procedure_id="CELL-CYCLING-SUMMARY",
    unit_under_test={"serial_number": cell_serial},
    run_passed=final_capacity_retention > 80,
    steps=[{
        "name": "Résumé de cyclage",
        "step_type": "measurement",
        "status": final_capacity_retention > 80,
        "measurements": [
            {"name": "total_cycles", "value": 500, "unit": "cycles"},
            {"name": "initial_capacity_ah", "value": 3.2, "unit": "Ah"},
            {"name": "final_capacity_ah", "value": 2.72, "unit": "Ah"},
            {"name": "capacity_retention_pct", "value": 85.0, "unit": "%", "limit_low": 80.0},
            {"name": "avg_coulombic_efficiency", "value": 99.7, "unit": "%", "limit_low": 99.0},
            {"name": "max_temperature_observed", "value": 42.3, "unit": "°C", "limit_high": 45.0},
        ],
    }],
)

Suivi de la perte de capacité à travers la production

La vraie valeur des données de cyclage centralisées est la comparaison des cellules entre lots de production. Le suivi de tendance des mesures de TofuPilot montre :

  • Distribution de rétention de capacité : Toutes les cellules vieillissent-elles au même rythme ?
  • Variation lot par lot : La nouvelle formulation d'électrolyte change-t-elle la courbe de dégradation ?
  • Détection d'anomalies : Quelles cellules se dégradent plus vite que prévu ?

Si les cellules du lot 47 montrent 90 % de rétention à 300 cycles alors que le lot 46 montrait 94 %, quelque chose a changé dans le processus de fabrication. Les données dans TofuPilot vous le disent immédiatement.

Classification des cellules à partir des données de cyclage

Toutes les cellules ne sont pas égales. Les données de cyclage aident à classer les cellules en catégories pour différentes applications.

GradeCritèresApplication
ACapacité > 3,1 Ah, rétention > 95 % à 200 cyclesPacks VE
BCapacité > 2,9 Ah, rétention > 90 % à 200 cyclesStockage d'énergie
CEn dessous du Grade BApplications de seconde vie

Les filtres de mesure de TofuPilot vous permettent d'interroger les cellules par n'importe quelle combinaison de métriques de cyclage pour attribuer automatiquement les grades.

Intégration avec les cycleurs de batterie

La plupart des cycleurs de batterie (Arbin, Maccor, Neware, BioLogic) exportent les données en CSV ou en formats propriétaires. Analysez la sortie du cycleur et téléchargez vers TofuPilot.

arbin_import.py
import csv
from tofupilot import TofuPilotClient

client = TofuPilotClient()

def import_arbin_data(csv_path, cell_serial):
    with open(csv_path) as f:
        reader = csv.DictReader(f)
        for row in reader:
            if row["Step_Type"] == "Discharge":
                client.create_run(
                    procedure_id="CELL-CYCLING",
                    unit_under_test={"serial_number": cell_serial},
                    run_passed=float(row["Discharge_Capacity(Ah)"]) > 2.8,
                    steps=[{
                        "name": f"Cycle {row['Cycle_Index']}",
                        "step_type": "measurement",
                        "status": True,
                        "measurements": [
                            {"name": "discharge_capacity_ah", "value": float(row["Discharge_Capacity(Ah)"]), "unit": "Ah"},
                            {"name": "charge_capacity_ah", "value": float(row["Charge_Capacity(Ah)"]), "unit": "Ah"},
                            {"name": "max_voltage_v", "value": float(row["Voltage(V)"]), "unit": "V"},
                        ],
                    }],
                )

Surveillance de la sécurité

Les tests de batterie ont des exigences de sécurité uniques. TofuPilot aide à suivre les mesures critiques pour la sécurité :

  • Température maximale : Cellules approchant des seuils d'emballement thermique
  • Anomalies de tension : Cellules qui n'atteignent pas la tension de charge complète ou chutent trop vite
  • Sauts de capacité : Changements soudains de capacité indiquant des courts-circuits internes
  • Croissance de l'impédance : Résistance interne croissante indiquant une dégradation

Définissez des limites strictes sur ces mesures de sécurité. Une cellule qui passe les spécifications de capacité mais présente un comportement de température anormal nécessite une investigation avant d'être intégrée dans un pack.

Plus de guides

Mettez ce guide en pratique