Category: Hardware
Product Number: AD9106
Our ultimate goal is to be able to generate 4 sine wave voltages with independently variable phase, amplitude, and frequency. We are able to successfully control the AD9106 and have confirmed that we can read/write to registers, start/stop/update patterns and have observed example waveforms on an oscilloscope. We recently attempted to program the AD9106 to output identical sine waves on each of the DACs by uploading the data values in the myVals array to the corresponding addresses in regAdd provided below. DACs 1,3, and 4 appear to be identical, however, DAC2 is outputting about 10x less voltage and has a noticeable phase shift as seen in the attached picture. We replaced the connections to DAC2 and went over the register values, but we cannot find any place where DAC2 differs from the other DACs. The relevant registers for DAC2 we found are
DAC2AGAIN 0x06
DAC2RSET 0x0B
DAC2DOF 0x24
WAV2_1CONFIG 0x27
DAC2_1PATx 0x2B
DAC2_CST 0x30
DAC2_DGAIN 0x34
SAW2_1CONFIG 0x37
DDS2_PW 0x42
DDSx_CONFIG 0x45
START/STOP DDS CONFIG (0x58 - 0x5B)
What could be causing the output problems on DAC2 and how could we fix them?
Moreover, we want to be able to control the parameters of the waves independently of each other. For amplitude and phase, we accomplished this using the DACX_DGAIN and DDSx_PHASE registers. Since the DDS is a shared resource, we figured that the frequency of the sine waves can't be modified independently. However, we noticed that changing the values of the DDS tuning word in the DDSTW_MSB and DDSTW_LSB registers also affects the amplitude of the waves. The amplitudes for the waves are seen to vary proportionally with the tuning word. We would like to be able to change frequency without affecting the other parameters of the sine waves. Is this possible on the AD9106?
uint16_t myVals[66] = {
0x0000, 0x0e00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x1f00, 0x1f00, 0x1f00, 0x1f00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x3232, 0x3232, 0x0111, 0x8fff, 0x0101, 0x0101,
0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x4000, 0x4000,
0x4000, 0x0000, 0x0000, 0x0050, 0x7500, 0x0000, 0x0000, 0x0000, 0x0000,
0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000,
0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000,
0x0001, 0x0001, 0x0001};
uint16_t regAdd[66] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x001f, 0x0020, 0x0022,
0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b,
0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034,
0x0035, 0x0036, 0x0037, 0x003e, 0x003f, 0x0040, 0x0041, 0x0042, 0x0043,
0x0044, 0x0045, 0x0047, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055,
0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e,
0x005f, 0x001e, 0x001d};
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x001f, 0x0020, 0x0022,
0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b,
0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034,
0x0035, 0x0036, 0x0037, 0x003e, 0x003f, 0x0040, 0x0041, 0x0042, 0x0043,
0x0044, 0x0045, 0x0047, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055,
0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e,
0x005f, 0x001e, 0x001d};
