Cell matching software

dermot

100 W
Joined
May 15, 2007
Messages
172
I have over 150 used A123 M1 cells and have tested them individually for capacity and leakage - they all run between 1.92 and 2.28AH each and hold above 3.5V for a week after charge.

I want to assemble them into a 7P 20S pack and match them so that all parallel modules have the same overall capacity.

I can obviously make a stab at this manually, but it will be quite time-consuming and prone to error.

Anyone know of some software that would allow me to enter a number for each cell and its capacity then it would crunch the numbers to arrange cells to get the best balance of capacity?

I already have 5P 16S and 4P 20S packs and can see that I could get another 5 or even 10 % of overall capacity if I'd matched them, rather than just a random configuration.

dermot
 
Hmm, had a look, but couldn't find it - got a direct link?

cheers,

dermot
 
dermot said:
I want to assemble them into a 7P 20S pack and match them so that all parallel modules have the same overall capacity.

A chain is only as string as it's weakest link... The lowest capacity cell(s) will ultimately determine the pack capacity/performance. If you just parallel series connected strings, the runt cell will determine where the pack dies.

Paralleling the cells at the "P" level, then connecting the parallel groups in series (the S level) will help since the higher capacity cells will tend to charge the lower capacity ones. But those lower capacity cells will still drag down the pack performance. Weed them out... even if that means a 6P 20S pack (or 7P 18S).
 
I'm doing a similar thing with different cells,
I'm using icharger for discharging ( 6amps in regen mode) so doesn't take long to do a cell, you could easily go to higher amps,
I had to make up a simple circuit with light globes to do it ( some diodes and one cap also needed)
You can also get internal resistance measurement, you could set the discharge amps to make it a very quick process for each cell.
 
Definitely the best way to configure it would be in 1s7p modules you connect in series.

The key is as you said i think to get all these modules as close as possible in combined capacity.

It would be cool if someone made a program that could tell you which cells to combine with which to achieve this but i suspect no one has made one as it would be quite complex.

Firstly you would need to add all of the cells you have capacity together then divide it by the number of series banks you want.
This would give you the desired target capacity for each bank.

You could try to match cells yourself to get as close as you can to this value as possible say within a certain amount of mah.

it would be very time consuming though and a program to match the cells using some algorithm for the best combination would be really cool.
 
4 years ago i posted a Mathlab file that i made with a friend to match cells in Ri AND capacity at the same time. The precision was really high and the difference between each parallel groups was usually under 0.02% for 6+ cell per parallel groups... that's also what i used for my mongoose with 432 konion cells.. still well balanced today after 4 years :wink:

The goal is to have all parallel groups with the same capacity and RI

I am working with my friend ( a programmer) on a new version that will be executable and no more need mathlab installation.

It will allow you to enter:

-the number of total cells,
-the number of parallel group
-the numbe rof cells per group
-will display the residual loose cells
-will display the std deviation ( error between each parallel group for Ri and C)
finally will display each group of cell number spreaded to get the best matching.

As well you will be able to enter a number of cells that is higher than the total cells in all parallel group.. so thay will leave some margin for the optimization.

This software will be using some special optimization dll

- you will be able to link that software to open a txt file with all cell data with capacity and RI

As well it will NOT give you the perfect best match.. it's nearly impossible... :lol:
otherwise, doing every possible combinaison of matchiing and geting the best of the best match using all iteration possible, would take more than the age of the universe with all supercomputer together... :shock:

But it will give you the best match that is with ina really close percentage of the perfect match.... wich is much more simple to get!

here is an exemple of the result i get with the previos version of my application:

