Skip to content

Electrochemical Impedance Spectroscopy

pypalmsens.ElectrochemicalImpedanceSpectroscopy


              flowchart TD
              pypalmsens.ElectrochemicalImpedanceSpectroscopy[ElectrochemicalImpedanceSpectroscopy]
              pypalmsens._methods.base.BaseTechnique[BaseTechnique]
              pypalmsens._methods.mixins.CurrentRangeMixin[CurrentRangeMixin]
              pypalmsens._methods.mixins.PotentialRangeMixin[PotentialRangeMixin]
              pypalmsens._methods.mixins.PretreatmentMixin[PretreatmentMixin]
              pypalmsens._methods.mixins.VersusOCPMixin[VersusOCPMixin]
              pypalmsens._methods.mixins.PostMeasurementMixin[PostMeasurementMixin]
              pypalmsens._methods.mixins.MeasurementTriggersMixin[MeasurementTriggersMixin]
              pypalmsens._methods.mixins.EquilibrationTriggersMixin[EquilibrationTriggersMixin]
              pypalmsens._methods.mixins.MultiplexerMixin[MultiplexerMixin]
              pypalmsens._methods.mixins.GeneralMixin[GeneralMixin]
              pypalmsens._methods.base_model.BaseModel[BaseModel]

                              pypalmsens._methods.base.BaseTechnique --> pypalmsens.ElectrochemicalImpedanceSpectroscopy
                                pypalmsens._methods.base_model.BaseModel --> pypalmsens._methods.base.BaseTechnique
                

                pypalmsens._methods.mixins.CurrentRangeMixin --> pypalmsens.ElectrochemicalImpedanceSpectroscopy
                                pypalmsens._methods.base_model.BaseModel --> pypalmsens._methods.mixins.CurrentRangeMixin
                

                pypalmsens._methods.mixins.PotentialRangeMixin --> pypalmsens.ElectrochemicalImpedanceSpectroscopy
                                pypalmsens._methods.base_model.BaseModel --> pypalmsens._methods.mixins.PotentialRangeMixin
                

                pypalmsens._methods.mixins.PretreatmentMixin --> pypalmsens.ElectrochemicalImpedanceSpectroscopy
                                pypalmsens._methods.base_model.BaseModel --> pypalmsens._methods.mixins.PretreatmentMixin
                

                pypalmsens._methods.mixins.VersusOCPMixin --> pypalmsens.ElectrochemicalImpedanceSpectroscopy
                                pypalmsens._methods.base_model.BaseModel --> pypalmsens._methods.mixins.VersusOCPMixin
                

                pypalmsens._methods.mixins.PostMeasurementMixin --> pypalmsens.ElectrochemicalImpedanceSpectroscopy
                                pypalmsens._methods.base_model.BaseModel --> pypalmsens._methods.mixins.PostMeasurementMixin
                

                pypalmsens._methods.mixins.MeasurementTriggersMixin --> pypalmsens.ElectrochemicalImpedanceSpectroscopy
                                pypalmsens._methods.base_model.BaseModel --> pypalmsens._methods.mixins.MeasurementTriggersMixin
                

                pypalmsens._methods.mixins.EquilibrationTriggersMixin --> pypalmsens.ElectrochemicalImpedanceSpectroscopy
                                pypalmsens._methods.base_model.BaseModel --> pypalmsens._methods.mixins.EquilibrationTriggersMixin
                

                pypalmsens._methods.mixins.MultiplexerMixin --> pypalmsens.ElectrochemicalImpedanceSpectroscopy
                                pypalmsens._methods.base_model.BaseModel --> pypalmsens._methods.mixins.MultiplexerMixin
                

                pypalmsens._methods.mixins.GeneralMixin --> pypalmsens.ElectrochemicalImpedanceSpectroscopy
                                pypalmsens._methods.base_model.BaseModel --> pypalmsens._methods.mixins.GeneralMixin
                



              click pypalmsens.ElectrochemicalImpedanceSpectroscopy href "" "pypalmsens.ElectrochemicalImpedanceSpectroscopy"
              click pypalmsens._methods.base.BaseTechnique href "" "pypalmsens._methods.base.BaseTechnique"
              click pypalmsens._methods.mixins.CurrentRangeMixin href "" "pypalmsens._methods.mixins.CurrentRangeMixin"
              click pypalmsens._methods.mixins.PotentialRangeMixin href "" "pypalmsens._methods.mixins.PotentialRangeMixin"
              click pypalmsens._methods.mixins.PretreatmentMixin href "" "pypalmsens._methods.mixins.PretreatmentMixin"
              click pypalmsens._methods.mixins.VersusOCPMixin href "" "pypalmsens._methods.mixins.VersusOCPMixin"
              click pypalmsens._methods.mixins.PostMeasurementMixin href "" "pypalmsens._methods.mixins.PostMeasurementMixin"
              click pypalmsens._methods.mixins.MeasurementTriggersMixin href "" "pypalmsens._methods.mixins.MeasurementTriggersMixin"
              click pypalmsens._methods.mixins.EquilibrationTriggersMixin href "" "pypalmsens._methods.mixins.EquilibrationTriggersMixin"
              click pypalmsens._methods.mixins.MultiplexerMixin href "" "pypalmsens._methods.mixins.MultiplexerMixin"
              click pypalmsens._methods.mixins.GeneralMixin href "" "pypalmsens._methods.mixins.GeneralMixin"
              click pypalmsens._methods.base_model.BaseModel href "" "pypalmsens._methods.base_model.BaseModel"
            

