La idea de hacer un instrumento,
como es un capacimetro digital (mide el valor de los condensadores) siempre
estuvo en mi mente. Pues cuando compre mi primer multímetro digital, este no
traía incorporado uno. Para un inexperto en el código de números que te indican
el valor de un condensador, era complicado verificar su valor correcto, además que los números a veces venían borrosos, pequeños y codificados.
Después de haber leído como
funciona uno, buscar esquemas de capacimetros digitales en Internet y me di cuenta que no es fácil construir uno, alguno de estos circuitos tenían como base
principal el CI 555, este timer tan viejo como su nombre, es tanta la complejidad de estos esquemas, que les
muestro uno a continuación:
Figura 0
En este esquema podemos darnos cuenta de que se necesitamos una buena cantidad de materiales, así que para que complicarnos, si podemos
crear nuestro propio Capacimetro digital de 4 Digitos, y porque no con el PIC más viejo, el 16f84a,
el más conocido, pero con pocas caracteristicas integradas.
Esquema General:
Figura 1
Explicare un poco de que se trata el esquema del
Capacimetro Digital.
Empecemos:
Empecemos:
Medición del tiempo
de carga del Condensador:
Figura 2
Este circuito funciona de la siguiente forma:
Cuando se hace que la entrada de disparo (pin 2) cambia del valor
de alto (1) a bajo (0), el circuito temporizador con el 555 de la forma que está
conectada va a generar en su salida (pin 3), una señal alta (1) que tendrá una
duración proporcional al valor de la resistencia selector y del valor del
condensador.
Figura 3
Ahora bien por motivos de tiempo de carga de los
condensadores, he añadido al circuito un selector de resistencia en el caso de
medir condensadores en uF, utilizamos una resistencia de 1K, esto porque a
mayor valor del condensador, se demora más la carga, si hacemos que la
resistencia se pequeña, la carga seria rápida.
Figura 4
Por ejemplo: Para 10uF, el tiempo es de
10.85ms aproximadamente.
En el caso de medir condensadores
en nF, el selector de resistencia debe de tomar el valor de 100K, esto porque a
menor valor del condensador, la carga es rápida, pero al tomar un valor pequeño
no se puede hacer una medida en tiempos pequeños, así que para elevar el tiempo
de carga se toma el valor de 100K.
Figura 5
Para 10nF, el tiempo es de 1.10 ms
aproximadamente.
Esta etapa del circuito del
capacimetro digital es de vital importancia, pues en esta etapa del sensor, nos mide el tiempo de carga del condensador, en la etapa de
control pasaremos este tiempo, al valor del condensador.
Selector de Unidades:
Figura 6
Ahora tenemos que decirle al
microcontrolador en que unidades vamos a medir, pues la distancia de 1nF a 1uF
es de 1000, así que tendríamos que nuestro capacimetro digital tenga más
dígitos, la función principal del selector es decirle mediante un 1 lógico, que
vamos a medir en las unidades de nF o uF, esto se hace antes de
presionar el botón de Medir, son las configuraciones iniciales que toma el
microcontrolador antes de hacer el cálculo del tiempo que se demora en cargar
el condensador.
Botón de Medición:
Figura 7
No hay mucho que decir, sobre
este circuito, solo que al presionar el botón, el microcontrolador 16f84a, va a
empezar a medir el tiempo y luego procederá a visualizarlo en los displays. Si
se tiene presionado el botón Medir, no se hará la medida del condensador hasta
que se suelte.
Etapa de visualización:
Figura 8
Esta parte del circuito del
capacimetro digital, es muy importante, pues es la parte de la visualización de
los datos medidos, para este capacimetro digital he tomado 4 display, podría
haber utilizado mas display, pero la cantidad de pines que posee el
microcontrolador 16f84a, no era suficiente, para esta etapa también podría
haber utilizado un LCD de 16x2, pero perdería la idea de crear un sistema
electrónico mediante un microcontrolador, al utilizar los display, el
programador se complica un poco más, así que se pone a utilizar el cerebro de
Ingeniero.
Bueno empecemos a explicar esta
etapa, los transistores 2n2222, son como switchs, que uno puede seleccionar el
display que desea utilizar, es decir para visualizar un numero de cuatro
dígitos tengo que activar los cuatro display, si quiero un numero de 2 dígitos
solo activare dos display, así de fácil…
Para no gastar muchos pines del
microcontrolador 16f84a, tuve que utilizar un decodificar de BCD a 7 Segmentos,
al final puedo manejar los cuatro display con solo 8 pines del PIC, en cambio
si no utilizara el decodificador necesitaría de 13 pines, con esto tengo 3
pines libres que puedo utilizarlos.
Para finalizar con esta parte del
circuito del capacimetro digital, déjenme decirles que los display son
prendidos independientemente, es decir para formar un numero de cuatro dígitos,
primero prendo un display, lo apago, prendo el segundo display, lo apago,
prendo el tercer display, lo apago, prendo el cuarto display, lo apago, prendo
el primer display, lo apago….así sucesivamente
.
.
Figura 9
Esto se hace tan rápido que uno no se da cuenta, bueno son
estrategias de programación, que se explicar en el código del programa del
Capacimetro Digital.
Etapa de Control:
Figura 10
Creo yo que este es el cerebro de nuestro capacimetro
digital, porque al final a cabo quien gobierna nuestro sensor para medir el
condensador y la etapa de visualización es este, todo el programa para manejar
las diferentes etapas se encuentra dentro del microcontrolador 16f84a.
Realizare algunas explicaciones de este circuito. Empecemos
por la parte del microcontrolador 16f84a, necesita un cristal externo
para poder trabajar, así que nosotros trabajaremos con un cristal de 4Mhz,
añadimos a sus extremos unos condensadores para eliminar el ruido eléctrico
que genere el medio ambiente.
Esta la botonera del reset, por si nuestro
microcontrolador por algún motivo se cuelga o se paralice, tenemos que
resetearlo, para esto esta la botonera.
Para finalizar esta pequeña explicación, debo decirles que he puesto una resistencia en la salida del pin RA4, pues cuando
este pin se configura como salida, se comporta como una salida de colector
abierto, por lo tanto tenemos que alimentarlo, es decir la salida esta
configurada como un transistor que no esta conectado a la fuente, por eso yo lo
estoy conectando a la fuente mediante una resistencia de 10k, este valor para
no malograr el pin, con corrientes altas.
Les muestro alguna de las señales que emite nuestro
cerebro:
Figura 11
Programa Principal
del Capacimetro Digital:
Figura 12
Figura 13
Figura 14
Figura 15
Figura 16
Figura 17
Figura 18
Explicación del programa que maneja nuestro capacimetro
digital:
Configuraciones
iniciales:
Figura 19
Esta líneas iniciales del código,
le dicen al compilador que vamos a usar el microcontrolador 16f84a (#include
<16f84a.h>, vamos a configurar un cristal externo de 4 Mhz (#fuse XT), no
vamos a activar el perro guardián (#fuse NOWDT), vamos a habilitar el uso del
timer en un valor alto (#fuse PUT), no vamos a proteger el código en el
microcontrolador (#fuse NOPROTEC).
Vamos usar retardos de tiempo
(#use delay (clock=4000000)).
Asignación de nombres
a los pines:
Figura 20
En estas líneas, por comodidad de
programación, he asignado nombres a los pines del microcontrolador 16f84a (
Ejem. #define A PIN_A0), con esto se hace más fácil programar, pues uno sabe
que pin está conectado a cada parte del circuito electrónico.
Declaración de
funciones utilizadas y variable usadas:
Figura 21
Declarar las funciones a utilizar
es importante, facilita al compilador saber que existen funciones que se van a
utilizar en el programa principal, aunque todavía no se ha escrito la función.
Tengo la función:
void digito (int n); esta función
escribe un digito en un display de 7 segmentos.
Void active_disp (int disp); esta
function va activar el display en cual
se escribirá un dígito del valor medido.
Las siguientes líneas solo son
declaraciones de variables que se van a
usar dentro del programa principal.
Analizando el
programa Principal:
Figura 22
Las líneas iniciales de todo
programa en CSS Compiler, es configurar si un pin del microcontrolador va a ser
usada como entrada o salida, para este caso con un “0”, se configura un pin
como salida y con un “1”, se configura un pin como entrada.
Veamos que todos los pines del
Puerto A del Microcontrolador 16f84a, se han configurado como salidas. Pero los
primeros pines del Puerto B se han configurado como entradas (B0, B1, B2, B3) y
los demás como pines de salida de datos (B4, B5, B6 y B7).
Figura 23
Estas líneas del código son
interesantes, pues son las condiciones iniciales de nuestra salidas, es decir
de los valores lógicos iniciales que deben tener nuestros pines de salida de
nuestro microcontrolador, por ejemplo que pasa si al iniciar a funcionar
nuestro capacimetro digital presenta en su display el valor de 251, sería algo
incorrecto, pues aun no hacemos ninguna medida y nos está dando mostrando un
valor incorrecto.
Figura 24
Lo que hace nuestro CI 555, es
darnos un tiempo, que depende del valor del condensador, bueno es valor de
tiempo no es valor del condensador, así que se tiene que hacer una conversión,
para eso utilizamos estas líneas de código, para indicarle que si medimos
condensadores en “nF”, tenemos que calibrarlo con un valor de 89, es el factor
multiplicativo, nada más.
Figura 25
Línea de código interesante, pues
es un bucle cerrado, es decir no hace nada hasta que presionamos el botón de
medir, y empezara a medir el valor del condensador.
Figura 26
Creo que es la parte principal de
todo el programa, pues estas líneas son las miden el tiempo en que mide el
valor del condensador, hacer la conversión de tiempo al valor del condensador.
Primero se manda un pulso de
disparo para activar el CI 555, y empiece a generar un valor alto, que sea
proporcional al valor del condensador.
Luego calibramos nuestro
capacimetro digital, eso se hace mediante un retardo de tiempo, así pues ya
calibrado, empezamos a incrementar, cada digito del capacimietro digital,
recuerde que tenemos que separar los dígitos, para escribirlos luego en los
displays, pero porque no hacerlo en el tiempo que se hace la medida del valor
del condensador, eso es lo que se hace en estas líneas de código. Todo es
conteo se va a realizar hasta que la salida del CI 555 sea alta, es decir al
final a cabo estamos contado en tiempo que nos está generando un valor
determinado del condensador.
Figura 27
Finalmente para terminar el
programa principal, tenemos que enviar los dígitos a los displays, para eso
utilizamos una bucle infinito (for(;;)), con ello siempre se va repetir la
escritura del valor tomado del condensador, es por esta razón que para volver a
medir el condensador, tenemos que reiniciar nuestro microcontrolador con el
botón Reset.
Para la entapa de visualización
se puede notar que activo el display 1, escribo el digito1, lo apago, prendo el
display 2, escribo el digito 2, lo apago, prendo el display 3, escribo el
digito 3, lo apago y finalmente prendo display 4, escribo el digito 4, apago el
display 4, y todo este proceso se repite indefinidamente, el proceso de
prendido y apagado es tan rápido que al final a cabo el ojo humano no lo siente
y ve todos los display prendidos y con todos los dígitos que se han tomado en
las líneas de código anterior.
Funciones implementadas:
Figura 28
Esta función es la que nos va a
visualizar en un display un digito, es un poco largo, pues tenemos que escribir
todos los dígitos (0, 1, 2, 3, 4, 5, 6, 7,8 ,9); es un poco largo pero es fácil
de entender, pues como estamos utilizando un decodificador de BCD a 7 segmentos
solo tenemos generar los números naturales pero en código binario de 4 dígitos,
eso es lo que se hace en esta parte del programa.
Figura 29
Finalmente la función que
controla los displays, es decir esta parte del código del capacimetro digital,
hace que solo se active un display a la vez, si es que no hiciéramos esto, se
verían en dos o tres display números iguales, pero que no corresponderían al
valor del condensador medido.
ANEXOS:
Compilando en PIC CSS Compiler:
Figura 30
Simulación para un Cx=12nF
Figura 31
Simulación para un Cx=22uF:
Figura 32
Simulación para un Cx=1000uF:
Figura 33
Simulación para un Cx=1000nF:
Figura 34
Nota: Todos los valores de resistencias, transistores,
condensadores, etc.; presentados en este trabajo son correctos para su
implementación.
Excelente aporte , me puedes enviar el archivo hexadecimal este es mi correo ISAACGZL12@GMAIL.COM
ResponderEliminarbuenas tardes, amigo podría facilitar el código hex o main. para realizar, ya que el código puesto en las imágenes al momento de compilar sale error.
ResponderEliminar¿cuál es el valor máximo de capacitancia que puede medir?
ResponderEliminar¿cuál es el tiempo que toma en realizar una lectura de la medición?