Pack 1 : 3 9 66 100 130 148 155 170 -> Pack Cap= 23126, RI=3.310
Pack 2 : 2 57 70 84 111 112 127 166 -> Pack Cap= 23126, RI=3.306
Pack 3 : 5 27 81 91 131 133 141 163 -> Pack Cap= 23121, RI=3.318
Pack 4 : 39 68 71 83 90 92 119 175 -> Pack Cap= 23114, RI=3.311
Pack 5 : 32 45 55 106 116 149 150 171 -> Pack Cap= 23124, RI=3.328
Pack 6 : 10 20 40 58 61 67 140 172 -> Pack Cap= 23121, RI=3.313
Pack 7 : 14 17 22 63 126 146 158 164 -> Pack Cap= 23105, RI=3.335
Pack 8 : 11 49 59 82 86 93 107 139 -> Pack Cap= 23118, RI=3.316
Pack 9 : 29 65 72 88 117 121 132 156 -> Pack Cap= 23113, RI=3.313
Pack 10 : 4 16 30 76 79 143 157 165 -> Pack Cap= 23114, RI=3.322
Pack 11 : 48 51 87 115 138 159 160 174 -> Pack Cap= 23121, RI=3.308
Pack 12 : 6 23 46 80 98 105 129 162 -> Pack Cap= 23118, RI=3.324
Pack 13 : 33 53 75 95 96 135 145 173 -> Pack Cap= 23121, RI=3.328
Pack 14 : 1 8 44 54 85 97 120 142 -> Pack Cap= 23126, RI=3.299
Pack 15 : 25 34 38 41 50 56 99 176 -> Pack Cap= 23129, RI=3.304
Pack 16 : 7 28 35 37 64 118 128 152 -> Pack Cap= 23120, RI=3.315
Pack 17 : 24 42 52 62 101 103 137 151 -> Pack Cap= 23128, RI=3.314
Pack 18 : 12 36 47 78 125 136 144 161 -> Pack Cap= 23135, RI=3.311
Pack 19 : 21 26 94 102 110 113 124 147 -> Pack Cap= 23120, RI=3.318
Pack 20 : 15 18 60 69 123 134 167 168 -> Pack Cap= 23121, RI=3.320
Pack 21 : 13 19 43 73 77 104 153 154 -> Pack Cap= 23123, RI=3.329

All packs Mean Cap= 23121.1, Mean RI=3.3162
All packs Std Cap= 6.5, Std RI=0.0090

FreeCells Set : 169 114 108 122 74 109 31 89

Movements counts :
Pack 1 : 10 2 2 8 3 0 3 6
Pack 2 : 1 0 0 3 2 69 0 0
Pack 3 : 0 6 0 0 2 0 0 0
Pack 4 : 0 0 0 5 6 1 0 4
Pack 5 : 1 15 3 0 0 0 0 4
Pack 6 : 1 0 0 1 0 1 0 0
Pack 7 : 49 2 1 0 0 1 1 3


Doc
 
I also made am Excel file to study the Ri and capacity distribution over the Makita pack i have:
 

Attachments

  • Ri and capacity distribution Konion 2007.JPG
    Ri and capacity distribution Konion 2007.JPG
    140.5 KB · Views: 2,017
hey doc way cool that you are making a executable version in the mean time do you have a link to the mathlab file you made to match cells before.

I Am considering building a pack out of some 18650 cells harvested from lenovo laptop batterys.
 
hi,

I have written a java application for capacity matching of my A123 cells but focused mainly on capacity balance, so please don't expect too much,
the ri part is available but not very well thought out.

The application reads textfiles (.txt, .csv) with cell id, capacity in mAh and ri in mOhm separated by tab or semicolon.

You can set the following parameters:

capacity reduction caused by ri matching: default 5
The application looks for the best capacity configuration first and then tries to improve the internal resistance.
The capacity reduction parameter in mAh is the maximum value the capacity difference can increase due to the
internal resistance matching algorithm (lower --> better capacity balance, higher --> better ri balance).

remove surplus: lowest capacity or highest ri
If there are more cells available than needed, the application excludes surplus cells in this manner.

cells in series, cells in parallel: the desired pack configuration

The result is displayed in a textbox and the following information is shown:

summary:
each line shows all cells of a parallel group sorted by id
the total capacity and ri is displayed at the end of each line
the max. capacity and ri difference between the parallel groups is displayed at the end of the summary part

details (capacity)
each line shows all cells of a parallel group with its capacity sorted by id.
the total capacity is displayed at the end of each line
the max. capacity difference between the parallel groups is displayed at the end of the capacity details part

