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: Raw data returned to 0 after object move too close to sensor

Part Number: FDC2214
Other Parts Discussed in Thread: FDC2114,

Hello TI, 

My name is David. 
i am now having an issue with raw data measured from FDC2214. I configured my system as below: 

//Set the SetFDC2X14 register
        //Reference count setting for channel i
        SetFDC2X14(RCOUNT_CH0,0xFF,0xFF);
        SetFDC2X14(RCOUNT_CH1,0xFF,0xFF);
        SetFDC2X14(RCOUNT_CH2,0xFF,0xFF);
      
        //0x0064 = 100 cycles before measurement taken
        SetFDC2X14(SETTLECOUNT_CH0,0x00,0x64); //0x19
        SetFDC2X14(SETTLECOUNT_CH1,0x00,0x64);
        SetFDC2X14(SETTLECOUNT_CH2,0x00,0x64);
       
        //Clock divider = 8193
        SetFDC2X14(CLOCK_DIVIDERS_C_CH0,0x20,0x01);
        SetFDC2X14(CLOCK_DIVIDERS_C_CH1,0x20,0x01);        
        SetFDC2X14(CLOCK_DIVIDERS_C_CH2,0x20,0x01);        
        
        SetFDC2X14(ERROR_CONFIG,0x00,0x00);
       
        SetFDC2X14(MUX_CONFIG,0x80,0x0c);


        SetFDC2X14(DRIVE_CURRENT_CH0,0x80,0x00);
        SetFDC2X14(DRIVE_CURRENT_CH1,0x80,0x00);
        SetFDC2X14(DRIVE_CURRENT_CH2,0x80,0x00);
       
        SetFDC2X14(OFFSET_CH0,0x0C,0x00);       
        SetFDC2X14(CONFIG,0x14,0x01);

Result: my raw data usually stable, after my hand move closer to the sensor, the sensor can detect max distance about 40-50cm. However, if i move my hand close up to 10-20cm above the sensor,

the sensor returned 0 value in raw data.

Additional, I have tested with EVM circuit, it can detect non-conductive material as well, but in my system, I couldn't measure non-conductive object when it moves closer to the sensor.

In my system, I configured a single-end configuration. LC tank is followed EVM circuit as 18uH and 33pF

Please give me some advice to fix my problem as well as increase detected distance. 

Best regards, 

David

Here is my sensor signal: 

  • Your drive current might be too low. You can use the techniques described in the following app note for the FDC2214 to set the appropriate IDRIVE:

    www.ti.com/.../getliterature.tsp

    Also take a look at this app note about ground shift. The grounding in your system can impact the sensitivity quite a bit:

    www.ti.com/.../snoa952.pdf

    Additionally, are you using a similar sensor design as the EVM? In general, a larger sensor area will give you more sensitivity.
  • Hi Clancy,
    I have modified IDRIVE from min (0x00) to max(0xF800) to review what happen. However, the issue is still remained unchange.
    The setting for IDRIVE that you gave above, it uses for LDCxxxx, not for FDCxxxx. So i think it is hard to apply to my FDC board.
    I have sold the ground shifting phenomenom of capacitive sensing by applying a large GND pad below the sensor and still remain detected distance.
    your recommendation is corrected,a larger sensor area will give me more sensitivity. My sensor is optimized one, which is small as EVM circuit but further distance detected.
    Do you think any other posibility to improve my system?
    Thank you so much Clancy.
    Best regards,
    David
  • Can you share your sensor signal when the issue occurs? (Your hand moved close and the signal output returning to 0)

    Additionally, this device has gain and offset bits which you can adjust to find the optimum dynamic range.

    Finally, it might be useful to order an FDC2114 EVM to repeat this same test. The FDC2114 has 28 bits of output resolution and does not have the offset/gain feature, so you do not have to worry about your signal going outside the dynamic range of the device. The FDC2214/FDC2114 are quite similar, so we see many people test with the FDC2114 first and then move to the FDC2214.
  • Hi Clancy, 

    Here is the sensor signal with video, and the data is exactly the same to the above figure.

    actually, I already bought the FDC2214EVM to verify and ref to my design. 

    With this phenomenon, could you please give me some comments? 

    Thank you so much, 

  • Thank you for including the video; however, I was suggesting for you to look at the INx signals on an oscilloscope while you do this test.

    The suggestions for the INx signal amplitude when choosing the IDRIVE setting are the same for the FDC2114 as the LDC family.

    Finally, is the sensor a fully filled circle? Or do you have a cutout in the middle? (It is hard to tell from the video)
  • Hi Clancy,

    I am so sorry for misunderstood your recommends,

    i have check the  sensor signal, fir IN0A, INOB signal are fully filled circle, and it doesn't have the cutout in the middle.

    Here is the two cases, IDRIVE (0x7A)

    and  IDRIVE (0xF8)

    Here is the video for sensor signal change while the object is approaching to sensor.

    Finally, what should i modify to get a haft-filled circle? 

    Thank you so much, 

    Best regards, 

  • It is better to have a fully filled sensor, so no modification is necessary there.

    I still can't see what is happening on the oscilloscope when the issue occurs (data returning to 0 after your hand moves close). In that specific case, can you capture the signal on the oscilloscope? Single shot mode might help you get a clean image.
  • Hi Clancy 

    the signal video includes all both normal state and returned 0 state. It is not returned to 0 at the output signal,  but the ADC signal is returned to 0. 

    The data i showed above. it is RAW data. 

    This is the sequence i readout data

    unsigned int ReadFDC2X14_single(u8 firstAddress)
    {
    unsigned int temp;
    u8 result[2];
    IIC_Start();

    IIC_Send_Byte(FDC2X14_W);
    IIC_Wait_Ack();
    ADS_delay();
    IIC_Send_Byte(firstAddress);
    IIC_Wait_Ack();
    ADS_delay();
    IIC_Stop();
    ADS_delay();

    IIC_Start();
    IIC_Send_Byte(FDC2X14_R);
    IIC_Wait_Ack();
    ADS_delay();
    result[0]=IIC_Read_Byte(0);
    IIC_Ack();
    ADS_delay();
    result[1]=(IIC_Read_Byte(0)); 
    IIC_Ack();
    IIC_Stop();
    ADS_delay();
    temp=(result[1]<<4)+result[0];
    return(temp);

    This data is directly sent to computer using CAN by Labivew

    ChValue[0] = ReadFDC2X14_single(DATA_CH0);
     tmp = (uint8_t)(ChValue[0]);
     SendCAN(0x03,tmp,0,0,0,0,0,0,0);

  • Have you tried using the Sensing Solutions GUI to read the data while you perform this test? That would rule out that your code is the issue.