TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: 5GTT en 26 de Abril de 2005, 17:10:00

Título: Acondicionar entrada A/D
Publicado por: 5GTT en 26 de Abril de 2005, 17:10:00
Pues he leido todos los post sobre el tema de voltimetros controlados por PIC y aun me quedan dudas sobre el tema del conversor A/D.

Mi idea es hacer una fuente de alimentacion conmutada totalmente analogica en su control de voltaje (se regulara con un potenciometro). Luego quiero sacar a partir de la salida de la fuente un cable hacia la entrada A/D del pic para posteriormente por un puerto de este salgan las tensiones en codigo BCD para decodificarlas a displays de 7 segmentos.

El problema es que segun he estado leyendo la entrada A/D del PIC solo admite hasta valores de 5V y mi fuente dara sobre 40V. Y es ahi donde me surgen las dudas.

¿Como acondiciono la señal para que 40V lleguen al PIC como 5V y los 0V lleguen al PIC como 0V? Sobre este tema he leido en otros post que se utiliza un amplificador operacional pero no me ha quedado muy claro su funcion.

En cuanto al codigo del PIC, lo haria en C y he pensado que la parte de A/D del codigo sera una cosa asi:

setup_adc (adc_clock_div_32);
setup_adc_ports (RA0_ANALOG_RA3_REF);
set_adc_channel (0);
delay_us (20);
voltaje=read_adc ();
setup_adc (adc_off);

Utilizando RA3 como Vref, aqui tampoco me aclaro, lo que entiendo es que debe tener un voltaje de referencia estable para comparar con el que le llega, pero no se si luego debo indicarle por software que voltaje es ese o si hay que meterle un Vref predeterminado.

Otra cosa que no me queda clara es lo de la resolucion del puerto A/D, se que se debe indicar al principio del codigo en C, pero no se cual es la indicada para este menester.

Tambien en cuanto a lo de convertir a codigo BCD las tensiones tengo una duda, lo quiero hacer asi por que es la manera que conozco de pasar un numero decimal a display de 7 segmentos, a traves de un decodificador de la familia 74SXXX, ¿ahi alguna manera mejor de hacerlo con PIC?

Pues esas son mis dudas, muchas gracias por las respuestas por anticipado y perdon por el ladrillo que pongo.

Un saludo.


Título: RE: Acondicionar entrada A/D
Publicado por: Falconhunter en 26 de Abril de 2005, 17:33:00
Para pasar de 40 a 5 y de 0 a 0 es muy facil. coloca un divisor de tension que divida la tension por 8.

0 - 40 V  |
              |
             ---
             |  |   1050 Kohm
             |  |
             ---
              |_____ Al ADC   0 - 5 V
              |
             ---
             |  |
             |  |   150 Kohm
             ---
              |
              |
            ___

Cuanto mas precisas sean las resistencias, mayor pre4cision habra en la medida. despues, en el programa has de gestionar el valor leido para que te visualice multiplicandolo por el factor del divisor (8):

Para 8 bits:

     Valor_real =  ( (Vref+ - Vref-)/255 ) * Valor_leido_ADC * 8

Para 10 bits

     Valor_real =  ( (Vref+ - Vref-)/1023 ) * Valor_leido_ADC * 8
Título: RE: Acondicionar entrada A/D
Publicado por: 5GTT en 26 de Abril de 2005, 18:47:00
Muchas gracias Falcon hunter, muy ilustrativo el esquema. ¿Esas resistencias son de un valor tan alto por algun motivo?(estabilidad o algo) o puedo elegir otras mas pequeñas.

Echando cuentas y llamando R1 a la resistencia de arriba y R2 a la de abajo de tu esquema, me sale que tiene que existir la relacion R1/R2=7 para tener un factor de division 8. Podre poner por ejemplo R1=7k y R2=1K.

Respecto a las formulas si alguien me puede explicar el interior del parentesis.

¿por que se devide entre 255 o 1023? ya se que son 2^8 y 2^10, pero no se por que se divide.

Y aqui: "(Vref+ - Vref-)"  entiendo que resta el Vref positivo menos el Vref negativo, pero yo pensaba que solo se usaba un Vref.

