Gzaloprgm.com.ar

Convertir una tensión en un valor digital, sin usar ADC

Posteado hace 8 meses

Hay veces en las que necesitamos leer desde sensores, potenciómetros u otros dispositivos analógicos, desde un microcontrolador barato sin ADC.

Acoplar un ADC externo hace que necesitemos más patas en el micro (generalmente el valor sampleado se da en un bus de datos de 8 bits, como en el ADC0808), más espacio en el circuito impreso, o más complejidad en el software (por ejemplo, habría que programar rutinas para comunicarse via I2C con el ADC)

Si no nos interesa la resolución, precisión, linealidad, tiempo de sampleo, una solución es usar un circuito RC, usando un estilo de conversión similar al de doble rampa, pero sin integrar, unicamente contando el tiempo que tarda en descargarse el RC

Circuito RC

La resistencia puede ser cambiada por un termistor (PTC o NTC) si se quiere medir temperatura, o un LDR si se quiere medir luminosidad. También es posible usar un sensor capacitivo, manteniendo fija la resistencia en algún valor conocido.

Es necesario tener una pata de E/S en el microcontrolador, que permita poner la pata en estado de alta impedancia

El principio de funcionamiento es el siguiente:

Ciclo carga descarga capacitor

Si no tenemos puertos con posibilidad de setear un modo de entrada/alta impedancia (como en el 8052), podemos usar un par de componentes más, como se muestra en el circuito siguiente:

ADC sin puertos de alta impedancia

Como se puede ver, el diodo hace que el capacitor solo pueda ser cargado, la resistencia extra evita algún posible cortocircuito en caso de que el potenciómetro esté en 0 ohms (puede ser removido si sabemos que tiene límite el puerto). El transistor y la resistencia de base se usan para sensar cuando la tensión del capacitor es menor a 0.7v

Un problema de este tipo de conversor es que depende de la tensión (por ejemplo si el circuito fuese alimentado a 3.3v, el capacitor tardaría mucho menos en cargarse), la baja resolución (que se puede mejorar usando interrupciones y no midiendo manualmente), y que necesita bastante tiempo de sampleado (pero se puede tunear para cada aplicación)

Cómo usarlo (en C)


	unsigned short tiempo=0;
	PIN_CARGA = 1; delay1ms(); PIN_CARGA = 0; //Cargar el capacitor	
	while(EJE0_LECTURA == 0) tiempo++; //Esperar descarga
	

Al valor resultante (16 bits) habría que restarle una constante, y escalarlo para obtener un valor entre 0 y 0xFF.

Palabras clave: sigma delta, doble rampa, rampa, integración, adc pic, adc avr, adc 8052

¿Te gustó el artículo? ¡Compartilo!
  

Comentarios:

jorge

Avatar

hola , muy interesante sitio,tengo una duda se podria implementar en un pic 16f628a ?

Gonzalo Ávila Alterach

Avatar

Jorge, podés hacerlo más fácil con un PIC de ese estilo: conectás algún pin del PIC a un capacitor y resistencia en paralelo (como en la primer imagen) y hacés esto:
Ponés esa pata en 5 volts por unos milisegundos
Activás el modo "alta impedancia" y contás cuanto tiempo tarda hasta volver al estado "0". En internet deberían haber varios códigos hechos por otras personas que te sirvan para hacer eso.

Agregá tu comentario:

No escribas todo con mayúsculas ni como si fuese un mensaje de texto.

Insultos, trolls y spam serán removidos.

Si querés que te aparezca una imagen, podés crearte un gravatar.

Soy Gonzalo Ávila Alterach, de Buenos Aires (Argentina), este es mi sitio web personal. Me interesa lo relacionado con la programación, la informática y la electrónica.

Si tenés alguna duda o consulta, podés contactarte conmigo:
Email/Gtalk Facebook LinkedIn Youtube

 Leeme por RSS

Categorías:


Los contenidos de esta web están bajo licencia Creative Commons BY-NC-SA 3.

¡Seguinos en Facebook!

2012 - Gonzalo Ávila Alterach | Licencia Creative Commons
Otros sitios: MundoProfes, TacticalShield, ParadiseCityMC