Construyendo un medidor de capacitancia con ATmega8: del esquema al prototipo
El microcontrolador ATmega8 permite crear un medidor de capacitancia preciso usando el método de carga RC. El dispositivo incluye una pantalla LCD I2C, un regulador de voltaje LM7805 y resistores conmutables para distintos rangos de capacitancia. El desarrollo se realizó en EasyEDA para el diseño de PCB, Compass 3D para la carcasa y Proteus para la simulación.
La capacitancia C se define como C = Q/U, donde la carga se acumula de forma exponencial. El tiempo necesario para alcanzar el 63,2 % de Ucc proporciona la constante de tiempo τ = R × C. El algoritmo:
- Establecer el pin de descarga como "INPUT" para evitar la descarga.
- Registrar t0, el inicio de la carga.
- Activar el pin de carga como "OUTPUT" en HIGH, monitorear el ADC hasta alcanzar el 63,2 % de Ucc.
- Calcular C = (t - t0) / R.
- Descargar a través de una resistencia: establecer el pin de descarga como "INPUT", salida en LOW.
Un circuito RC con resistores conmutables ajusta τ en rangos de capacitancia desde picofaradios hasta milifaradios.
Diseño del esquema y arquitectura del circuito
El ATmega8 (DIP-28) con un ADC de 10 bits convierte Uc en código digital. La ALU calcula C basándose en τ. Resistores SMD 0603 (1kΩ–1MΩ) forman la red RC. Una resistencia de descarga limita la corriente. Una pantalla LCD I2C 16×2 (SDA/SCL) reduce el uso de pines GPIO. Alimentación: batería de 9V → LM7805 → 5V, filtrada con condensadores cerámicos 0603 y electrolíticos 3216.
AREF/AVCC conectados a 5V, Vcc/GND estándar. Conmutación automática de rango mediante salidas digitales que controlan las resistencias.
Lista de componentes clave:
- ATmega8-16PU
- LM7805
- LCD I2C 0x3F
- Resistores 0603: 1k, 10k, 100k, 1M
- Condensadores: 100nF×4, 10μF, 100μF
Diseño de PCB en EasyEDA
Tamaño del PCB: 30×38 mm. Anchura mínima de trazado b_min = I_max / (j_dop × t) = 0,254 mm (j_dop=50 A/mm², t=35 μm, I_max<0,1A). Diámetro de agujero d=1,2 mm para patillas ≤1 mm. Área S = S'/Kz, Kz=0,4.
Método sustractivo: grabado de cobre sobre FR4. El diseño minimiza la longitud de la ruta de señal del ADC para reducir ruido. Tierra es una placa sólida; alimentación usa pistas anchas. Vista 3D verifica distancias.
Cálculos de parámetros del PCB:
- Área: S' = ∑ área de componentes, Kz=0,3–0,6.
- Pistas: b_min según corriente y método de fabricación.
- Agujeros: d = d_element + |Δd| + r (r=0,1–0,4 mm).
- Distancias: ≥0,2 mm.
- Pads: Diámetro 1,5–2×d.
Ruteo: circuitos analógicos y digitales separados; tierra bajo el ADC.
Carcasa y diseño mecánico
Diseñada en Compass 3D: compartimento para batería de 9V, terminales BNC para Cx, corte para LCD y botón de encendido. Espesor de pared: 2 mm, con refuerzos. La visualización confirma ergonomía—acceso fácil a los componentes de calibración.
Implementación del software
Código en C++ para AVR-GCC. Inicializar Wire y LiquidCrystal_I2C. Dirección LCD: 0x3F. Pines: carga PB0, descarga PB1, rango PB2–PB4, ADC PC0.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define LCD_ADDRESS 0x3F
#define LCD_COLS 16
#define LCD_ROWS 2
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLS, LCD_ROWS);
// Pines
const int CHARGE_PIN = 9; // PB1
const int DISCHARGE_PIN = 10; // PB2
const int ADC_PIN = A0; // PC0
void setup() {
lcd.init();
lcd.backlight();
pinMode(CHARGE_PIN, OUTPUT);
pinMode(DISCHARGE_PIN, OUTPUT);
digitalWrite(CHARGE_PIN, LOW);
digitalWrite(DISCHARGE_PIN, LOW);
// Inicialización ADC
ADMUX = (1<<REFS0); // Referencia AVCC
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
}
float measureCapacitance(float R) {
// Descarga
digitalWrite(DISCHARGE_PIN, LOW);
delay(100);
// Carga
unsigned long t0 = millis();
digitalWrite(CHARGE_PIN, HIGH);
while (analogRead(ADC_PIN) < 645) {} // 63,2 % de 1023
unsigned long t1 = millis();
digitalWrite(CHARGE_PIN, LOW);
return (t1 - t0) / 1000.0 / R;
}
void loop() {
float C = measureCapacitance(10000.0); // R=10k
lcd.clear();
lcd.print("C = ");
lcd.print(C * 1e6, 1);
lcd.print(" uF");
delay(2000);
}
Lectura del ADC cada 10 ms, protección contra desbordamiento de temporizador. Constantes de calibración almacenadas en EEPROM.
Conclusiones clave
- El método de carga RC logra precisión ±5 % para C = 1 nF–100 μF.
- El cambio de resistores amplía el rango sin sacrificar la resolución del ADC.
- La pantalla LCD I2C ahorra pines GPIO—ideal para sistemas embebidos.
- El regulador lineal LM7805 es sencillo pero genera calor—aceptable para prototipos.
- El PCB de doble capa con verificación DRC en EasyEDA evita errores de ruteo.
— Editorial Team
Aún no hay comentarios.