Create potentiometry method parameters.

Electrochemical Impedance Spectroscopy (EIS) is an electrochemical technique to measure the impedance of a system in dependence of the AC potentials frequency.

Although "spectroscopy" implies a frequency sweep, which is the most common measurement, this class provide the flexibility to set the frequency and vary other parameters, such as DC potential and time.

Available modes of EIS measurements:

  • a frequency scan at a fixed dc-potential (default EIS)
  • frequency scans at each dc-potential in a potential scan
  • frequency scans at specified time intervals (time scan)
  • a single frequency applied at each dc potential in a potential scan (Mott-Schottky)
  • a repeated single frequency at specified time intervals

Methods:

  • from_dict

    Structure technique instance from dict.

  • from_method_id

    Create new instance of appropriate technique from method ID.

  • to_dict

    Return the technique instance as a new key/value dictionary mapping.

Attributes:

ac_potential class-attribute instance-attribute

ac_potential: float = 0.01

AC potential in V RMS.

The amplitude of the ac potential signal has a range of 0.001 V to 0.25 V (RMS). In many applications, a value of 0.010 V (RMS) is used.

begin_potential class-attribute instance-attribute

begin_potential: float = 0.0

The dc-potential at which the measurement starts in V (potential scan only).

I.e. the DC potential of the applied sine wave to start the series of iterative measurements at.

current_range class-attribute instance-attribute

current_range: CurrentRange = Field(default_factory=CurrentRange)

Set the autoranging current.

dc_potential class-attribute instance-attribute

dc_potential: float = 0.0

DC-potential applied during the EIS scan in V.

Also called DC Bias or level. The most common setting for this parameter is 0 V vs. OCP.

end_potential class-attribute instance-attribute

end_potential: float = 0.0

The dc-potential at which the scan ends in V (potential scan only).

I.e. the DC potential of the applied sine wave at which the series of iterative measurements ends.

equilibration_time class-attribute instance-attribute

equilibration_time: float = 0.0

Equilibration time in s.

equilibrion_triggers class-attribute instance-attribute

equilibrion_triggers: EquilibrationTriggers = Field(default_factory=EquilibrationTriggers)

Set the trigger at equilibration settings.

fixed_frequency class-attribute instance-attribute

fixed_frequency: float = 1000

Fixed frequency in Hz (fixed frequency only).

frequency_type class-attribute instance-attribute

frequency_type: Literal['fixed', 'scan'] = 'scan'

Whether to measure a single frequency or scan over a range of frequencies.

Possible values: 'scan', 'fixed'.

  • Scan: a frequency scan is performed starting at the given max_frequency to the min_frequency.
  • Fixed: a single frequency given by 'fixed_frequencya is applied for the given duration or at each potential step or time interval.

general class-attribute instance-attribute

general: General = Field(default_factory=General)

Sets general/other settings.

interval_time class-attribute instance-attribute

interval_time: float = 0.1

The interval at which a measurement iteration should be performed (time scan only).

The minimum interval time between each data point (frequency_type='fixed') or between each frequency scan (frequency_type='scan'). We recommend a time higher than the required time to measure the data point or perform the frequency scan + overhead time. While it's possible to use a shorter time, doing so may lead to incorrect impedance calculations.

If a measurement iteration takes longer than the interval time the next measurement will not be triggered until after it has been completed.

max_equilibration_time class-attribute instance-attribute