details (ri)
each line shows all cells of a parallel group with its ri sorted by id.
the total ri is displayed at the end of each line
the max. ri difference between the parallel groups is displayed at the end of the ri details part

example for the structure (CellId;capacity;ri) of the input text file (just randomized capacities and ri for testing):

Code:
1;2214;7
2;2213;20
3;2211;11
4;2219;13
5;2224;13
.
.
.

example for the result (16s15p):

Code:
finished, summary:

configuration: 16s 15p
s[1] --> 46, 56, 106, 127, 168, 185, 187, 192, 194, 205, 223, 226, 229, 236, 237,  total: capacity: 32705.0 mAh, Ri: 0.83 mOhm
s[2] --> 2, 8, 14, 15, 45, 51, 57, 58, 66, 71, 90, 141, 178, 191, 235,  total: capacity: 32713.0 mAh, Ri: 0.8 mOhm
s[3] --> 11, 49, 59, 76, 88, 95, 110, 156, 167, 174, 188, 203, 208, 220, 238,  total: capacity: 32708.0 mAh, Ri: 0.82 mOhm
s[4] --> 6, 9, 37, 50, 87, 120, 134, 139, 147, 181, 184, 193, 200, 231, 233,  total: capacity: 32706.0 mAh, Ri: 0.81 mOhm
s[5] --> 21, 61, 65, 80, 92, 94, 116, 124, 129, 130, 131, 132, 138, 164, 214,  total: capacity: 32708.0 mAh, Ri: 0.81 mOhm
s[6] --> 19, 30, 43, 44, 47, 75, 98, 104, 111, 117, 118, 119, 173, 198, 232,  total: capacity: 32708.0 mAh, Ri: 0.85 mOhm
s[7] --> 17, 31, 52, 77, 85, 115, 126, 128, 137, 161, 170, 176, 209, 217, 219,  total: capacity: 32704.0 mAh, Ri: 0.79 mOhm
s[8] --> 12, 20, 24, 33, 40, 48, 54, 93, 97, 165, 172, 190, 210, 213, 227,  total: capacity: 32705.0 mAh, Ri: 0.79 mOhm
s[9] --> 7, 18, 23, 32, 60, 72, 83, 100, 107, 109, 142, 145, 157, 195, 215,  total: capacity: 32712.0 mAh, Ri: 0.78 mOhm
s[10] --> 13, 34, 64, 112, 154, 160, 169, 175, 177, 180, 199, 201, 211, 234, 239,  total: capacity: 32711.0 mAh, Ri: 0.84 mOhm
s[11] --> 25, 26, 27, 41, 53, 63, 67, 74, 91, 103, 113, 143, 151, 221, 222,  total: capacity: 32712.0 mAh, Ri: 0.78 mOhm
s[12] --> 70, 84, 102, 108, 135, 150, 155, 159, 166, 171, 179, 182, 183, 197, 212,  total: capacity: 32710.0 mAh, Ri: 0.78 mOhm
s[13] --> 5, 36, 38, 78, 79, 86, 89, 101, 105, 144, 149, 163, 216, 218, 230,  total: capacity: 32706.0 mAh, Ri: 0.8 mOhm
s[14] --> 28, 35, 55, 62, 68, 73, 121, 122, 125, 152, 153, 158, 189, 202, 228,  total: capacity: 32708.0 mAh, Ri: 0.79 mOhm
s[15] --> 1, 4, 29, 39, 42, 82, 96, 99, 123, 136, 196, 204, 206, 225, 240,  total: capacity: 32708.0 mAh, Ri: 0.85 mOhm
s[16] --> 3, 10, 16, 22, 69, 81, 114, 133, 140, 146, 148, 162, 186, 207, 224,  total: capacity: 32706.0 mAh, Ri: 0.84 mOhm

max. capacity difference: 9.0 mAh
max. Ri difference: 0.07 mOhm

details (capacity):

