switch to web app

This commit is contained in:
2025-12-20 15:06:53 +01:00
parent 52cd4ea0ec
commit f600897ee8
7 changed files with 2682 additions and 10 deletions

127
README.md
View File

@ -1,13 +1,122 @@
# LiXX Cell Pack Matcher
Tool for finding the best configuration in a LiXX Battery Pack.
Matches capacity in parallel cell groups from a serial pack.
A web-based tool for finding the optimal cell configuration in lithium battery packs. It matches cells based on capacity and internal resistance to maximize pack performance and longevity.
## Working
- Matches cells bases on capacity for varius Pack configuration. Set parallel and serial cell count respectively.
- Supports labels as identifier for cells.
![License](https://img.shields.io/badge/license-MIT-blue.svg)
## Not Working
- Clould be faster, 6S2P needs more than 10min to compute
- Support internal cell resistance matching
- Support bigger cell pool for a pack that is needed
## Features
- **Pack Configuration**: Support for any SxP configuration (e.g., 6S2P, 4S3P, 12S4P)
- **Cell Matching**: Optimize by capacity (mAh) and internal resistance (mΩ)
- **Multiple Algorithms**:
- Genetic Algorithm (fast, recommended)
- Simulated Annealing (good for escaping local minima)
- Exhaustive Search (optimal for small configurations)
- **Surplus Cell Support**: Use more cells than needed; the algorithm selects the best subset
- **Live Progress**: Watch the optimization in real-time
- **Visual Pack Layout**: Color-coded visualization of the matched pack
- **Export Options**: JSON, CSV, and clipboard support
- **Keyboard Accessible**: Full keyboard navigation support
- **No Dependencies**: Pure HTML/CSS/JavaScript, no build step required
## Scientific Background
This tool implements cell matching algorithms based on research findings about lithium-ion battery pack assembly:
> **Internal resistance matching for parallel-connected lithium-ion cells and impacts on battery pack cycle life**
>
> Shi et al., Journal of Power Sources (2013)
> DOI: [10.1016/j.jpowsour.2013.11.064](https://doi.org/10.1016/j.jpowsour.2013.11.064)
Key findings:
- A 20% difference in internal resistance between parallel-connected cells can reduce cycle life by approximately 40%
- Resistance mismatch causes uneven current distribution
- Uneven current leads to higher operating temperatures and accelerated capacity fade
## Usage
### Quick Start
1. Open `index.html` in a web browser
2. Set your pack configuration (e.g., 6S2P)
3. Enter cell data (label, capacity, and optionally internal resistance)
4. Click "Load Example" to see sample data
5. Adjust weights for capacity vs. IR matching
6. Click "Start Matching"
7. Review results and export if needed
### Keyboard Shortcuts
| Shortcut | Action |
|----------|--------|
| `Alt + A` | Add new cell |
| `Alt + S` | Start matching |
| `Alt + E` | Load example data |
| `Esc` | Stop matching / Close dialog |
| `?` | Show keyboard shortcuts |
### Cell Data Format
Each cell requires:
- **Label**: Unique identifier (e.g., "B01", "Cell-A")
- **Capacity**: Measured capacity in mAh
- **Internal Resistance** (optional): Measured IR in mΩ
### Algorithm Selection
| Algorithm | Best For | Speed |
|-----------|----------|-------|
| Genetic Algorithm | Most cases, large pools | Fast |
| Simulated Annealing | Avoiding local optima | Medium |
| Exhaustive | Small configs (<8 cells) | Slow |
### Matching Weights
- **Capacity Weight**: Importance of matching parallel group capacities
- **IR Weight**: Importance of matching internal resistance within parallel groups
For current high-rate applications (e.g., power tools, EVs), increase IR weight.
For capacity-focused applications, increase capacity weight.
## Project Structure
```
lixx_cell_pack_matcher/
├── index.html # Main application
├── css/
│ └── styles.css # Application styles
├── js/
│ ├── app.js # Main application logic
│ └── matching-algorithms.js # Matching algorithms
├── data/
│ └── favicon.svg # Application icon
├── README.md # This file
└── LICENSE # MIT License
```
## Technical Details
### Scoring Algorithm
The match quality score is calculated as:
```
score = (capacityWeight × capacityCV) + (irWeight × avgWithinGroupIRCV)
```
Where:
- `capacityCV`: Coefficient of variation of parallel group capacities
- `avgWithinGroupIRCV`: Average coefficient of variation of IR within each parallel group
- Lower score = better match
### Coefficient of Variation
```
CV = (σ / μ) × 100%
```
Where σ is the standard deviation and μ is the mean.
## License
MIT License - see [LICENSE](LICENSE) for details.