jepegit / cellpy

extract and tweak data from electrochemical tests of cells
MIT License
81 stars 27 forks source link

Estimate internal resistance at start and end of (dis)charge #313

Open morrowrasmus opened 5 days ago

morrowrasmus commented 5 days ago

Is your feature request related to a problem? Please describe. Based on the potential drop/jump at the end/start of (dis)charge, the internal resistance should be calculated and reported in the steps-DataFrame and possibly in the summary-DataFrame.

Describe the solution you'd like A simple estimation is suggested: take the potential change between the last point in a preceeding rest step and the first point in a charge or discharge step, and calculate the estimated internal resistance based on Ohm's law. The same for last point of the end of the (dis)charge step and first point of the subsequent rest step. This should result in two columns in the steps-table (ir_start, ir_end) and four columns in the summary-DataFrame if impemented there (ir_start_charge, ir_start_discharge, ir_end_charge, ir_end_discharge)

As a part of this, the relaxation potential and OCV-potential estimation can also be added to the steps-DataFrame(and possibly the summary-DataFrame) based on the first and last potential values of the following rest-step. This will also result in two columns in the steps-DataFrame and four columns in the summary-DataFrame.

Describe alternatives you've considered As discussed with @jepegit, this can be done in a more correct way by fitting a function to the relaxation potential curve and extrapolating the fitted function to find the internal resistance. However, this is a much more complex task and probably hard to automate properly?

Additional context The _ir_to_summary()-method of the CellpyCell-class assigns internal resistances, as I've understood from @jepegit based on values generated by the Maccor-cyclers. I guess this could be a good place to implement the logic for this?

jepegit commented 4 days ago

@morrowrasmus, I agree on all points :-) Make it reasonably simple for the first implementation, and then we can build upon that later when or if we have a robust fitting methodology. One design question we would need to make at one point is if we should add more than one set of IR columns to the summary table. Since "IR" can be obtained both from specific steps implemented by the testers themselves, and from post-processing steps (as suggested here)...