TODOPIC

FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: Nocturno en 28 de Diciembre de 2007, 17:11:26

Título: ¿Qué función genera este resultado?
Publicado por: Nocturno en 28 de Diciembre de 2007, 17:11:26
Estoy montando la fuente de Valdorre y una vez conseguida la regulación y la estabilidad de la tensión de salida, quería hacer que la medición mostrada en el display fuera la más exacta posible.
Para ello he tomado 100 muestras con el ADC a distintos niveles de tensión, y he anotado la lectura de la tensión con el polímetro y todo lo he graficado en Excel.
Según eso, la respuesta del ADC a las tensiones generadas por la fuente tiene esta curiosa forma:
(http://img262.imageshack.us/img262/1694/respuestatensiongp6.jpg)

¿Cómo puedo calcular la función que debería utilizar para calcular la tensión dada una lectura del ADC?, supongo que con MATLAB o algo parecido se podrá hacer, pero no tengo ni idea de eso y me gustaría complicarme mucho la vida. ¿Algún consejo?

P.D. adjunto el Excel por si algún alma caritativa quiere hacer el cálculo

Gracias
Título: Re: ¿Qué función genera este resultado?
Publicado por: J1M en 28 de Diciembre de 2007, 18:09:46
Manolo generalmente para aproximar este tipo de respuestas(tan planas), supongo que has realizado la medición varias veces y es aproximadamente igual siempre, se suelen usar interpoladores lineales, es decir, partir la señal en varios pedazos y aproximar cada uno de esos pedazos a una 'linea recta'. Así a ojo, tu salida podrías dividirla en tres tramos:

32<t<=182
182<t<=262
262<t<=1022

y calculas la ecuación de la recta para cada uno de ellos... (si te lías dímelo!)

Este es el interpolador más sencillo, que para tu caso, como no hay demasiada variación creo que será el que mejor resultado te va a dar y además no va a tener demasiada carga 'computacional'.


saludillos!!
Título: Re: ¿Qué función genera este resultado?
Publicado por: andros en 28 de Diciembre de 2007, 19:13:45
Cordial saludo compañeros.

Totalmente de acuerdo con JM1, si quieres una respuesta correcta te tocará usar métodos numéricos o métodos estadísticos...,

Ahora bien, presiento que la respuesta que has obtenido puede ser la respuesta de tu conversor, es decir, depende del conversor que estás usando, no sé si será el ADC de un pic, si es así es muy probable que su comportamiento cercano a cero no sea muy bueno, en ese caso usaría un conversor externo. Es muy, pero muy probable que la respuesta que obtengas se vea mejorada si cambias de conversor, pues hay parámetros como el jitter y el INL (Error de no linealidad integral, que es la desviación del código generado de la línea recta ideal del conversor) que generan el tipo de respuesta que estás obteniendo, otra estrategia sería montar un offset como referencia de cero voltios a tu ADC para mejorar la respuesta a baja escala, ya que es curioso que el comportamiento sea lineal después y antes de 5, como si hubiera un error en la ganancia de la conversión justo en ese punto..... sería de analizar.

Si no es el conversor puedes usar el método de aproximación por mínimos cuadrados (el que se usaba en los laboratorios de física), aproximas los datos y sacas la ecuación de tu recta "ideal" con la cual convertiras tu datos. Espero  te sirva.

Saludos.
Título: Re: ¿Qué función genera este resultado?
Publicado por: jfh900 en 28 de Diciembre de 2007, 20:04:57
La propia hoja de cálculo Excel te permite obtener la "recta de regresión", que para tu caso es:

y=0,0235x-0,6795

La gráfica es:

Título: Re: ¿Qué función genera este resultado?
Publicado por: Nocturno en 29 de Diciembre de 2007, 03:54:50
Pues estuve jugando con Excel y encontré que calcula la línea de tendencia con polinomios de grado 6, que se ajusta bastante a la curva original, aunque os podéis imaginar que la fórmula resultante es una barbaridad.
Me gusta la opción planteada por Jaime, ya que se podría simplificar fácilmente en tres rectas.
Hago unas pruebas y os cuento. Gracias por la ayuda.

Andros, a mí también me sorprendió que el cambio estuviera en torno a los 5V, y es probable que tenga algo que ver que la tensión de alimentación del PIC (Vdd=5V) no sea la misma que la del resto del circuito (Vcc<=25V), lo que provocoará algún efecto pernicioso en las cercanías de los 5V.
Título: Re: ¿Qué función genera este resultado?
Publicado por: Nocturno en 29 de Diciembre de 2007, 04:26:05
Parece que la cosa sale bastante bien; en la gráfica siguiente he representado en color rojo la curva original y en azul la resultante de calcular una aproximación con el método de la división en tres rectas.
(http://img80.imageshack.us/img80/3328/respuestatensiontb2.jpg)

He calculado el % de error en cada punto y como se puede observar sólo en dos casos supera el 2% por lo que creo que me quedaré con este método. Al fin y al cabo no supone más que una multiplicación y una suma en cada punto.

Así ha quedado la función:
Código: C++
  1. float extrapola (int16 Valor) {
  2.    if (Valor<177)
  3.       return((float)Valor*0.0236+0.0318);
  4.    else if (Valor<297)
  5.       return((float)Valor*0.0107+2.3096);
  6.    else
  7.       return((float)Valor*0.0253-2.0676);
  8. }

Gracias por vuestra ayuda
Título: Re: ¿Qué función genera este resultado?
Publicado por: J1M en 29 de Diciembre de 2007, 07:00:20
Me alegro que te haya dado tan buenos resultados, de nada aquí estamos para servir!!

Saludos! :)
Título: Re: ¿Qué función genera este resultado?
Publicado por: andros en 30 de Diciembre de 2007, 18:28:27
Te felicito por los resultados, una solución sencilla y adecuada para la aplicación....., como debe ser!......, aunque no deja de asaltarme la curiosidad de la variación entorno a los 5V.... 8)