s[1] --> 46 (2147.0), 56 (2147.0), 106 (2198.0), 127 (2111.0), 168 (2215.0), 185 (2222.0), 187 (2257.0), 192 (2174.0), 194 (2115.0), 205 (2180.0), 223 (2225.0), 226 (2161.0), 229 (2106.0), 236 (2266.0), 237 (2181.0),  total: 32705.0 mAh
s[2] --> 2 (2213.0), 8 (2224.0), 14 (2071.0), 15 (2061.0), 45 (2169.0), 51 (2112.0), 57 (2224.0), 58 (2247.0), 66 (2179.0), 71 (2155.0), 90 (2261.0), 141 (2161.0), 178 (2193.0), 191 (2240.0), 235 (2203.0),  total: 32713.0 mAh
s[3] --> 11 (2066.0), 49 (2140.0), 59 (2222.0), 76 (2109.0), 88 (2209.0), 95 (2256.0), 110 (2193.0), 156 (2170.0), 167 (2238.0), 174 (2229.0), 188 (2206.0), 203 (2174.0), 208 (2164.0), 220 (2124.0), 238 (2208.0),  total: 32708.0 mAh
s[4] --> 6 (2218.0), 9 (2090.0), 37 (2243.0), 50 (2094.0), 87 (2190.0), 120 (2256.0), 134 (2127.0), 139 (2162.0), 147 (2186.0), 181 (2218.0), 184 (2166.0), 193 (2123.0), 200 (2221.0), 231 (2192.0), 233 (2220.0),  total: 32706.0 mAh
s[5] --> 21 (2225.0), 61 (2221.0), 65 (2167.0), 80 (2136.0), 92 (2244.0), 94 (2264.0), 116 (2265.0), 124 (2102.0), 129 (2179.0), 130 (2153.0), 131 (2164.0), 132 (2165.0), 138 (2159.0), 164 (2199.0), 214 (2065.0),  total: 32708.0 mAh
s[6] --> 19 (2223.0), 30 (2142.0), 43 (2182.0), 44 (2148.0), 47 (2143.0), 75 (2114.0), 98 (2150.0), 104 (2122.0), 111 (2190.0), 117 (2288.0), 118 (2272.0), 119 (2276.0), 173 (2169.0), 198 (2117.0), 232 (2172.0),  total: 32708.0 mAh
s[7] --> 17 (2230.0), 31 (2140.0), 52 (2100.0), 77 (2098.0), 85 (2191.0), 115 (2260.0), 126 (2110.0), 128 (2107.0), 137 (2141.0), 161 (2238.0), 170 (2320.0), 176 (2187.0), 209 (2188.0), 217 (2126.0), 219 (2268.0),  total: 32704.0 mAh
s[8] --> 12 (2085.0), 20 (2229.0), 24 (2222.0), 33 (2233.0), 40 (2222.0), 48 (2133.0), 54 (2111.0), 93 (2253.0), 97 (2123.0), 165 (2212.0), 172 (2204.0), 190 (2207.0), 210 (2105.0), 213 (2189.0), 227 (2177.0),  total: 32705.0 mAh
s[9] --> 7 (2220.0), 18 (2202.0), 23 (2244.0), 32 (2114.0), 60 (2208.0), 72 (2193.0), 83 (2253.0), 100 (2146.0), 107 (2162.0), 109 (2196.0), 142 (2139.0), 145 (2188.0), 157 (2168.0), 195 (2128.0), 215 (2151.0),  total: 32712.0 mAh
s[10] --> 13 (2079.0), 34 (2235.0), 64 (2229.0), 112 (2284.0), 154 (2165.0), 160 (2197.0), 169 (2174.0), 175 (2188.0), 177 (2204.0), 180 (2186.0), 199 (2100.0), 201 (2168.0), 211 (2108.0), 234 (2191.0), 239 (2203.0),  total: 32711.0 mAh
s[11] --> 25 (2153.0), 26 (2131.0), 27 (2146.0), 41 (2142.0), 53 (2124.0), 63 (2233.0), 67 (2153.0), 74 (2131.0), 91 (2324.0), 103 (2149.0), 113 (2324.0), 143 (2143.0), 151 (2296.0), 221 (2141.0), 222 (2122.0),  total: 32712.0 mAh
s[12] --> 70 (2149.0), 84 (2196.0), 102 (2215.0), 108 (2164.0), 135 (2161.0), 150 (2191.0), 155 (2214.0), 159 (2221.0), 166 (2224.0), 171 (2183.0), 179 (2199.0), 182 (2144.0), 183 (2179.0), 197 (2133.0), 212 (2137.0),  total: 32710.0 mAh
s[13] --> 5 (2224.0), 36 (2230.0), 38 (2231.0), 78 (2095.0), 79 (2094.0), 86 (2164.0), 89 (2253.0), 101 (2151.0), 105 (2187.0), 144 (2269.0), 149 (2187.0), 163 (2210.0), 216 (2083.0), 218 (2130.0), 230 (2198.0),  total: 32706.0 mAh
s[14] --> 28 (2137.0), 35 (2211.0), 55 (2151.0), 62 (2225.0), 68 (2188.0), 73 (2113.0), 121 (2114.0), 122 (2147.0), 125 (2115.0), 152 (2206.0), 153 (2196.0), 158 (2288.0), 189 (2203.0), 202 (2237.0), 228 (2177.0),  total: 32708.0 mAh
s[15] --> 1 (2214.0), 4 (2219.0), 29 (2153.0), 39 (2222.0), 42 (2142.0), 82 (2158.0), 96 (2244.0), 99 (2141.0), 123 (2165.0), 136 (2159.0), 196 (2132.0), 204 (2204.0), 206 (2206.0), 225 (2160.0), 240 (2189.0),  total: 32708.0 mAh
s[16] --> 3 (2211.0), 10 (2064.0), 16 (2064.0), 22 (2220.0), 69 (2175.0), 81 (2216.0), 114 (2311.0), 133 (2172.0), 140 (2152.0), 146 (2193.0), 148 (2197.0), 162 (2212.0), 186 (2182.0), 207 (2213.0), 224 (2124.0),  total: 32706.0 mAh

