ADuCM355 Squarewave Voltammetry RCAL selection


We are testing the squarewave voltammetry project for ADuCM355 from the GitHub repo ( using a custom PCB design we have. The PCB follows the reference design from the datasheet and evaluation boards. We have two test setups with different RCAL values: one board has a 200ohm RCAL and another with 100KOhm.

Since the maximum measured current from the electrochemical sensor will be in the range of 50-100uA ,we have used an external test resistor of 5K between the WE & RE (CE shorted with RE) in both boards to emulate the scenario. The RTIA value was chosen as 6K and the Vramp is from 0-500mV. Rest of the parameters for the SWV used in the RampStructInit() function is as below:

    /* Step1: configure general parmaters */
    pRampCfg->SeqStartAddr = 0x10;                /* leave 16 commands for LFOSC calibration.  */
    pRampCfg->MaxSeqLen = 1024-0x10;              /* 4kB/4 = 1024  */
    pRampCfg->RcalVal = 200.0;                  /* 200 Ohm RCAL on EVAL-ADuCM355QSPZ */
    pRampCfg->ADCRefVolt = 1820.0f;               /* The real ADC reference voltage. Measure it from capacitor C12 with DMM. */
    pRampCfg->FifoThresh = 480;                   /* Maximum value is 2kB/4-1 = 512-1. Set it to higher value to save power. */
    pRampCfg->SysClkFreq = 16000000.0f;           /* System clock is 16MHz by default */
    pRampCfg->LFOSCClkFreq = LFOSCFreq;           /* LFOSC frequency */

          /* Step 2:Configure square wave signal parameters */
    pRampCfg->RampStartVolt =0.0f;                /* +0.0V */
    pRampCfg->RampPeakVolt = +500.0f;             /* +0.5V */
    pRampCfg->VzeroStart = 1300.0f;               /* 1.3V - from 1-1.3 its operating as ecpectedd, below that saturates*/
    pRampCfg->VzeroPeak = 1300.0f;                /* 1.3V - This values have some influence since on test at high v its saturating*/
    pRampCfg->Frequency = 25;                     /* Frequency of square wave in Hz */
    pRampCfg->SqrWvAmplitude = 50;                /* Amplitude of square wave in mV */
    pRampCfg->SqrWvRampIncrement = 5;             /* Increment in mV: StepNumber = 2* ((RampPeak- RampStart)/RampIncrement)*/
    pRampCfg->SampleDelay = 10.0f;                /* 10ms. Time delay between DAC update and ADC sample. Unit is ms. Freq/4 (for safety instead of F/2*/
    pRampCfg->LPTIARtiaSel = LPTIARTIA_6K;      /* Maximum current decides RTIA value */

The issue that we are facing is that, the two boards are giving entirely different reading for the same setup(only RCAL different). Not only the measured current is different but also the noise level for the 200Ohm RCAL PCB is very high. Only 100K RCAL is giving more realistic value. See image below. We saw the comment in the source code that the RCAL should be similar to the RTIA values for accuracy. But didn't completely understand how the 100K RCAL is better than 200Ohm in this scenario where I am using 6K RTIA.  

SWV RCAL 100K,200

Could you please explain why this is happening and let us know the effects of RCAL for SWV? What is your recommendation for RCAL value in this case.

Best Regards,


  • 0
    •  Analog Employees 
    on Jan 18, 2021 6:15 PM 1 month ago


      Calibrate ADC/PGA firstly to get accurate current. (Voltage/Rtia = Current).

    As quoted in the HRM,

    Select the TIA gain resistor that maximizes the ADC input voltage range for the selected PGA gain setting. For example, if the PGA gain setting is 1, select a TIA gain resistor to maximize the ±900 mV range. To calculate the required gain resistor, use the following equation:

    IMAX = 0.9/RTIA 

    where: IMAX is the expected full-scale input current. RTIA is the TIA gain resistor selected by LPTIACONx, Bits[9:5].

    May I know how you have chosen RTIA as 6K.

    RCAL value should not affect the measurement.

  • Thanks for the response Akila, but we are aware of most of the information above.

    - Since we are using 5K test resistor with Vpeak as 500mV, the Imax will be 100uA.

    - The PGA setting was left unchanged, ie, at 1.5, so the ADC range will be same as 0.9V. But to be on the same side I am choosing a value 0.75V as the ADC max reading.

    - So RTIA can be calculated as, RTIA = 0.75/Imax = 0.75V/100uA = 7.5KOhm

    - The next value below it is 6K, that why RTIA was chosen as 6K.

    However, my question still stands. As you mentioned we also didn't expect RCAL effecting the measurements, but as you can see from the attached image measurement are way off and noisy for 200Ohm while 100K looks better. 

    Best Regards,


    PS: The attached image is for 100K test resistor (within the test range), but we also tried 5K test resistor which gave the same result.   

  • 0
    •  Analog Employees 
    on Jan 18, 2021 8:06 PM 1 month ago in reply to STP

    Hi Sujith,

                 Vpeak = 500mV, When RCAL =200Ohms, Imax becomes 500mV/200Ohms = 2.5mA, which is way higher then expected Imax(i.e., 100uA). 

       Also kindly note that while choosing nearest available RTIA value, choose the nearest value higher than calculated value.

  • Hi Akila,

    Please correct me if my understanding is wrong, from the information provided in App note AN-1563 page 9, what I understood was Imax = V/R. Where V is the Vpeak in our case 500mV and R as the sensor resistance which is replaced with the Rtest resistance in this case so 5K. But in your comment you are using RCAL for this measurement! I didnt understand this part.

    Also in calculation mentioned in the same page its mentioned that "The closest internal resistor value to 675 Ω is 200 Ω in the AD5940 (if the next biggest resistor value of 1 kΩ is selected, the ADC outranges). Therefore, the internal 200 Ω RTIA is selected.". This is the reason I chose a smaller value.

    Best Regards,


  • 0
    •  Analog Employees 
    on Jan 18, 2021 8:40 PM 1 month ago in reply to STP

    Hi Sujith,

    The impedance measurement technique is a ratiometric measurement where an impedance measurement is completed on a known, fixed external RCAL separately to the measurement of the impedance of the sensor.

      That is, for the same circuit, current across RCAL and current across sensor are found.

              I(RCAL)*RCAL = I(sensor)*Z(sensor)    //ignoring internal Rload2

           This way, Z(sensor) is calculated.

    So, whether it is I(RCAL) or I(sensor), the current is passing through the same circuit. Hence Imax is found, taking both into account.

    BTW, note that while choosing nearest available RTIA value, choose the nearest value SMALLER than calculated value, as you said (I had typed wrong earlier).