Saludos!
Título: Re: ¿Qué función genera este resultado?
Publicado por: micro_pepe en 03 de Enero de 2008, 15:40:56
Resulta interesanto lo de linealizar la respuesta, pero me imagino cada pic tendra la sulla propia, aun siendo del mismo modelo.

1 saludo.
Título: Re: ¿Qué función genera este resultado?
Publicado por: micro_pepe en 05 de Julio de 2008, 16:41:38
Buenas, retomo este tema para consultar a Nocturno si despues de linealizar la respuesta del ADC del pic se obtiene una buena precision, osea, que si la lectura de voltaje en el display LCD de la fuente y la lectura con un polimetro en la salida de la fuente son muy similares.

Yo sin linealizar, obtengo un error maximo de +/-200mV.

Por otro lado preguntar si cada pic tendrá su linealización particular (creo que si), o si la de Nocturno serviria para todos los pic de ese modelo.

Un saludo.
Título: Re: ¿Qué función genera este resultado?
Publicado por: Nocturno en 05 de Julio de 2008, 17:22:39
Aún no he terminado con la fuente. Ya te aviso
Título: Re: ¿Qué función genera este resultado?
Publicado por: Renatox_ en 06 de Julio de 2008, 03:29:06
Hola Nocturno, debería salirte una línea recta ya que <0-1023> es proporcional a <0-5v> que está en escala con <0-25v> por ejm a traves de un divisor resistivo. Me parece que hay mucho error debe salirte una linea bastante recta.

saludos.
Título: Re: ¿Qué función genera este resultado?
Publicado por: Nocturno en 06 de Julio de 2008, 03:45:54
Sí, Renatox, tenía errores en la fuente que provocaban ese desajuste. Ahora va bastante más lineal, pero aún no la he terminado.
Título: Re: ¿Qué función genera este resultado?
Publicado por: micro_pepe en 28 de Octubre de 2008, 19:43:55
Buenas.

Nocturno, como hiciste la grafica, midiendo la salida de la fuente con un polimetro y visualizando en un display el valor del adc?

Despues de saber eso tendré que jugar un poco con el excel, pues nunca represente una grafica con el.

un saludo.
Título: Re: ¿Qué función genera este resultado?
Publicado por: Nocturno en 28 de Octubre de 2008, 19:53:48
Efectivamente, así fue.
Título: Re: ¿Qué función genera este resultado?
Publicado por: micro_pepe en 28 de Octubre de 2008, 21:11:41
Hola de nuevo, he conseguido obtener una curva de interpolacion polinomica a la curva representada, y obtener su ecuación. Pero no consigo obtener varios tramos con sus respectivas ecuaciones, pues la curva que yo obtengo sospecho que es parecida a la de nocturno, (contrastando la lectura del polimetro y la del display lcd de la fuente), y con tres tramos seguramente obtenga mas precisión que con una sola curva polinomica de grado 2.