max_equilibration_time: float = 5.0

Max equilibration time in s.

The EIS measurement requires a stationary state. This means that before the actual measurement starts, the sine wave is applied during max_equilibration_time only to reach the stationary state.

The maximum number of equilibration sine waves is however 5.

The minimum number of equilibration sines is set to 1, but for very low frequencies, this time is limited by max_equilibration_time.

The maximum time to wait for stationary state is determined by the value of this parameter. A reasonable value might be 5 seconds. In this case this parameter is only relevant when the lowest frequency is less than 1/5 s so 0.2 Hz.

max_frequency class-attribute instance-attribute

max_frequency: float = 10000

Maximum frequency in Hz (frequency scan only).

measurement_triggers class-attribute instance-attribute

measurement_triggers: MeasurementTriggers = Field(default_factory=MeasurementTriggers)

Set the trigger at measurement settings.

min_frequency class-attribute instance-attribute

min_frequency: float = 5.0

Minimum frequency in Hz (frequency scan only).

min_sampling_time class-attribute instance-attribute

min_sampling_time: float = 0.5

Minimum sampling time in s.

Each measurement point of the impedance spectrum is performed during the period specified by min_sampling_time.

This means that the number of measured sine waves is equal to min_sampling_time * frequency. If this value is less than 1 sine wave, the sampling is extended to 1 / frequency.

So for a measurement at a frequency, at least one complete sine wave is measured. Reasonable values for the sampling are in the range of 0.1 to 1 s.

multiplexer class-attribute instance-attribute

multiplexer: Multiplexer = Field(default_factory=Multiplexer)

Set the multiplexer settings.

n_frequencies class-attribute instance-attribute

n_frequencies: int = 11

Number of frequencies (frequency scan only).

Defines the range of frequencies to apply between the max_frequency and min_frequency. For example, a value of 11 will measure at 11 frequencies, including both end points.

post_measurement class-attribute instance-attribute

post_measurement: PostMeasurement = Field(default_factory=PostMeasurement)

Set the post measurement settings.

potential_range class-attribute instance-attribute

potential_range: PotentialRange = Field(default_factory=PotentialRange)

Set the autoranging potential.

pretreatment class-attribute instance-attribute

pretreatment: Pretreatment = Field(default_factory=Pretreatment)

Set the pretreatment settings.

run_time class-attribute instance-attribute

run_time: float = 10.0

Minimal run time in seconds (time scan only).

For example, if a frequency scan takes 18 seconds and is measured at an interval of 19 seconds for a run_time of 40 seconds, then three iterations will be performed.

scan_type class-attribute instance-attribute

scan_type: Literal['potential', 'time', 'fixed'] = 'fixed'

Whether a single or multiple frequency scans are performed.

Possible values: 'potential', 'time', 'fixed'.

  • Fixed scan: perform a single scan (default).
  • Time scan: scans are repeated for a specific amount of time at a specific interval.
  • Potential scan: scans are repeated over a range of DC potential values. A potential scan should not be performed versus the OCP.

step_potential class-attribute instance-attribute

step_potential: float = 0.01

Potential step size in V (potential scan only).

This sets the increment to be used between begin_potential and end_potential.

versus_ocp class-attribute instance-attribute

versus_ocp: VersusOCP = Field(default_factory=VersusOCP)

Set the versus OCP settings.

from_dict classmethod

from_dict(obj: dict[str, Any]) -> BaseTechnique

Structure technique instance from dict.

Opposite of .to_dict()

Source code in src/pypalmsens/_methods/base.py
35
36
37
38
39
40
@classmethod
def from_dict(cls, obj: dict[str, Any]) -> BaseTechnique:
    """Structure technique instance from dict.

    Opposite of `.to_dict()`"""
    return cls.model_validate(obj)

from_method_id classmethod

from_method_id(id: str) -> BaseTechnique

Create new instance of appropriate technique from method ID.

Source code in src/pypalmsens/_methods/base.py
42
43
44
45
46
@classmethod
def from_method_id(cls, id: str) -> BaseTechnique:
    """Create new instance of appropriate technique from method ID."""
    new = cls._registry[id]
    return new()

to_dict

to_dict() -> dict[str, Any]

Return the technique instance as a new key/value dictionary mapping.

Source code in src/pypalmsens/_methods/base.py
31
32
33
def to_dict(self) -> dict[str, Any]:
    """Return the technique instance as a new key/value dictionary mapping."""
    return self.model_dump()