Implementing RC Capacitive Touch on ESP32-C3: Hardware Safety and Logic Verification

Summary

The implementation of RC capacitive touch on ESP32-C3 requires careful consideration of hardware safety and logic verification to prevent damage to the MCU and ensure accurate touch detection. Key takeaways include the importance of electrostatic discharge (ESD) protection, resistor selection, and timing precision.

Root Cause

The root cause of potential issues with this implementation includes:

  • Lack of TVS diodes for ESD protection
  • Uncertainty about the suitability of the 10 MΩ resistor for protection and sensitivity
  • Potential timing precision issues with the use of micros()

Why This Happens in Real Systems

This happens in real systems due to:

  • Insufficient protection against ESD, which can damage the MCU
  • Inadequate resistor selection, which can affect sensitivity and accuracy
  • Inaccurate timing, which can lead to false or missed touch detections

Real-World Impact

The real-world impact of these issues includes:

  • MCU damage from ESD, requiring costly replacement or repair
  • Inaccurate touch detection, leading to poor user experience and potential safety issues
  • Increased development time and costs due to debugging and troubleshooting

Example or Code

#define SEND_PIN 1
#define RECEIVE_PIN 2

uint32_t readTouch() {
  // Discharge
  pinMode(RECEIVE_PIN, OUTPUT);
  digitalWrite(SEND_PIN, LOW);
  digitalWrite(RECEIVE_PIN, LOW);
  delayMicroseconds(10);
  pinMode(RECEIVE_PIN, INPUT);
  uint32_t startTime = micros();
  // Charge
  digitalWrite(SEND_PIN, HIGH);
  // Wait for touch
  while (digitalRead(RECEIVE_PIN) == LOW) {
    if (micros() - startTime > 3000) break; // Safety timeout
  }
  return micros() - startTime;
}

How Senior Engineers Fix It

Senior engineers fix these issues by:

  • Adding TVS diodes for ESD protection
  • Selecting a suitable resistor value based on the electrode size and desired sensitivity
  • Using a precise timing method, such as a hardware timer or a calibrated software timer
  • Implementing software debouncing and filtering to improve accuracy and reliability

Why Juniors Miss It

Juniors may miss these issues due to:

  • Lack of experience with ESD protection and resistor selection
  • Insufficient understanding of timing precision and its impact on touch detection
  • Overreliance on software solutions, neglecting the importance of hardware safety and protection
  • Inadequate testing and debugging, leading to overlooked issues and potential problems in the field