

The FDC1004 is a high-precision capacitance-to-digital converter (CDC) manufactured by Protocentral. It is designed to measure capacitance with exceptional accuracy and resolution, making it ideal for a wide range of sensing applications. The FDC1004 supports up to four measurement channels and features an integrated shield driver to minimize interference and noise, ensuring reliable performance in challenging environments.








The FDC1004 is a versatile component with the following key technical details:
| Parameter | Value |
|---|---|
| Supply Voltage (VDD) | 3.0V to 3.6V |
| Operating Current | 750 µA (typical) |
| Measurement Channels | 4 |
| Capacitance Measurement | ±15 pF (with up to 100 pF offset) |
| Resolution | 16 bits |
| Interface | I²C |
| Operating Temperature Range | -40°C to +85°C |
The FDC1004 is typically available in a 10-pin package. Below is the pinout and description:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | VDD | Power supply input (3.0V to 3.6V). |
| 2 | GND | Ground. |
| 3 | SDA | I²C data line. |
| 4 | SCL | I²C clock line. |
| 5 | CAP1 | Input for capacitance measurement channel 1. |
| 6 | CAP2 | Input for capacitance measurement channel 2. |
| 7 | CAP3 | Input for capacitance measurement channel 3. |
| 8 | CAP4 | Input for capacitance measurement channel 4. |
| 9 | SHLD1 | Shield driver output for CAP1 and CAP2. |
| 10 | SHLD2 | Shield driver output for CAP3 and CAP4. |
The FDC1004 is straightforward to use in a circuit, but proper configuration and design considerations are essential for optimal performance.
0x50. Ensure no address conflicts if multiple devices are on the same bus.Below is an example of how to interface the FDC1004 with an Arduino UNO to measure capacitance on channel 1:
#include <Wire.h>
// FDC1004 I2C address
#define FDC1004_ADDRESS 0x50
// Registers for FDC1004
#define FDC1004_MEAS1_MSB 0x00 // Measurement 1 MSB register
#define FDC1004_MEAS1_LSB 0x01 // Measurement 1 LSB register
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Configure FDC1004 (example: set measurement mode for channel 1)
Wire.beginTransmission(FDC1004_ADDRESS);
Wire.write(0x08); // Configuration register for channel 1
Wire.write(0x10); // Enable measurement on channel 1
Wire.endTransmission();
}
void loop() {
uint16_t capacitanceMSB, capacitanceLSB;
float capacitance;
// Request measurement data from FDC1004
Wire.beginTransmission(FDC1004_ADDRESS);
Wire.write(FDC1004_MEAS1_MSB); // Point to MSB register
Wire.endTransmission();
Wire.requestFrom(FDC1004_ADDRESS, 2); // Request 2 bytes (MSB + LSB)
if (Wire.available() == 2) {
capacitanceMSB = Wire.read(); // Read MSB
capacitanceLSB = Wire.read(); // Read LSB
capacitance = ((capacitanceMSB << 8) | capacitanceLSB) * 0.000244;
// Convert to pF (example scaling factor)
Serial.print("Capacitance: ");
Serial.print(capacitance);
Serial.println(" pF");
}
delay(1000); // Wait 1 second before next measurement
}
0.000244) is an example and may need adjustment based on your configuration.No I²C Communication:
0x50).Inaccurate Capacitance Measurements:
Device Not Responding:
Q: Can the FDC1004 measure negative capacitance?
A: No, the FDC1004 measures capacitance in the range of ±15 pF with an offset of up to 100 pF.
Q: What is the maximum I²C clock speed supported?
A: The FDC1004 supports I²C clock speeds up to 400 kHz (Fast Mode).
Q: Can I use all four channels simultaneously?
A: Yes, the FDC1004 can measure capacitance on up to four channels, but measurements are taken sequentially.
Q: How do I reduce noise in my measurements?
A: Use the integrated shield driver (SHLDx pins) and ensure proper grounding and shielding in your circuit design.