TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: pipipi en 15 de Mayo de 2010, 21:02:26
-
Hola amigos del foro:
Tengo un problema con el ADC del PIC18f4550, lo que intento hacer es desplegar en una lcd 2x16 la temperatura sensada por el lm35 como es sabido el lm35 entrega un voltaje correspondiente a la temperatura sensada de la sig forma : 10mv * °C, esto es que 100mv seria igual a 10°C. Teniendo en cuenta esto me apolle en un OPAM para amplificar este voltaje que es muy pequeño para meter al ADC del pic.
La relacion que he optenido con la amplificacion es 1000mV = 10°C es dicer optube una ganancia de 100 para la amplificacion del voltaje. hasta ahi todo va muy bien. El problema ahora es que al realizar la convercion con el ADC del PIC me varia demaciado la temperatura desplegada en la lcd he descartado algun ruido perteneciente a la salida del sensor y a la salida del amplificador ya que tengo dos volmetros conectados a mi circuito. El primer volmetro esta conectado a la salida del sensor midiendo el voltaja en mV y no hay ninguna variacion que pueda afectar mi lectura, el segundo volmetro lo tengo conectado a la salida de la amplificacion y tampoco hay variacion que afecte, por lo tanto dedusco que el problema esta en mi programacion, la he checado varias veces y no noto error, si alguin me pudiera ayudar y decirme que esta pasando se los agradeseria mucho.
el codigo es el siguiente:
#INCLUDE <18f4550.H>
#DEVICE ADC=8
#USE DELAY(CLOCK=4000000)
#FUSES XT,NOWDT
#include <LCD.C>
void main(void)
{
float T_S;
lcd_init(); //Inicializa LCD
setup_adc(ADC_CLOCK_INTERNAL );
setup_adc_ports(AN0); // Inicializacion del ADC
set_adc_channel( 0 );
T_S=0;
while(TRUE)//Ciclo
{
T_S = read_adc();
T_S=(T_S*50)/254;
lcd_gotoxy(1,1);
printf(lcd_putc,"T_S: %.1f ",T_S);
delay_ms(1000);
}
}
-
Hola.
Toma varias medidas, unas 100, y sacas el promedio.
Saludos
-
Tambien podes poner un pequeño filtro pasa bajos RC en la entrada para eliminar el ruido. Y por supuesto, como dice MLO, toma varias muestras y saca un promedio.
Suerte!
-
Hola:
Muchisimas gracias por sus respuestas, lo voy a provar y les cuento como me fue gracias. Pero tengo algunas dudas, el tomar varias muestras y sacar el promedio no influye demaciado en el resultado, es decir que no conincida con lo que en realidad esta midiendo el sensor?????
-
Aparte de todo lo mencionando, hay que hacer un buen diseño del pcb, capacitores de desacople, las lineas de alimentación bien hubicadas, plano de masa, ect.. Eso, aunque no paresza afecta a la medición.
Saludos!
-
Bueno, en sin ninguna medida es exacta, pero la aleatoriedad en el modulo del ADC del PIC es la que hay que corregir por soft, no hay de otra, así la medida que saca el sensor sea muy estable, el ADC del PIC le mete ruido ....
Los procesos térmicos son lentos, asi que no creo que haya problema con eso
Saludos
-
HOLA:
he estado tratando de resolver el problema que tengo con el ADC, ya hice algunas pruebes con tomar varias muestras (100 muestras) y sigo teniendo una lectura variable no tanto como la de antes pero si es significativa ya que varia hasta 2 °C, alguien tiene una idea de como resolverlo, el he pensado ahumentar el numero de muestras tomadas antes de desplegar la lectura pero obiamente esto afectaria aun mas mi lectura.
-
le tenes los respectivos condensadores de 100n a los vdd y vss del pic?
-
Trabaja a 10 bits de resolución, eso puede mejorar la medida.
Saludos
-
:shock: no creo q no...o si? trabajando a 10 bits siempre tiende a oscilar el ultimo bit..no?
-
Si, claro, oscila el LSB, pero en la medida corresponde a 4.88mV, mientras que a 8 bits corresponderia a 19.5mV
Saludos
-
mmm ya.. yo una vez tuve el mismo problema con lm35 pero la solucion estaba en el filtrado de la fuente
-
El adc del pic y de cualquier ADC tiene un error en el bit menos significativo por el error de cuantización, por esto siempre este bit se debe descartar, pero esto la mayoría de las veces no trae problemas, por ejemplo si tu estás midiendo un valor de temperatura de 0 a 50 °C que corresponden de 0 a 5V, esto sería 0°->0V->0ADC, 50°->5V->256ADC,
entonces por el error de cuantización, (variando solo el último bit)tendrías una variación en la lectura de 0.19°. Que no se condice con el error que estás teniendo.
Lo que si te está dando problemas es el ruido.
Ahora vamos a la parte externa al pic, dices que tienes un tester midiendo la salida, los tester comunes solo miden la tensión eficaz de DC, y su respuesta en frecuencia es muy pobre. Deberías si te es posible observar la salida del sensor con un osciloscopio y también la salida del operacional, vas a ver que no es nada limpia.
Primero debes estabilizar muy bien la fuente con la que estás alimentando el pic y el lm35 como así también el operacional, toda fuente tiene riple y ese riple se propaga a todos los componentes, por lo tanto si quieres obtener una buena medición la fuente debe ser lo más estable y lo mejor filtrada posible
Ahora el tema de la ganancia del amplificador, dices que lo configuraste con una ganancia de 100 (creo que quisiste decir 10). Supongamos que el LM35 te está dando una salida de 100mv, si esta fuera estable no habría problema, pero ahora se le suma el riple de fuente más algún ruido (térmico, por RF, algún motor que se enciende cerca, etc,etc), supongamos que este ruido es de 10mV, entonces a la salida va a tener 110mV, que multiplicado por 10 tienes 110mV*10=1100mV a la salida del operacional. Ahora traducido a muestras sería 1100mV*256/5=56.32, pero como las muestras son enteras te puede dar 56 o 57 que traducido a grados es 50*56/256=10.93° o 50*57/256=11.13°, en lugar de los 10 grados.
Si ese ruido es mayor, vas a tener un mayor variación en la lectura. Por lo tanto lo mejor es filtrar bien la fuente, y si te es posible diseña el amplificador, para que filtre la salida a una frecuencia lo más baja posible.
Estás tomando muestras a una frecuencia de 1seg mas o menos, y además la mayoría de los sistemas varían su temperatura muy lentamente, así que colocar un filtro a la entrada no va a dañar demasiado las lecturas. En caso de no poder diseñar el filtro con el amplificador, haz como te han aconsejado y coloca un filtro RC a la entrada del ADC de la frecuencia de corte lo más baja posible.
Espero no haber arruinado la explicación con tantas vueltas, Saludos
-
Hola amigos:
Primero que nada quiero dar las gracias a todos los que han contestado para ayudar. Y si Pablomanieri en lo que estoy en este momento es tratando de ver la señal que me entrega la fuente que estoy ocupando para alimentar el PIC, de todo lo que he estado investigando puedo deducir que lo que puede estar afectando mis mediciones es la alimentacion, el unico problema es que no tengo algun osciloscopio a la mano y tendre que conseguirlo para avanzar en esto.
En cuanto tenga la solucion les cuento como me fue.
Aprobechando este espacio quisiera preguntarles otras inquietudes que tengo, lo que pasa que el sistema que trato de realizar con el PIC es un equipo que debe estar trabajando durante mucho tiempo sin quitarle la alimentacion ni apagarlo, la programacion que pretendo realizar es algo extensa pero me gustaria saber sus opiniones sobre si puedo tener la certeza que el pic funcione bien durante el tiempo requerido, es decir, que no se pierda durante el trabajo que va estar realizando y si no como podria solucionar este problema, me gustaria saber sus opiniones antes de tomar la decesion de seguir trabajando con este pic o si no mudarme a otro de otra tecnologia o mas potente, hay equipos que tardan trabajando años sin que se desconecten o reseteen. Espero sus comentarios. Gracias
-
Hola.
Si estas usando Vdd y Vss como referencia en los voltajes de conversión, la fuente si que debe ser estable, así que pon unos buenos condensadores de desacople.
-
Hola MLO:
Parece ser que he resuelto el problema de las fluctuaciones y si estoy usando los voltajes de referencia del PIC. El problema estaba en que el sensor lo tenia conectado a un cable demaciado grande como de tres metros locual me causaba un ruido exagerado. Lo que hice es recortar dicho cable a algo mas apropiado a mi sistema como de medio metro. Es importante aclarar que tome mucho en cuenta sus opiniones, me enfoque mucho a la fuente ya que tienen mucha razon en que la fuente debe ser lo mas filtrada posible, a si que conecte unos capacitores como filtros a la salida de la fuente, esto me ayudo bastante, tambien he tomado 5 muestras de la lectura del ADC a las que posteriormente le saco el promedio para obtener la temperatura final. Al final pienso que todo lo aportado por ustedes fue bueno pero siento que lo que estaba afectando mas es el cable tan largo que tenia.
Ahora bien he logrado obtener una lectura lo suficientemente estable para lo que necesito, por ejemplo si se desplega en pantalla una lectura de 30°C unicamente varia +-.1 lo cual es formidable. Pero siempre me a gustado ir mas haya es por eso que abuso de sus conocimientos preguntando .. Que pasaria si necesitamos ubicar el sensor en un lugar mas apartado de nuestro proto como atacarian este problema, que clase de cable usarian.
-
Se puede utilizar cable mallado con dos conductores internos si necesitas mas longitud y agregar un condensador de bypass de 100 nF en los pines de alimentación del LM35 en el extremo del cable. De todas formas el LM35 tiene salida en tensión y esto evidentemente restringe la longitud máxima del cable que puede utilizarse.
Por otro lado no estoy de acuerdo con utilizar Vdd y Vss como referencias analógicas para el conversor. En mi opinión, uno puede intentar filtrar muy bien la fuente que alimenta al PIC, pero uno ya esta condenando la estabilidad del sistema por el mero hecho de unir dos circuitos que no deberian estarlo. Las justificaciones escapan a este post (O nos extenderemos en varias paginas :mrgreen: ) pero ya se han dado varias en otros temas similares.
Como regla de oro en las PCB, las circuitos analógicos y digitales no deben compartir buses de alimentación, deben tener fuentes de alimentación individuales y ni siquiera deben estar en la misma area del circuito. La masa analógica solo se conecta con la masa digital en el punto estrella de la PCB y hasta ahi terminan las conexiones en común.
Los PIC18 incluyen la posibilidad de destinar dos pines para colocar las referencias de tensión del ADC y asi permitir el aislamiento. No deberia desperdiciarse semejante ventaja, salvo casos contados.
Saludos.
-
Hola Gonzalo_BlackHawk:
Gracias por responder y se me hace muy bueno lo que comentas, asimilandolo tienes toda la razon en que las alimentaciones de circuitos analogicos y digitales deben ser totalmente independientes ;-). He pensado realizar una pequeña fuentesilla con dos salidas de 5V una salida para alimentar a mis circuitos digitales y otra para alimentar mis circuitos analogos obiamente la masa debe ser comun tanto parar los circuitos analogos como para los digitales.
De nuevo muchisimas gracias. siempre hay algo nuevo que aprender :-/
-
muy buenas respuestas, tengo el problema similar, les comento, la fuente de poder es un cargador de celular que me debuelve 5.67v y no uso capacitores, la tomo directa, el lm35 esta en su out directo a RA0 del pic,(el mismo 18f4550) y el pic controla 5 relees que estan conectados a la misma fuente, por la mismas vdd y vss,
pienso en poner un 7805 con un capacitor de 2200uF en la vdd y vss del lm35 un cap de 2200uF en la vdd vss del pic y y el filtro rc en el lm35, asi como tomar unas 10 muestras de temperatura.
creen que con esas soluciones quedara mas estable?
tengo variaciones de mas de 10°