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.

FDC2214: Excessive noise in measurements

Part Number: FDC2214
Other Parts Discussed in Thread: FDC2114

I'm using an FDC2214 to detect small angular changes in the angle of a conductive plate (somewhat like an old-fashioned variable capacitor).  I'm currently seeing 28 bits of data, but the bottom 10 or 12 bits are noise.  Given that this is ostensibly a 28-bit device I would not expect to rely on the bottom one or two bits, but surely it should be better than this - clearly I'm doing something wrong.

I've read the datasheet in detail; I'm using a highly stable 40MHz clock source and the supply is well decoupled.  What I have noticed is that the outputs to the LC circuits always go down to 0V and then bounce somewhat, regardless of the signal amplitude.  This is with an oscilloscope probe connected; obviously I can't see what's happening without it connected.  Is this normal operation?

Do you have any suggestions as to how I might improve the performance?

Here are the register settings I'm using at the moment, as you'll see I'm just running a single channel in case there's any interaction; I'm hoping to get this as stable as possible and then work from there.

I2C_0_writeRegister(FDC2114_RESET, 0x8000); // perform a device reset


// according to the datasheet (p42)
// initial value was 8239, but ffff should give best resolution
I2C_0_writeRegister(FDC2114_RCOUNT_CH0, 0xffff); // RCOUNT_CH0 Reference count calculated from timing requirements (100 SPS) and resolution requirements
I2C_0_writeRegister(FDC2114_RCOUNT_CH1, 0xffff); // RCOUNT_CH1 Reference count calculated from timing requirements (100 SPS) and resolution requirements
I2C_0_writeRegister(FDC2114_RCOUNT_CH2, 0xffff); // RCOUNT_CH2 Reference count calculated from timing requirements (100 SPS) and resolution requirements
I2C_0_writeRegister(FDC2114_RCOUNT_CH3, 0xffff); // RCOUNT_CH3 Reference count calculated from timing requirements (100 SPS) and resolution requirements

// initial value was 0x0a
I2C_0_writeRegister(FDC2114_SETTLECOUNT_CH0, 0x010A); // SETTLECOUNT_CH0 Minimum settling time for chosen sensor
I2C_0_writeRegister(FDC2114_SETTLECOUNT_CH1, 0x010A); // SETTLECOUNT_CH1 Minimum settling time for chosen sensor
I2C_0_writeRegister(FDC2114_SETTLECOUNT_CH2, 0x010A); // SETTLECOUNT_CH2 Minimum settling time for chosen sensor
I2C_0_writeRegister(FDC2114_SETTLECOUNT_CH3, 0x010A); // SETTLECOUNT_CH3 Minimum settling time for chosen sensor

I2C_0_writeRegister(FDC2114_CLOCK_DIVIDER_CH0, 0x1001); // CLOCK_DIVIDER_CH0 CH0_FIN_DIVIDER = 1, CH0_FREF_DIVIDER = 1
I2C_0_writeRegister(FDC2114_CLOCK_DIVIDER_CH1, 0x1001); // CLOCK_DIVIDER_CH1 CH1_FIN_DIVIDER = 1, CH1_FREF_DIVIDER = 1
I2C_0_writeRegister(FDC2114_CLOCK_DIVIDER_CH2, 0x1001); // CLOCK_DIVIDER_CH2 CH1_FIN_DIVIDER = 1, CH1_FREF_DIVIDER = 1
I2C_0_writeRegister(FDC2114_CLOCK_DIVIDER_CH3, 0x1001); // CLOCK_DIVIDER_CH2 CH1_FIN_DIVIDER = 1, CH1_FREF_DIVIDER = 1

I2C_0_writeRegister(FDC2114_ERROR_CONFIG, 0x0000); // ERROR_CONFIG Can be changed from default to report status and error conditions

// try one channel at a time

I2C_0_writeRegister(FDC2114_MUX_CONFIG, 0b0100001000001101); // MUX_CONFIG Enable Ch 0 , Ch 1, and Ch 2 (sequential mode), set Input deglitch bandwidth to 10MHz

// initially 0x7000 to give about 1.8v
I2C_0_writeRegister(FDC2114_DRIVE_CURRENT_CH0, 0x4000); // DRIVE_CURRENT_CH0 Sets sensor drive current on ch 0
I2C_0_writeRegister(FDC2114_DRIVE_CURRENT_CH1, 0x4000); // DRIVE_CURRENT_CH1 Sets sensor drive current on ch 1
I2C_0_writeRegister(FDC2114_DRIVE_CURRENT_CH2, 0x4000); // DRIVE_CURRENT_CH2 Sets sensor drive current on ch 2
I2C_0_writeRegister(FDC2114_DRIVE_CURRENT_CH3, 0x4000); // DRIVE_CURRENT_CH3 Sets sensor drive current on ch 3

I2C_0_writeRegister(FDC2114_CONFIG, 0b1001011000000001); // CONFIG enable full current drive during sensor activation, select external clock source, 

Thanks,

  Frog