Un saludo y gracias de nuevo.
Título: RE: Acondicionar entrada A/D
Publicado por: Falconhunter en 27 de Abril de 2005, 16:08:00
Las resistencias las puedes poner de un valor relativamente elevado para no interferir en la medida y que la corriente demandada por el divisor no te falsee la tensión aplicada.

Como bien has dicho, cualquier realción que te cumpla 1:7 te soluciona el prooblema, pero siempre que se considere que la corriente por el divisor sea baja respecto a la fuente que la suministra, como ya he dicho.

Las formulas para el ADC consideran que hay que dividir por (2^n)-1 porque aunque tienes 2^n valores, el número de intervalos en los que te puedes encontrar la medida entre Vref+ y Vref- son uno menos. Para resoluciones de 10 bits o mas la diferencia de medida es infima, pero con 8 bits o menos, el error ya es notable.

Mira este ejemplo para 3 bits entre 5 y 0 voltios:

Vref+                                                                                              Vref-

|-----------|-----------|-----------|-----------|-----------|-----------|-----------|
. . . . 110 . . . . 101 . . . . 100 . . . . 011 . . . . 010 . . . . 001 . . . . 000  

5V . . . 4.28V . . . 3.57V . . . 2.85V . . . 2.14V . . . 1.42V . . . 0.71V . . . 0V

El valor 111 solo aparece cuando la tensión aplicada excede de Vref+

Como ves, no hay 8 intervalos, sino 8-1.

Las tensiones Vref+ y Vref- se puede seleccionar la fuente en la mayoria de los pics. Mirate en el datasheet el apartado del ADC y veras que hay muchas combinaciones (por lo menos en el 16F819). Unas toman Vref+ la tension Vcc aplicada o Vref- la tensión GND (o Vss). Normalmente la tensíon Vref- es la masa digital, por lo que suele ser 0. En otras configuraciones, sacrificas alguna patilla para introducir las tensiones externamente y poder abarcar un intervalo de tensiones mas estrecho y ganar en precision.

Espero haberte ayudado
Título: RE: Acondicionar entrada A/D
Publicado por: 5GTT en 27 de Abril de 2005, 17:27:00
Escrito originalmente por Falconhunter
Espero haberte ayudado


No es que me hayas ayudado, es que me has rwsuelto toda duda que tenia sobre A/D. Lo bien que se entiende todo con ejemplos...

Muchas gracias tio, apuntate una.

Un saludo.
Título: RE: Acondicionar entrada A/D
Publicado por: gauchosuizo en 28 de Abril de 2005, 01:38:00
hola

porque no haces el siguiente circuito, asi te evitas de hacer medidas falsas si sobrecargas el divisor de resistencias y ademas varia menos con la temperatura.

Circuito
Título: RE: Acondicionar entrada A/D
Publicado por: 5GTT en 28 de Abril de 2005, 12:55:00
Me debo haber equivocado en algo por que no me salen las cuentas sobre el montaje del no inversor:

Suponemos el operacional ideal, entonces V3=V2 y es la señal de entrada Ve=(0-40V) y la corriente es la entrada es 0 al no existir resistencia.

La corriente en R2 es I2=V2/R2

La corriente en R1 es (Ve-Vs)/R1 con Vs como señal de salida

Ahora por kirchoff I1=I2

(Vs-Ve)/R1=Ve/R2

Con lo que podemos despejar una Vs=(R1/R2)Ve + Ve.

por poner un ejemplo, ante una Ve=40 me daria una salida de 320V en vez de los 5V.

Un Saludo.
Título: RE: Acondicionar entrada A/D
Publicado por: 5GTT en 28 de Abril de 2005, 12:58:00
Nada, nada, ya se donde esta el fallo, la ganancia del no inversor del dibujo es de 8, en mi caso me interesa que sea de 1/8. Esto se soluciona cambiando en el esquema R1 por R2 y viceversa.

Por cierto no se me habia ocurrido como hacerlo con un operacional, como dije anteriormente habia oido hablar de que se hacia con ellos, pero no sabia como. Muchas gracias por el esquema.

Un saludo y gracias.
Título: RE: Acondicionar entrada A/D
Publicado por: Falconhunter en 28 de Abril de 2005, 17:22:00
Lo del operacional esta bien solo que existen dos problemas con el LM108:

