Learning   Examples | Foundations | Hacking | Links

Medidas de Capacidad y constantes de tiempo RC

Recordatorio: Una resistencia cargará a un condensador en una Constante de tiempo ('TC') en segundos donde:

  • TC = R * C

  • TC = Constante de Tiempo en segundos
  • R = Resistencia en ohmios
  • C = Capacidad en faradios (1 microfariadio [ufd] = .0000001 faradios = 10^-6 faradios )

En una Constante de tiempo se carga al 63.2% del voltaje.

Ejemplo; 1 Megaohmio * 1 microfaradio = 1 segundo
Ejemplo; 10k ohmios * 100 microfaradios = 1 segundo

Configuración del experimento

Este sketch muestra porque los pines del Arduino pueden trabajar en dos estados, los cuales son eléctricamente muy diferentes.

  • Estado de entrada (configurar con pinMode(pin, INPUT);)
    • Alta impedancia (resistencia) - Utiliza muy poca demanda de corriente en los circuitos de muestreo.
    • Buena para leer sensores pero no para iluminar LED's

  • Estado de salida (configurar con pinMode(pin, OUTPUT);)
    • Baja Impedancia - Puede proporcionar 40mA (voltaje positivo), o en modo sink (voltaje negativo)
    • Buena para iluminar LED's, alimentar otros circuitos - inútil para leer sensores.

Además los pines pueden estar a nivel ALTO (+5 volts), para cargar condensadores; o a nivel BAJO (tierra) para descargar condensadores.

Algoritmo para medir capacidad con un sketch

  • Configurar el pin de descarga como INPUT (así no podrá descargarse el condensador)
  • Guardar el tiempo de inicio con millis()
  • Configurar el pin A como OUTPUT y ponlo como HIGH
  • Chequear el voltaje repetidamente en un bucle hasta alcanzar el 63.2% total del voltaje.
  • Cuando el condensador esté cargado, restar el tiempo actual del tiempo de inicio para encontrar cuanto tiempo ha tardado en cargarse.
  • Dividir el tiempo en segundos por la Resistencia de carga en ohmios para encontrar la capacidad.
  • Reportar este valor con serial.print
  • Descargar el condensador. Para hacer esto:
    • Configurar el pin a INPUT
    • Configurar el pin de descarga a OUTPUT y configurarlo en LOW
    • Leer el voltaje hasta asegurarse que el condensador esté totalmente descargado.
  • Finalizar el bucle y vuelta a empezar.

Arduino Sketch

/*  RCTiming_capacitance_meter
 *   Paul Badger 2008
 *  Demostración del uso de Constantes de tiempo RC para la medida de valores de capacidades 
 *
 * Teoría Un condensador se cargará, a través de un resistor, en una constante de tiempo, definida como T 
 * en segundos donde
 *    TC = R * C
 * 
 *    TC = Periodo de la constante de tiempo en segundos
 *    R = resistencia en ohmios
 *    C = capacidad en faradios (1 microfariadio [ufd] = .0000001 faradios = 10^-6 faradios) 
 *
 *    En una Constante de tiempo se carga al 63.2% del voltaje.
 *
 *  Configuración Hardware:
 *  El condensador a medir entre el punto común y tierra (La parte positiva del condensador electrólítico al 
 * común)
 *  Resistencia a medir entre el pin de carga y el punto común. 
 *  220 ohms de resistencia entre el pin de descarga y el punto común
 *  Cable entre punto común y el pin analógico (A/D input)
 */

#define analogPin      0          // pin analogico para realizar la medida del voltaje en la capacidad
#define chargePin      13         // pin de carga del condensador - conectado al final de la resistencia cargada
#define dischargePin   11         // pin para descargar el condensador
#define resistorValue  10000.0F   // modifica este valor al valor de resistencia que estés utilizando
                                  // F Formatea para comunicar al compilador el valor de una coma flotante

unsigned long startTime;
unsigned long elapsedTime;
float microFarads;                // Variable de coma flotante para asegurar la precisión, realiza cálculos
float nanoFarads;

void setup(){
  pinMode(chargePin, OUTPUT);     // configura chargePin a salida
  digitalWrite(chargePin, LOW);  

  Serial.begin(9600);             // inicializa la transmisión serie para debugging
}

void loop(){
  digitalWrite(chargePin, HIGH);  // configura chargePin a ALTO y carga el condensador
  startTime = millis();

  while(analogRead(analogPin) < 648){       // 647 es el 63.2% de 1023, el cual se corresponde con el voltaje
                                            // de fondo de escala 
  }

  elapsedTime= millis() - startTime;
 // convierte milisegundos a segundos ( 10^-3 ) y Faradios a microFaradios ( 10^6 ),  net 10^3 (1000)  
  microFarads = ((float)elapsedTime / resistorValue) * 1000;   
  Serial.print(elapsedTime);       // imprime el valor por el puerto serie
  Serial.print(" mS    ");         // imprime las unidades y añade enter


  if (microFarads > 1){
    Serial.print((long)microFarads);       // imprime el valor por el puerto serie
    Serial.println(" microFarads");        // imprime las unidades y añade enter
  }
  else
  {
    // si el valor es más pequeño que un microfaradio, convertimos a nanoFaradios  (10^-9 Faradios). 
    // Esto es un parche porque  because Serial.print no imprime floats

    nanoFarads = microFarads * 1000.0;      // multiplica por 1000 para convertir a nanoFaradios (10^-9 Farads)
    Serial.print((long)nanoFarads);         // imprime el valor por el puerto serie
    Serial.println(" nanoFarads");          // imprime las unidades y añade enter
  }

  /* Descarga del condensador  */
  digitalWrite(chargePin, LOW);             // configura el pin de carga a BAJO 
  pinMode(dischargePin, OUTPUT);            // configura el pin de descarga como SALIDA 
  digitalWrite(dischargePin, LOW);          // configura el pin de descarga como BAJO
  while(analogRead(analogPin) > 0){         // espera hasta que esté totalmente descargado
  }

  pinMode(dischargePin, INPUT);            // configura el pin de descarga de nuevo como ENTRADA
} 

Más cosas para intentar

  • Sustituir por una resistencia más grande si el tiempo de cargar es demasiado corto o por resistencias más pequeñas si el tiempo es muy largo.
  • Medidas de capacidades serie y paralelo, chequear teoría de circuitos si es así, en base a los test realizados.
  • Realizar la media de varias medidas para más exactitud.
  • Intercambiar varias cargas resistivas en diferentes pines para realizar un medidor de capacidad con auto-rango
  • Modificar el ''sketch para tener además de la carga resistiva, tener la descarga del condensador. Tener en cuenta que el valor reportado no es dos veces el valor reportado cuando sólo carga el condensador. Explicación.Indirecta -Estudiar la curva de la carga en la gráfica.

Share