This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
I use TI28335 + ADS1262EVM (serial/power interface connected) , and try to read the values of 4 sets resistors (1k,1k, 10k,10 respectively)
the circuit:
I use DRDY pins and interrupt routine to deal with the condition that the converted data is ready
use IDAC1 = 50 uA, and switch IDAC source among AIN3, AIN5, AIN7, AIN9 after each reading in ISR.
My question is the IDAC current source switch need additional time to settle down? how long?
If I initialize ADS126x with longest DELAY time 8.8ms, the readback resistor value is correct.
but if I use shorter delay time than 8.8ms, the resistor value is not correct..
any hint??
I initialize the ads1262 with the following parameters
set_adc_START(0); ADS126xReadRegister(ID, ADS126x_NUM_REG, AdcRegData, TARGET_ADC1); //Read ALL registers WriteRegData = (AdcRegData[MODE0] & ~DELAY_MASK & ~RUNMODE) | DELAY_8800us; //MODE0 ADS126xWriteRegister(MODE0, 1, &WriteRegData, TARGET_ADC1); //Configure Delay time WriteRegData = (AdcRegData[MODE1] & ~FILTER_MASK) | FILTER_SINC4; //MODE2 ADS126xWriteRegister(MODE1, 1, &WriteRegData, TARGET_ADC1); //Configure Digital Filter WriteRegData = (AdcRegData[MODE2] & ~DR_MASK) | DR_7200_SPS; //MODE2 ADS126xWriteRegister(MODE2, 1, &WriteRegData, TARGET_ADC1); //Configure ADC1 data rate WriteRegData = MUXP_AIN3 | MUXN_AIN2; ADS126xWriteRegister(INPMUX, 1, &WriteRegData, TARGET_ADC1); //Configure INPMUX WriteRegData = MUX2_NO_CONM | MUX1_AIN3; //IDACMUX (IDAC1MUX = AIN3) ADS126xWriteRegister(IDACMUX, 1, &WriteRegData, TARGET_ADC1); //Configure ADC1 data rate WriteRegData = MAG2_OFF | MAG1_50uA; //IDACMAG (IDAC1MAG = 50 uA) ADS126xWriteRegister(IDACMAG, 1, &WriteRegData, TARGET_ADC1); //Configure ADC1 data rate g_curSetting_ADC1 = THERMISTOR_SET_1; WriteRegData = RMUXP_AIN0 | RMUXN_AIN1; //REFMUX (REFP = AIN0, REFN = AIN1) ADS126xWriteRegister(REFMUX, 1, &WriteRegData, TARGET_ADC1); //Configure ADC1 data rate ADS126xReadRegister(ID, ADS126x_NUM_REG, AdcRegData, TARGET_ADC1); //Read ALL registers Check Written Values
Interrupt routine:
set_adc_CS(0); ADS126xXferByte(RDATA1); //Send RDATA1 command for(i = 0; i < 6; ++i) ADC_Bytes[i] = ADS126xXferByte(0); set_adc_CS(1); if (ADC_Bytes[0] & ADC1_NEW) { //ADC1 Data New? ADC_Data_Only = ((long)ADC_Bytes[1] << 24) | //Data MSB ((long)ADC_Bytes[2] << 16) | ((long)ADC_Bytes[3] << 8) | ((long)ADC_Bytes[4] << 0); //Data LSB unsigned char mag = MAG1_50uA; //switch to next set of resistor ADS126xSendStopCommand(TARGET_ADC1); ADS126xWriteRegister(IDACMAG, 1, 0, TARGET_ADC1); //OFF IDAC WriteRegData = MUXP_AIN5 | MUXN_AIN4; ADS126xWriteRegister(INPMUX, 1, &WriteRegData, TARGET_ADC1); //Configure INPMUX WriteRegData_2 = MUX2_NO_CONM | MUX1_AIN5; //IDACMUX (IDAC1MUX = AIN3) ADS126xWriteRegister(IDACMUX, 1, &WriteRegData_2, TARGET_ADC1); //Configure ADC1 data rate ADS126xWriteRegister(IDACMAG, 1, &mag, TARGET_ADC1); //IDAC1 50 uA
ADS126xSendStopCommand(TARGET_ADC1); //start again after configuration
}
Hi Ivan,
Do you have any filter capacitors on the inputs and reference pins?
The IDAC current source settling time is likely going to very negligible. You're probably seeing the settling time of the external "RC" components. The following TINA simulation circuit shows the likely settling behavior:
The reference input will require the most time to settle due to the very large resistor used to generate the reference voltage. In the above simulation, I happened to see a similar settling time for the reference that matches what you're seeing (8.8 ms).
You might consider either decreasing the reference resistor value or by externally buffering the reference voltage, in order to reduce the required settling time.
Let me know if that helps!
Best Regards,
Chris
Thanks. It is really related to the RC filters.
But due to application limit, i cannot change the scale of relative resistors. (consider the temperature range of thermistor)
now, i just remove the capacitor of the input on ADS1262 EVM (100nf). after doing that, the result looks okay.
What i need to do is to make a trade-off between noise filtering and response time..
I try to adjust the value of RC filter
any advice?
Hi Ivan,
Buffering the reference input would probably have the most dramatic effect on the settling time, as this changes the RC time constant for the reference capacitor charging (the output impedance of the buffer would be much smaller than 39kOhm and so the settling would be much faster). However, the downside to this approach would be the added cost, as well as possible performance degradation from the buffer's offset, offset drift, and noise.
Alternatively, if you just want to tweak the "R" and "C" values, I would make the reference resistor as small as possible (allowing for your required input range) and the reference capacitor as large as possible (to filter out reference noise and still providing an acceptable settling time).
What is an acceptable settling time in your application and what is your targeted accuracy?
Keep in mind that that capacitor settling requires LN(2^N) time constants, where N is the number of bits. Therefore, for a capacitor to settle to a 20-bit level (i.e. the error is on the order of 1 LSB at 20-bits resolution), requires LN(2^20) = 13.8 time constants.
A couple other things to consider:
Best Regards,
Chris
What you mentioned really helps us a lot. Thanks.
But I dont really understand what you mention:
Christopher Hall said:...
Buffering the reference input would probably have the most dramatic effect on the settling time, as this changes the RC time constant for the reference capacitor charging (the output impedance of the buffer would be much smaller than 39kOhm and so the settling would be much faster). However, the downside to this approach would be the added cost, as well as possible performance degradation from the buffer's offset, offset drift, and noise.
......
......
How to buffer the reference input? Could you draw a brief circuit?
thanks
regards,
Ivan
Hi Ivan,
No problem, this is what I was thinking for buffering the input:
Notice that C2 is now buffered/separated from Rref, which previously created a large RC time constant. Adding these buffers allows C2 to charge up much faster, as shown in the graph on the right.
ASIDE:
Keep in mind that even though Rref is in parallel with C2, it still forms an RC time constant since this is the Norton equivalent circuit to the typical voltage driven circuit. I had to remind myself of this relationship when I first looked at your circuit...
Best Regards,
Chris
Christopher Hall said:....
Notice that C2 is now buffered/separated from Rref, which previously created a large RC time constant. Adding these buffers allows C2 to charge up much faster, as shown in the graph on the right.
...
add ADS1262EVM circuit (AIN0 & AIN1 for REFP & REFN)
R1 & R6 & C3 in original circuit are designed for noise filtering (low pass filter)
if I add dual-op to buffer the ref voltage, noise filtering does not work anymore?
if it does not work, I simply remove the C3..
thanks
ivan
Hi Ivan,
In order to take advantage of the buffer and decrease the settling time of the circuit, you wouldn't want to place a capacitor before the buffer, since this capacitor would continue to slow down the settling.
However, it would be okay to place a capacitor after the buffer to provide the noise filtering!
NOTE: Adding a buffer would be a trade-off in performance here...the settling time would be significantly improved, but the buffer's noise and offset would add to the ADC's noise and gain error. Therefore, I'd probably only use a buffer in this circuit if I absolutely needed the faster settling time. Otherwise, I would try the other options (mentioned above) first!
Best Regards,
Chris
Hi Chris,
One more question. Your earlier explanation.
Christopher Hall said:What is an acceptable settling time in your application and what is your targeted accuracy?
Keep in mind that that capacitor settling requires LN(2^N) time constants, where N is the number of bits. Therefore, for a capacitor to settle to a 20-bit level (i.e. the error is on the order of 1 LSB at 20-bits resolution), requires LN(2^20) = 13.8 time constants.
What is the meaning of 'time constants' ? What is the time unit? does it mean "clk cycles", or?
regards,
Ivan
HI Ivan,
The "RC time constant" is a measure of how fast an RC circuit can charge or discharge. It is just the product of the R and C values, as shown below:
RC time constant (seconds) = Resistance (Ohms) X Capacitance (Farads)
Knowing the RC time constant can help you determine the required settling time you need, for example:
If you want to achieve high resolution, you'll need to allow the capacitor sufficient time to charge.
Since 1 LSB at a resolution of 20-bits corresponds to a 0.0009537% fractional measure of your signal (100 * 1 / 2^20), you might want the reference capacitor to charge up to 99.99990463% (100%-0.0009537%) so that the voltage error due to settling is only 1 LSB at the 20-bit level. This requires LN(2^20) = 13.86 time constants!!
Best Regards,
Chris