max. capacity difference: 9.0 mAh

details (Ri):

s[1] --> 46 (16), 56 (7), 106 (15), 127 (12), 168 (16), 185 (8), 187 (16), 192 (15), 194 (12), 205 (8), 223 (18), 226 (18), 229 (12), 236 (15), 237 (16),  total: 0.83 mOhm
s[2] --> 2 (20), 8 (14), 14 (12), 15 (9), 45 (8), 51 (13), 57 (20), 58 (11), 66 (20), 71 (12), 90 (7), 141 (11), 178 (14), 191 (18), 235 (11),  total: 0.8 mOhm
s[3] --> 11 (17), 49 (17), 59 (8), 76 (16), 88 (12), 95 (12), 110 (12), 156 (8), 167 (20), 174 (16), 188 (20), 203 (10), 208 (13), 220 (12), 238 (9),  total: 0.82 mOhm
s[4] --> 6 (15), 9 (12), 37 (19), 50 (20), 87 (8), 120 (12), 134 (10), 139 (14), 147 (11), 181 (8), 184 (10), 193 (19), 200 (16), 231 (15), 233 (9),  total: 0.81 mOhm
s[5] --> 21 (10), 61 (7), 65 (13), 80 (16), 92 (14), 94 (9), 116 (13), 124 (15), 129 (13), 130 (9), 131 (15), 132 (17), 138 (9), 164 (19), 214 (19),  total: 0.81 mOhm
s[6] --> 19 (8), 30 (14), 43 (13), 44 (19), 47 (20), 75 (17), 98 (9), 104 (20), 111 (11), 117 (17), 118 (18), 119 (7), 173 (8), 198 (17), 232 (20),  total: 0.85 mOhm
s[7] --> 17 (16), 31 (18), 52 (11), 77 (10), 85 (9), 115 (13), 126 (7), 128 (17), 137 (10), 161 (15), 170 (16), 176 (11), 209 (12), 217 (14), 219 (10),  total: 0.79 mOhm
s[8] --> 12 (11), 20 (11), 24 (12), 33 (17), 40 (11), 48 (8), 54 (15), 93 (16), 97 (15), 165 (10), 172 (18), 190 (12), 210 (12), 213 (7), 227 (14),  total: 0.79 mOhm
s[9] --> 7 (19), 18 (16), 23 (14), 32 (14), 60 (10), 72 (19), 83 (18), 100 (13), 107 (11), 109 (14), 142 (9), 145 (11), 157 (8), 195 (9), 215 (7),  total: 0.78 mOhm
s[10] --> 13 (9), 34 (14), 64 (15), 112 (19), 154 (9), 160 (7), 169 (15), 175 (15), 177 (12), 180 (15), 199 (20), 201 (19), 211 (10), 234 (17), 239 (11),  total: 0.84 mOhm
s[11] --> 25 (8), 26 (12), 27 (11), 41 (14), 53 (20), 63 (10), 67 (13), 74 (18), 91 (16), 103 (11), 113 (18), 143 (9), 151 (7), 221 (17), 222 (9),  total: 0.78 mOhm
s[12] --> 70 (11), 84 (12), 102 (15), 108 (13), 135 (9), 150 (13), 155 (17), 159 (17), 166 (9), 171 (7), 179 (8), 182 (13), 183 (14), 197 (17), 212 (15),  total: 0.78 mOhm
s[13] --> 5 (13), 36 (9), 38 (15), 78 (11), 79 (20), 86 (13), 89 (14), 101 (8), 105 (15), 144 (20), 149 (11), 163 (13), 216 (12), 218 (7), 230 (13),  total: 0.8 mOhm
s[14] --> 28 (8), 35 (14), 55 (18), 62 (16), 68 (7), 73 (12), 121 (16), 122 (8), 125 (10), 152 (19), 153 (13), 158 (17), 189 (10), 202 (18), 228 (10),  total: 0.79 mOhm
s[15] --> 1 (7), 4 (13), 29 (14), 39 (19), 42 (8), 82 (9), 96 (17), 99 (20), 123 (19), 136 (10), 196 (13), 204 (16), 206 (18), 225 (11), 240 (20),  total: 0.85 mOhm
s[16] --> 3 (11), 10 (20), 16 (16), 22 (18), 69 (19), 81 (8), 114 (18), 133 (8), 140 (16), 146 (19), 148 (11), 162 (17), 186 (9), 207 (20), 224 (7),  total: 0.84 mOhm

