Post Go back to editing

EVAL-AD5941 Inconsistent Data and Getting Square Wave Voltammetry to Work

Category: Hardware
Product Number: EVAL-AD5941ELCZ
Software Version: SensorPal

We have been attempting to use the EVAL-AD5941 board with SensorPal to collect data using EAB sensors in PBS using SWV and evaluate its performance when compared to data collected using a Gamry potentiostat.


The setup described online ( ) is being used for the placement of JP9, 10, and 11. However the data that is collected is very different from the Gamry. I understand that SensorPal outputs the raw current/voltage data and it needs to be processed to plot the current difference, but this data is not similar to the raw Gamry data either.


Impedance has also been tested with the board set to the dummy sensor of resistance 6.8kOhms and the data is close to this value so I assume the board is functional.


When the usb cable is attached to the board but nothing is not connected to the usb cable, the data is also inconsistent even at the same current range. However, this usually occurs beyond the selected final voltage since data is collected far past the value of -100mV. I am unsure if this is an issue with the board or the SensorPal program.


The settings used for the SWV are as follows:

  • Initial Voltage: -400mV (sometimes changed to -600mV)
  • Final Voltage: -100 mV
  • Step Potential: 1 mV
  • Frequency: 300 Hz
  • Amplitude: 25 mV
  • Current Range: We are testing what best works for our application
  • Other parameters are kept at default settings


From the data collected using the Gamry we assume a current difference of less than 5uA and less than +/-3 uA for the forward and reverse current. The Gamry is also using a current range of 0.3mA when set to choose the range automatically but this value does not seem to work for the evaluation board.


This is a graph of the data taken while using an EAB sensor although I am unsure if the sensor was fully functional, partially functional, or damaged at the time of using it.

Overall, I am unsure as to whether the issue is the setup of the board jumper pins, the parameters being used, or if the board is not functional. Additionally, is there any reliable method of ensuring that SWV is working on the evaluation board and what current range should be used? The voltage exceeding the final voltage set is also an issue since this seems to be damaging the EAB sensor, making it nonfunctional.

  • Hi,

    In Sensorpal, Bias voltage (VZero)  is fixed at 1.3V.

    for below configuration:

    Measurement Parameters Settings: Square Wave Voltammetry
    Initial Potential -400 mV
    Final Potential 0 mV
    Step Potential 5 mV
    Current Range ± 3 mA
    Bidirectional 0
    Frequency 20 Hz
    Amplitude 50 mV
    Calibration Resistor 10000 Ω
    RLoad 100 Ω
    PGA Gain Select GNPGA_1
    ADC Negative Input Low power TIA negative input
    ADC Positive Input Low power TIA positive output

    Initial SW excitation voltage is set as = 1.3V -400mV = 900V

    Final SW excitation voltage is set as = 1.3V + 400mV = 1700mV (Final voltage set in Sensorpal is don't care . It is a bug in sensorpal)

    Current across Dummy B load in AD5940ELCZ board:

    Excitation voltage at CE0:

    For custom values of Vzero (mid voltage) , and different initial and final SW voltage offsets from mid, example code in Github

    (ad5940-examples/examples/AD5940_SqrWaveVoltammetry at master · analogdevicesinc/ad5940-examples · GitHub)

    have to be used (run in Keil or IAR).

  • I seem to have replicated the data using the parameters you have given so I have moved on to using the Github code. The issue is that the data in the UART program only outputs the index and current.

    Is there a way to make the code output the index, voltage, and current?

    Also what are the units for the current since that also isn't given in the UART data.

  • Hi,

    In the github code, current output is in uA


    Mentioned in AppSWVDataProcess() function:

    static int32_t AppSWVDataProcess(int32_t * const pData, uint32_t *pDataCount)
    uint32_t i, datacount;
    datacount = *pDataCount;
    float *pOut = (float *)pData;
    float temp;
    float kFactor = 1.835/1.82;
    pData[i] &= 0xffff;
    temp = 32768 - pData[i];
    pOut[i] = temp/32768*AppSWVCfg.ADCRefVolt*kFactor; /* Convert code to voltage in mV */
    pOut[i] = -temp/AppSWVCfg.RtiaValue.Magnitude*1e3f; /* Result unit is uA. */
    return 0;


    For code structure to measure square wave voltage(VCE0), you may refer to this: (+) measuring voltage across reference electrode and sensing electrode - Q&A - Precision ADCs - EngineerZone (

  • If the current range is in uA then why does the current recorded constantly exceed the current range chosen? For example in this test the current range is 30uA but the AD5941 outputs data past 100uA.

    This also happens for other current ranges tested

Reply Children