I am using ADC3663IRSBT to simultaneously acquire two channels at 50MHz. From DFT result, I noticed that 20% of time, the phase difference changes about 5 degrees for a sinusoidal wave of 2MHz. To figure out the problem, I set the ADC into ramping up mode with step of 1 so that I can know the exact number I would get. After many tests, I found the reason is related to the unstable behavior of ADC after power down and then power up. The following is my test results:
“ADC power down”: using PDN/SNC pin or SPI command to power down ADC so that it won’t consume power
“ADC power up”: using PDN/SNC pin or SPI command to power up ADC for acquisition
“ADC Reset”: using SPI command to reset ADC to default register states and then initialize registers as 16-bit 2 wire ramping up mode with step of 1
Test 1: power up the board, then “ADC power up” , then “ADC Reset”, never “ADC power down” or “ADC Reset” again; in this case, there is no error and ramping ADC number received correct after hundreds starting acquisition; each acquisition will start and then stop FPGA synchronization/acquire interface; this proves that issues are not from FPGA
Test 2: power up the board, then “ADC power up” , then “ADC Reset”, then for each acquisition, "ADC power up" and “ADC RESET” at the beginning of each acquisition, and “ADC power down” at the end of each acquisition; among hundreds of acquisitions, the error is about 40% (when error happens, all data are not correct in that acquisition); if I only do "ADC power up " and “ADC RESET” , not do “ADC power down”, the error rate is about 1%, but error still exists; if I only do “ADC power up” and “ADC power up”, once error starts, it will never recover from error even after many “power down” and “power up”.
From above test, it seems that after power down, the ADC can not work properly after power up and even with "ADC Reset", or maybe something related how I do “ADC Reset”? the following is my reset code. Another possibility is that I did not have any connection to RESET pin of ADC since it has internal pull down resistor, can that be a issue? or do I have to toggle the hardware "RESET" pin so that the ADC can work properly?
//reset ADC
AD_write_reg(0, 0x01);
vTaskDelay(100);
//2-wire configuration --------------------
AD_write_reg(0x07, 0x4B); //16-bit, 2-wire
vTaskDelay(2);
AD_write_reg(0x13, 0x01);
vTaskDelay(2);
AD_write_reg(0x13, 0x00);
vTaskDelay(2);
AD_write_reg(0x0E, 0x08); //select internal REF with SPI
vTaskDelay(2);
AD_write_reg(0x19, 0x10); //Config FCLK frequency 2-wire decimation bypass, D7:0; D4:1; D0:0
vTaskDelay(2);
AD_write_reg(0x1B, 0x88); //Config FCLK frequency bypass decimation, 16-bit, D7:1; D5-3:001
vTaskDelay(2);
AD_write_reg(0x8F, 0x02); //ch0 change output format to be offset binary
vTaskDelay(2);
AD_write_reg(0x92, 0x02); //ch1 change output format to be offset binary
vTaskDelay(10);
I have been struggling to figure out what is the issue for couple of days. Help is appropriated.