Un saludo.
Título: Re: ¿Qué función genera este resultado?
Publicado por: pablomanieri en 29 de Octubre de 2008, 10:14:14
por que no guardas esos valores en una tabla en el pic y luego (tensión y valor de conversión y luego en vez de hacer cálculos solamente llamas a la tabla con el valor de conversión obtenido y ya tienes el voltaje de salida
Título: Re: ¿Qué función genera este resultado?
Publicado por: Gonzalo_BlackHawk en 29 de Octubre de 2008, 14:49:52
por que no guardas esos valores en una tabla en el pic y luego (tensión y valor de conversión y luego en vez de hacer cálculos solamente llamas a la tabla con el valor de conversión obtenido y ya tienes el voltaje de salida

Porque necesitarias una cantidad de memoria demasiado grande que no se justifica, porque seria almacenar 6 bytes por punto en la curva (2 para la conversión y 4 para el valor en coma flotante de la tensión que resulta) y si tienes valores de conversión de 0 a 1023 eso serian 1024 x 6 = 6144 bytes = 6 K solo para esa tabla de referencia. Como debe ir en la ROM porque es información fija no hay pic que alcance (por lo menos de gama media 16F o 18F). Tambien podria guardarse en la memoria del programa, pero realmente lo veo mas como una complicación de la cuestión, que puede solucionarse mas eficientemente con la aproximación que ya ha aplicado manolo.

Saludos.
Título: Re: ¿Qué función genera este resultado?
Publicado por: micro_pepe en 29 de Octubre de 2008, 19:15:03
Buenas, Gonzalo_BlackHawk tiene razón, se gasta mucha memoria.

Esta tarde en el trabajo creo que se me ha encendido la bombilla, quizas la respuesta del adc, se deba representar en tres tramos osea, en tres graficas diferentes, y obtener una ecuación para cada recta.

Es así, o existe una manera mejor?

Un saludo.
Título: Re: ¿Qué función genera este resultado?
Publicado por: micro_pepe en 01 de Noviembre de 2008, 11:03:56
Pues estaba equivocado, he representado la curva en excel como lo hizo nocturno, y es una recta, asique aunque interpole con una recta y saque una ecuacion de esa recta, no mejoro nada.

El problema es que a pesar de ser una recta entre la medida con el polimetro y la del lcd de la fuente puede diferir al acercarse a los 24v en un voltio.

Adjunto mi archivo de excel.
Título: Re: ¿Qué función genera este resultado?
Publicado por: MLO__ en 01 de Noviembre de 2008, 13:05:42
Hola.

Algo que es importante tener en cuenta es el dispositivo que se esta usando para generar la division de tension, si se trata de un potenciometro o reostato hay que identificar si es lineal o logaritmico.

Lo que se esta haciendo en este caso es sacando la funcion de transferencia (o de correlacion) del dispositivo divisor de tension. La ecuacion de la "recta" final corresponde a la solucion de un elemento de orden cero, obviamente hay potenciometros logaritmicos con los cuales la curva de relacion sera muy diferente a las obtenidas.

Normalmente, para relacionar la linealidad del ADC se toman varias muestras del mismo valor, es decir, se deja fijo el voltaje a medir y se toman unas 100 muestras de ese valor fijo, luego se le hace el estudio estadistico (calibracion estatica).

Si se varia el potencial por medio de un elemento fisico (un potenciometro) ya estan involucrados al menos dos parametros ... uno: la linealidad del ADC y dos: la funcion de trensferencia del potencimetro, seria necesario hacer una calibracion estatica y una calibracion dinamica.

Por otro lado preguntar si cada pic tendrá su linealización particular (creo que si), o si la de Nocturno serviria para todos los pic de ese modelo.

No es al PIC a quien se le saca la curva en este caso, si no al elemento que se encarga de hacer la division de tension.

Saludos
Título: Re: ¿Qué función genera este resultado?
Publicado por: Nocturno en 01 de Noviembre de 2008, 13:07:07
¿Y porqué hay esa diferencia?, si es una recta y tienen la misma pendiente la diferencia debería ser lineal en todo el recorrido.
Título: Re: ¿Qué función genera este resultado?
Publicado por: Gonzalo_BlackHawk en 01 de Noviembre de 2008, 13:31:00
Esa deformación de la curva no me gusta para nada y no tendría porque hacerla, puede que halla alguna cuestión en el circuito acondicionador de la señal o bien en la configuracion misma del ADC, no tuve tiempo de revisar el circuito pero yo nunca obtuve semejante función de respuesta de un acondicionador lineal asi que en mi opinión yo revisaría el circuito.

No es al PIC a quien se le saca la curva en este caso, si no al elemento que se encarga de hacer la division de tension.

En realidad esta linealizando las dos cosas, el ADC y el circuito divisor de tensión. Manolo, podrias probar de medir los valores de tensión a la salida de la fuente y a su vez medirlo en la entrada del ADC, y hacer una gráfica con ambos valores, de esta forma si la deformación a la curva sigue apareciendo es evidente que la alinealidad esta en el circuito acondicionador y no en el ADC.

Por otro lado preguntar si cada pic tendrá su linealización particular (creo que si), o si la de Nocturno serviria para todos los pic de ese modelo.

Cuando tengo que hilar fino en precisión y exactitud, yo personalmente opto por linearizar y corregir cada PIC que utilizo, asi sean del mismo modelo, pues existen diferencias inherentes al proceso de fabricación, al modo de operación del ADC y al ambiente bajo el cual trabaja.

Título: Re: ¿Qué función genera este resultado?
Publicado por: MLO__ en 01 de Noviembre de 2008, 13:52:12
¿Y porqué hay esa diferencia?, si es una recta y tienen la misma pendiente la diferencia debería ser lineal en todo el recorrido.

En teoria deberia comportarse linelamente durante todo el recorrido del potenciometro, pero en teoria  :D, hay otros factores que aparecen como el juego del potenciometro u otro factor de fabricacion que hace que en la practica no se vea igual.

Gonzalo, cuando hago la linealizacion del elemento divisor de tension estoy confiando en los parametros de linealizacion del ADC  :? pero es obvio que la curva de respuesta lleva los dos errores :-) , pero claro, si ya se trata de hilar fino, hay que hacer lo respectivo con el ADC tal como tu dices, pero obviamente esto no ayuda a la produccion en serie de los productos.

Saludos
Título: Re: ¿Qué función genera este resultado?
Publicado por: micro_pepe en 01 de Noviembre de 2008, 17:08:11
Despues de leer las respuestas, se me ocurre pensar si se podria mejorar la linealidad del divisor de voltaje de la fuente, usando un operacional mejor que el LM324.

La fuente de valdorre ( http://www.todopic.com.ar/foros/index.php?topic=18804.0 ) está basada en una fuente de ELEKTOR, y esa fuente utiliza un operacional con mejores caracteristicas que el LM324.

Un saludo.
Título: Re: ¿Qué función genera este resultado?
Publicado por: pablomanieri en 01 de Noviembre de 2008, 18:40:35
En las hojas de datos de microchip aconsejan que la impedancia de entrada al ADC del pic no sea superior a cierto valor, creo que es 2,5k o en el orden. Has tenido en cuenta esto?
Título: Re: ¿Qué función genera este resultado?
Publicado por: micro_pepe en 01 de Noviembre de 2008, 19:06:24
En las hojas de datos de microchip aconsejan que la impedancia de entrada al ADC del pic no sea superior a cierto valor, creo que es 2,5k o en el orden. Has tenido en cuenta esto?

Efectivamente lo he tenido en cuenta, mirando el esquema de valdorre, la clave de la impedancia está en R20. Esta es de 10K, yo la puse de 1K, y por consiguiente R21=100 y R22=3K9. De esta manera la impedancia es de 1K a la entrada del ADC. Pero a pesar de esto, no noté que mejorara la linealidad.

Se me ocurre pensar que quizas al aumentar el voltaje de salida, y por lo tanto la caida de voltaje en las resistencias citadas, estas se calienten un poco y varie su valor. Si encontrase resistencias de 0.5W, o de esas de factor de temperatura cero lo podria comprobar.

Un saludo.

Pd: Efectivamente la alinealidad está en el divisor, lo he comprobado tomando unas cuantas medidas de voltaje en la salida de la fuente, y en la entrada del ADC, y a medida que aumenta el voltaje de salida el factor de división es menor.
Título: Re: ¿Qué función genera este resultado?
Publicado por: micro_pepe en 04 de Noviembre de 2008, 17:23:35
Despues de leer las respuestas, se me ocurre pensar si se podria mejorar la linealidad del divisor de voltaje de la fuente, usando un operacional mejor que el LM324.

Efectivamente con un operacional de bajo offset mejora mucho, tan solo existe una diferencia de +/-30mv aproximadamente.

He usado un MC33274  ( http://www.spelektroniikka.fi/kuvat/mc33272.pdf )

Un saludo.