1. La alimentacion es simetrica. Quiza no resulta rentable utilizar la tension de -5V solo para esta etapa. SOLUCION: Quiza lo mejor seria buscar un operacional de alimentacion simple.

2. El operacional no es "rail to rail". Esto significa que jamas se pueden alcanzar las tensiones de alimentacion, por lo que si se alimenta a 5 voltios, la salida no llegará más alla de 4 voltios aproximadamente. SOLUCION: Un operacional "rail to rail" (no son baratos) o aumentar la atenuación para introducir el rango dentro de los margenes de tension de salida. Si optas por esto, habra que introducir en el ADC las tensiones +Vref y -Vref correspondientes al margen de operacion. Otra solucion es aumentar la tensión de alimentación del operacional, logrando llegar a los 5 voltios de fondo de escala de ADC.

Un saludo
Título: RE: Acondicionar entrada A/D
Publicado por: 5GTT en 28 de Abril de 2005, 19:18:00
Si me decanto por la opcion del operacional utilizaria un UA741 ya que los tengo a mano, para alimentarlo, como bien dices podria utilizar un conjunto de 7809 y 7909 o incluso irme a los homologos de 12V.

El problema de esto es el precio, se subiria si tenemos en cuenta que la funcion sera la de hacer un voltimetro digital, y existen en el mercado por unos 20€ y ademas con LCD en vez de los displays de 7 segmentos que tenia previsto.

Lo que realmente me interesa saber es hasta que punto puede hacer variar el efecto de la temperatura la medicion si utilizo el montaje de 2 resistencia, el montaje ira dentro de una fuente de alimentacion que va sera capaz de entregar 10A asi que imagino que se calentara bastante.

Un Saludo.
Título: RE: Acondicionar entrada A/D
Publicado por: antoniof en 29 de Abril de 2005, 19:40:00
Buenas.

El efecto de la temperatura lo vas a tener en ambas opciones, ya que en el divisor de tensión afectará a esta división y en el operacional a la ganancia.

De todas formas no te debería preocupar demasiado este efecto:

La variación de resitencia de un material se calcula como sigue:

R=Ri(1+alfa+(tf-ti)), donde:

Ri --> Resistencia inicial
ti --> Temperatura inicial
tf --> Temperatura final
alfa --> coeficiente específico del material.

El alfa más cutre que he encontrado es de 0.0065.

Suponiendo que la resistencia inicial es de 1000 ohmios, y si se incrementa la temperatura 20º, la resistencia se modificaría hasta los  1130. Parece mucho, pero estamos en que la otra resistencia también aumenta en la misma proporción:

7000 --> 7910, luego el divisor de tensión te queda:

1130/(7910+1130)= 1/8. Curiosamente, la temperatura afecta a los dos de tal forma que la relacíon se mantiene.

La temperatura en este caso no es algo de lo que preocuparse, y menos si utilizas resistencias de precisión cuyo alfa es mucho menor, del orden de 0.00001.
Título: RE: Acondicionar entrada A/D
Publicado por: 5GTT en 29 de Abril de 2005, 20:50:00
Entonces me voy de cabeza hacia la opcion de las dos resistencias. Una ultima duda, como seleccionaria las Vref de 0 y 5V sin tener que utilizar ninguna patilla del PIC, es decir, por software. En los ejemplos que he visto en C, utilizan una entrada como referencia. ¿En ensamblador se complicaria mucho la cosa?

Un Saludo y gracias por todo.
Título: RE: Acondicionar entrada A/D
Publicado por: Nocturno en 30 de Abril de 2005, 00:27:00
Antoniof, ¿eso del alfa tiene algo que ver con la tolerancia de las resistencias?.
Si las dos resistencias suben o bajan con la misma proporción, lo que si habrá que asegurarse al menos es que las dos tengan el mismo alfa. ¿Cómo se puede medir?
Título: RE: Acondicionar entrada A/D
Publicado por: gauchosuizo en 30 de Abril de 2005, 09:15:00
hola Nocturno

como dice antoniof el coeficiente alfa es el coeficiente del material. Si las dos resistencias son del mismo material, se puede decir que las dos tienen el mismo coeficiente alfa y por logica tendrian la misma variacion con respecto a la temperatura. Lo que hay que tener en cuenta, es que no se puede sobrecargar el divisor, porque sino la relacion que se ha calculado se puede afectar. El alfa es una caracteristica del material. Como se puede medir? pues la verdad es que nunca me lo he preguntado, pero quizas hay qlguien en el foro que lo sabe.