max. Ri difference: 0.07 mOhm

screenshot:



I think that I will get it finished the next few days.
I will upload it if you are interested.

tef
 
hi that application looks great im planning to build a larger battery from some reclaimed cells of varying remainng capacity and it would help a lot.

Please upload the application it looks great.
 
Doctorbass said:
I also made am Excel file to study the Ri and capacity distribution over the Makita pack i have:

Heya! Doc, I tried finding your old Matlab file using google, but had no luck. Do you still have it? I can use matlab/have matlab for classes.
 
Guys, can you give details about the underlying solution to this problem?
Is this the k-partitioning problem? What optimization tools/algorithms can be used?

I'm having problem matching my cells, because the cells have high internal resistance and a sort of 'residual capacity', meaning that after discharging to 3.0v the voltage jumps back to 3.6-3.8v and later I can get out considerable amount of energy again discharging to 3.0v.
The cells are of different brands, nominal capacities and health, some go down on the cliff sharply, others are sagging more, and bounce back shortly after discharge ends.

I have discharged the cells at 1A and noted the capacities. After couple of days rest, I have repeated the discharge and some had considerable capacity left (upto about 40%), while others next to nothing (1-2%).

I am thinking that a good matching should take into consideration this. That is finding the groups that have closely equal first-time capacity and closely equal second-discharge-capacity at the same time, so that the distribution of the 'residual capacity' is evenly balanced.

Any ideas how to achieve that?

I was playing with tef's great Java application.
I was wondering if it would be a good idea to assign some RI values based on this 'residual capacity' and let the application calculate the matching accordingly.

Since I don't have an RI meter and the ohmic resistance calculations based on voltage sag during load were not very consistent (because some cells continuously bleed down under load and do not come back instantly), I thought I will just concentrate on capacity matching this time having in mind that some cells cannot give out all the capacity at once.
 
Back
Top