ADUCM355 Sequencer Configuration - Cyclic Voltammetry Example


I am now using the new ADUCM355 SDK and referencing the "M355_ECSns_CycloVoltammetry" example project. This version of the example (compared to the previous SDK) takes advantage of the sequencer. I have a question regarding this.

Here is the waveform I captured on CE0:

The measured peak-to-peak voltage is 2.09V (Not shown)

Here is what I believe the configuration of this waveform is as identified in ADS5940Main.c:

  /* Configure ramp signal parameters */
  pRampCfg->RampStartVolt = -500.0f;          /* -500 mV */
  pRampCfg->RampPeakVolt = +500.0f;           /* +500mV */
  pRampCfg->VzeroStart = 1300.0f;              /* 1.3V */
  pRampCfg->VzeroPeak = 1300.0f;               /* 1.3V */
  pRampCfg->StepNumber = 400;                  /* Total steps. Equals to ADC sample number */
  pRampCfg->RampDuration = 10*1000;            /* Total duration of ramp signal. unit is ms. */
  pRampCfg->SampleDelay = 2.0f;                /* Time between update DAC and ADC sample. Unit is ms. */

The time duration of 10 seconds looks correct, but the peak-to-peak voltage is confusing me. According to the notes in Ramp.C, RampPeakVolt and RampStartVolt are defined as VBIAS - VZERO.

Question: How can I update VZERO such that the waveform matches RampStartVolt, RampPeakVolt, etc? ie, where the peak to peak is 1V and goes from -500 mV to 500 mV as in the above code snippet?

Forgive me, I am a software guy trying to learn this hardware.


[edited by: droberson_new at 5:30 AM (GMT -4) on 9 Sep 2020]
  • 0
    •  Analog Employees 
    on Sep 9, 2020 6:57 AM 1 month ago

    Hi Derek,

    What have you connected between CE, RE0 and SE0? The +-500mV signal is between RE0 and SE0. If you have a resistor connected between CE0 and RE0 there will be an extra voltage drop across it. Hence why CE0 is showing 2x the voltage.

  • Hello,

    I have a 1k Ohm resistor "star" connected to CE0, RE0, SE0 as suggested in the users guide. Hmm, I guess that makes sense. I will probe RE0 and see if I gain a better understanding.


  • Hello again,

    Question 1: You are correct, I see the correct waveform between RE0 and SE0 although it's about 100 mV higher and lower than expected (+/- 600 mV vs +/- 500 mV). Why is this?

    Note that the scope probe grounds used to measure RE0 and SE0 were connected to board ground. The math() function was used to measure RE0 - SE0.

    Question 2: How would I use the sequencer to generate the following waveforms across RE0 and SE0? Could you potentially provide an example or sequencer inputs?

    Linear Sweep Voltammetry:

    -1V to 1V, 5mV steps, 100 mV/s

    Square Wave Voltammetry:

    -1V to 1V, 5mV steps, 5 hz, 40 mV peak-to-peak of a single square

    Note that the above waveforms are not drawn to scale.


  • 0
    •  Analog Employees 
    on Sep 11, 2020 7:33 AM 1 month ago in reply to droberson

    Question 1: What is the value of Rload there may be a voltage drop between the input to the LPTIA and SE0 pin.

    Question 2;  Use example project M355_ECSns_CycloVoltammetry for Linear sweep voltammetry measurement. Add the line pRampCfg->bRampOneDir = bTRUE; in th AD5940RampStructInit() function to only measure the sweep in one direction. Modify the other parameters in the function to change the characteristics of the ramp signal.

    Use M355_SqrWaveVoltammetry project for square wave voltammetry measurement. Refer to AN-1563 for some documentation on the measurement.  

  • Sorry for the delayed response, I was out of the office the past few days.

    According to the CyclicVoltammetry example, RLOAD is 0 Ohm:

    /* Configure Current measurement channel */
    pRampCfg->LPTIARtiaSel = LPTIARTIA_200R; /* Maximum current decides RTIA value */

    After re-measuring, I think I have some noise on the scope probe that is adding a +/- 100 mV offset. Here is my output which matches the sequencer configuration. (No issue from what I can see since VZERO is 1.3V):

    I evaluated the new SDK example "M355_SqrWaveVoltammetry" and it doesn't match what I would expect. This is my captured result:

    Here is the expected output as configured in AD5940Main.c:

    	/* Step 2:Configure square wave signal parameters */
      pRampCfg->RampStartVolt = -500.0f;           /* -0.5V */
      pRampCfg->RampPeakVolt = +500.0f;            /* +0.5V */
      pRampCfg->VzeroStart = 1300.0f;               /* 1.3V */
      pRampCfg->VzeroPeak = 1300.0f;                /* 1.3V */
      pRampCfg->Frequency = 25;                     /* Frequency of square wave in Hz */
      pRampCfg->SqrWvAmplitude = 50;                /* Amplitude of square wave in mV */
      pRampCfg->SqrWvRampIncrement = 5;             /* Increment in mV*/
      pRampCfg->SampleDelay = 10.0f;                /* 10ms. Time delay between DAC update and ADC sample. Unit is ms. */
      pRampCfg->LPTIARtiaSel = LPTIARTIA_8K;      /* Maximum current decides RTIA value */

    Based on the above, I would expect RE0 - SE0 to go from -500 mV to 500 mV. Instead, I measured this to be -0.25V to 0.2V. Even RE0 doesn't match the expected range of VZERO +/- 500 mV. I would expect RE0 to measure 0.8V to 1.8V just like the Cyclic Voltammetry example.

    Question 1: Why do the peak-to-peak voltages not match the code in the SqrWaveVoltammetry example?

    Question 2: Towards the end of the SqrWaveVoltammetry measured waveform on RE0, it is not linear and jumps up unexpectedly. Why is this? I don't see this reflected in RE0 - SE0.