Aloha
Título: RE: Acondicionar entrada A/D
Publicado por: antoniof en 01 de Mayo de 2005, 17:44:00
Bien.

El alfa es una propiedad del material y se supone que ambas resistencias son del mismo material. Una forma sencilla de medir el alfa de una resistencia es, con un polímetro, medir la resistencia a temperatura ambiente conocida, y luego medira a una temperatura menor, como podría ser poner en contacto la resistencia con un vaso de agua con hielo que sabemos que estará a aprox 0ºC. Con esta experiencia, podemos calcular al alfa fácilmente, de las resistencias que vayamos a colocar en nuestro circuito. Así nos haremos una idea de cuánto variará su valor cuando la fuente se ponga "calentita".

En cuanto a lo de la toleracia, está relacionado con el alfa, pero no es eso exactamente. La toleracia es un rango de valores entre los cuales el fabricante te asegura que estará una resistencia a temperatura ambiente. Lógicamente, cuanto mejor sea la tolerancia, menor coeficiente alfa tiene una resistencia. No sería de mucha utilidad, comprar una resistencia de 1050 Ohmios, si cuando se calentara un grado variara 1 Ohmio.

Por último, a la pregunta de 5GTT, hay una configuración del conversor AD que toma las referencias de la alimentación del PIC directamente a 5V y a 0V, por lo que no necesitas ningún pin adicional. Asegúrate de colocar el condensador de desaclopo de 100nF lo más cerca posible del PIC para que esta tensión tenga el mínimo rizado posible.
Título: RE: Acondicionar entrada A/D
Publicado por: Falconhunter en 01 de Mayo de 2005, 18:00:00
Para programar las tensiones de referencia tendras que mirar el datasheet del pic que estas utilizando.

Hay una tabla en el apartado del ADC que te dice todas las posibles combinaciones. Luego, a la hora de programar las opciones, cuando configuras en C (por ejemplo con el PICC) se pone esta linea:

setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);

en este caso se configuran los pines RA0 Y RA1 como entradas analogicas y RA3 como referencia positiva. La referencia negativa es masa.

El parametro puedes poner cualquiera de las constantes definidas en el archivo header. Estas constantes corresponden al numero que resulta de configurar los cuatro bits del registro ADCON1 que te permite configurar una o varias entradas analogicas, las referencias externas o internas.
Mira el datasheet para el pic concreto que estas usando.
Título: RE: Acondicionar entrada A/D
Publicado por: teve en 03 de Mayo de 2005, 06:46:00
Hola compañero, de antemano te digo que diseñar una fuente de alimentacion conmutada no es nada sencillo sobre todo si esta alimentada de la tension de red, a no ser que lo copies de un esquema, son muchas las cuestiones a tener en cuenta, de todas formas si intentas diseñar una y no lo consigue y estas empeñado en que sea conmutada, siempre puedes utilizar la de un ordenador que ya no utilices y menipularla dentro de unos limites ( cambiando la tension de referencia interna hara que la tension en la salida varia), por lo demas aqui estaremos para ayudarte en lo posible. Un saludo.Sonrisa
Título: RE: Acondicionar entrada A/D
Publicado por: 5GTT en 03 de Mayo de 2005, 17:38:00
La fuente conmutada esta basada en un esquema, es la famosa fuente de los 10A que se ha comentado por aqui en mas de una ocasion, asi que el  esquema esta probado y funciona. Aunque ya la voy a añadir algunas cosas mas, una salida de 5.1V constantes que entregara 5A basada en un L4975A. Y una salida simetrica regulable en tension, basada en los LM350 y LM333 de encapsulado TO3 que segun el datasheet agunatan 3A, claro esta que esta salida simetrica no es conmutada.

El problema de la parte analogica ya tengo todos los esquematicos en Orcad, los de las 3 salidas por si alguien los quiere. Estoy al 99% seguro de que funcionan, solo me queda ahorrar para el pedazo de trafo toroidal que lleva y probarlo.

Un Saludo y gracias a todos por ayudarme.