Autor Tema: Aumentar resolución del ADC  (Leído 12880 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Aumentar resolución del ADC
« en: 02 de Febrero de 2008, 23:38:30 »
Saludos, tengo una fuente variable de 1.2v hasta 30VDC de la cual quiero mostrar el voltaje en un LCD, tengo un PIC16F873 pero quisiera mejorar mi resolución.

Mi idea es esta: coloco un divisor de tensión de ahi al ADC del pic tal que cuando tenga 30v en la entrada del pic tenga 5v (asumiendo Vref=5v) entonces el valor digital obtenido será 1023, luego hago 1023 x 3 = 3069 y en el LCD muestro 30.69v pero cuando el valor digital sea 1022 esto al multiplicarlo por 3 tendré: 1022 x 3 = 3066 y en el LCD aparecerá 30.66v y para 1021 aparecerá 30.63 osea va en pasos de 30mv.

Como puedo mejorar esto a fin de que vaya a pasos de 10mV?

Javicho.

Desconectado Thanathos

  • PIC10
  • *
  • Mensajes: 10
Re: Aumentar resolución del ADC
« Respuesta #1 en: 03 de Febrero de 2008, 00:54:51 »
Hola amigo que tal...
He leido tu mensaje muy atentamente y mi opinin es la siguiente...
>Primero que todo lo del divisor de tension me parece excelente, de hecho para aplicaciones sencillas como un multimetro lo  uso siempre. Ya si es algo de instrumentacion el cuento cambia...

>Pregunta: ¿Porque mutiplicas por 3/100?, deberias multiplicar por 30/1023 y para 1023 te daria 30V exacto... Cuanto tengo que hacer este tipo de cambios de escala, utilizo el tipo de dato FLOAT y funciona de lujo...  tranquilo para el CCS exa multiplicacion en como flotante es algo sencillo, luego lo mando al LCD con algo asi como printf(lcd_putc,"Formato",VariableFloat)... aunque sin duda si fuese en ASM el cuento es otro...

>En cuanto a lo de la resolucion, Resolución = Vmax/[2^n - 1].
        n = # bits del ADC.
        Vmax = Voltaje a la entrada del convertidor para obtener una conversión máxima (todas las salidas son "1").
Asi que como puedes ver este es un valor constante ya que n=cte y Vmax=30...
Pero no os preocupeis  :)...he desarrollado un metodo para mejorar esto,... :-/, lo busco y cuanto antes lo subo... Solo tiene un problema, se apodera de 2 a 4 pines adicionales...

Mañana nos vemos...

Un saludo desde colombia...

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Aumentar resolución del ADC
« Respuesta #2 en: 03 de Febrero de 2008, 01:17:26 »
Hola: bueno multiplico por 3 porque para el maximo valor digital obtenido (1023) podré mostrar en el LCD (como máximo) 1023 x 3 = 30.69V es decir si por X motivos la fuente entregase "un poquitito mas" de voltaje entonces el pic podrá mostrar hasta un máximo de 30.69V (y ademas porque en software es muy simple multiplicar el valor digital por 3).

Estuve viendo mi multimetro y éste muestra voltajes desde 0 a 200mV con pasos de 0.1mV es como si el conversor AD que tiene puediera reconocer 2000 valores digitales y me parece que solo tiene un ICL de apenas 8 bits de resolución nose como lo hacen. Luego en la escala de 20V va en pasos de 10mV osea desde 2.00V hasta 20.00V.

Comprendo que al cambiar de escala internamente se seleccionan diferentes resistencias en el amplificador o algo asi para que varie su ganancia de entrada al conversor o tal vez a la misma vez tambien varian su voltaje de referencia, no lo se. Pero igual en cualquier escala siempre muestra 4 digitos y la coma decimal va cambiando de posición.

Javicho.

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Aumentar resolución del ADC
« Respuesta #3 en: 04 de Febrero de 2008, 22:50:41 »
Alguien sabe como podria aumentar por software o hardware los 10bits del ADC del 16F873 a "12 bits"?

Javicho.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Aumentar resolución del ADC
« Respuesta #4 en: 04 de Febrero de 2008, 23:24:15 »
Es un engaña-pichanga, pero lo que puedes hacer es justificar el resultado a la izquierda, de esa forma tu resultado variara entre 0 y 65472.
Te da un resultado en lo que yo llamo Pseudo 16 bits... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Aumentar resolución del ADC
« Respuesta #5 en: 04 de Febrero de 2008, 23:58:52 »
Como dices que dices?

Si coloco un potenciometro a la entrada analoga e incremento el voltaje gradualmente obtendré en los registros ADRESH/ADRESL justificando a la derecha:
00000000 00000000 = 0
00000000 00000001 = 1
00000000 00000010 = 2
00000000 00000011 = 3
00000000 00000100 = 4 ...
00000011 11111111 = 1023

Si justifico a la izquierda no pasaria esto?:
00000000 00000000 = 0
00000000 01000000 = 64 <- al haber un cambio de 1 bit no pasa a 64?
00000000 10000000 = 128
00000000 11000000 = 192
00000001 00000000 = 256 ...
11111111 11000000 = 65472

A menos que en la formula de resolución (+Vref - Vref-)/(2^N-1) ahora se considere a N=16 con esto se tendria cambios por bit de 76uV (con Vref=5v) ... uhmmmmm

Me podrias explicar esto? o es que te he entendido mal.

Javicho.

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Aumentar resolución del ADC
« Respuesta #6 en: 05 de Febrero de 2008, 13:04:47 »
Pues has hecho mal los cálculos, porque la resolución de este sistema no es la que planteas, veamos las ecuaciones que debes utilizar para dar con la solución correcta:

Primero tienes un divisor de tensión que te da 5V, cuando hay 30V en la salida de la fuente y 0V cuando hay 0V en la salida de la fuente (suponiendo que no has utilizado una referencia variable)

Ahora, este divisor tiene un factor de atenuación de 5, lo que implica que el resultado obtenido en la medición dentro del PIC tendrás que multiplicarlo por 6. veamos una fórmula:
Sea K el valor de la ganancia para obtener Vo, el valor de tensión de la fuente y 5V, la tensión que se tendrá a la salida del acondicionador de señal (en este caso un divisor de tensión), tenemos que 5V/Vo=1/K => K=6


Ahora veamos que ocurre con el conversor:
Tenemos que la resolución es de 10bits, luego tenemos 1024 posibles valores en bits.
Tenemos que pondremos a la entrada del conversor una tensión entre 0 y 5V, o mejor aún, entre 0 y 5000mV.

Sea S la sensibilidad del conversor, tenemos que:
S=MSB/ΔV [bit/mV] =1024/5000 = 0.2048bit/mV o lo que es lo mismo
S=4,8828125 mV/bit, no 30mV como habías plantado al principio.

Ahora a calcular:
Vo=(K*S*ADRESULT)/1000

Donde:
Vo es la tensión de la fuente
K=6
S=4,8828125mV/bit
ADRESULT es el resultado de la conversión, un entero de 16 bits que obtienes como resultado de la conversión y que viene expresado en bits.

Se divide entre 1000, para llevar de mV a V

Comprobemos si tenemos los datos bien caluculados:
Si obtenemos 1023, el valor más alto de ADRESULT, cual es el valor de Vo
Vo=(6*4,8828125*1023)/1000=29.97V

Ahora para DRESULT=512
Vo=(6*4,8828125*512)/1000=15V

Ahora para DRESULT=256
Vo=(6*4,8828125*256)/1000=7.5V


Ahora para DRESULT=128
Vo=(6*4,8828125*128)/1000=3.75V


Este es el método que te recomiendo utilices.

Saludos
Reinier

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Aumentar resolución del ADC
« Respuesta #7 en: 05 de Febrero de 2008, 16:28:33 »
Hola Reinier, los 30mV me referia a la resolución que se mostraria en un LCD por ejemplo, yo decia ... si tengo:

1023 x3 = 30.69v (en el LCD)
1022 x3 = 30.66v (en el LCD)
1021 x3 = 30.63v (en el LCD)
1020 x3 = 30.60v (en el LCD)

con lo cual se ve que los pasos van de 30mV en 30mV, no puse mis formulas ni ecuaciones para abreviar el texto lo que no implica que las desconozca.

Ahora si nos referimos a tus formulas, obtendremos:

Vo=(6*4,8828125*1023)/1000=29.97V
Vo=(6*4,8828125*1022)/1000=29.94V
Vo=(6*4,8828125*1021)/1000=29.91V
Vo=(6*4,8828125*1020)/1000=29.88V

como puedes ver con tus propias formulas tambien obtenemos pasos de 30mV en 30mV, a esto es a lo que yo me referia, por tanto mis calculos siempre estuvieron bien.

Edison.

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Aumentar resolución del ADC
« Respuesta #8 en: 05 de Febrero de 2008, 17:03:50 »
Humm, ahora si que entiendo.

Bueno, la mejor respuesta que tengo para tí es que uses un conversor de más resolución de bits, o que utilices una técnica que ahora no puedo explicarte en detalle, pero que consiste en utilizar las VREF+ y VREF- del PIC para ir acotando el valor de tensión que colocas a la entrada del ADC.

Hay algunos multímetros que usan esta técnia. básicamente consiste en utilizar referencias de tensión con control digital y comparadores para ir ajustando las tensiones de referencia en función de la tensión de entrada que pones en el ADC. Es un mecanismo que baja los costos de grandes series de productos y que permite medir diferencias de tensión muy grandes y de valores desconocidos.

En tu caso te recomiendo que escojas otro conversor, con mejor resolución, creo que uno de 12 bits vendrá muy bien porque te dará una resolución total de 7.32mV/bit. El que tienes ahora te da una resolución total del canal de 29.30mV/bit. Puesto que podrás poner a punto tu sistema muy rápido, la otra técnica es más barata para grandes series y tiene otras ventajas, pero lleva un trabajo grande.

Saludos
Reinier

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Aumentar resolución del ADC
« Respuesta #9 en: 05 de Febrero de 2008, 17:27:03 »
Hola Reinier:

Estaria muy agradecido en la medida de tu tiempo si me explicaras de esas tecnicas con un poco mas de detalles, por lo pronto ya he podido obtener 11bits de resolución:

Hago Vref=2.5v, ahora con ayuda de un mux hago Vref+=2.5v y Vref-=0 y leo mi entrada desde 0 hasta 2.5v al llegar aqui tendré el valor maximo 1023 ahora con el mux cambio a Vref+=5v y Vref-=2.5v y sigo leyendo mi entrada esta vez desde 2.5v hasta 5v en este tramo obtengo 1024 valores que sumados con los 1024 valores obtenidos entre 0 y 2.5v de entrada tengo que mi entrada registro 2048 valores entre 0 y 5v, esto significa que mi resolución fue de 11 bits.

Debe haber otra mejor forma de mejorar la resolución ojalá alguien pueda darme una idea para obtener 12bits de resolución. Estaba pensando también en hacer la conversión a mano habilitando un timer para contar pulsos que ingresararian a un opamp y este compara con la entrada aunque no la tengo muy claro a ver si alguien me informa un poco de esto. Gracias.

Javicho.

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Aumentar resolución del ADC
« Respuesta #10 en: 05 de Febrero de 2008, 17:32:19 »
Esa está perfecta, y es en esencia lo que quería explicarte. Hay varios métodos, pero el que ustilizas es perfectamente válido. Sólo que necesitarías aumentar un poco más las posibles fuentes de referencia, de modo que obtengas los 12 bits que te comentaba o más que eso.

saludos
Reinier

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Aumentar resolución del ADC
« Respuesta #11 en: 05 de Febrero de 2008, 17:42:32 »
Solo me falta un bit mas porque a fin de cuentas lo que quiero es que en el LCD aparezca:

00.00 v
00.01 v
00.02 v ...
04.99 v
05.00 v
05.01 v ...
29.98 v
29.99 v
30.00 v

Si te das cuenta el pic tendria que registrar desde 0000 hasta 3000 un total de 3001 valores y:
con 10bits obtengo solo 1024 valores
con 11bits obtengo solo 2048 valores
pero con 12bits obtengo 4096 valores que esta dentro de los 3001 valores que necesitaba incluso hasta se adaptaria para hacer una fuente de hasta 40.95V (digamos 40V).

Esperaré alguna mano que me oriente a obtener 1 bit mas (12bits) o tal vez tendré que hacer la conversión a mano.

Javicho.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Aumentar resolución del ADC
« Respuesta #12 en: 05 de Febrero de 2008, 19:03:06 »
Yo uso un conversor externo de 12 bits, con bus SPI.
Uso el MCP3204 de Microchip.

Aunque hay PICs de la serie 16 o 18 que tienen varios AD de 12 bits internos...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Aumentar resolución del ADC
« Respuesta #13 en: 05 de Febrero de 2008, 23:05:41 »
Acabo de ver el datasheet del MCP3204 y se ve muy bien, ojalá que lo pueda adquirir por acá (cosa que dudo muchisimo porque cosas asi no traen por aqui).

Igual esperaré alguna otra idea para ampliar la resolución de 10bits a 12bits del adc del pic.

Javicho.

Desconectado andros

  • PIC16
  • ***
  • Mensajes: 111
Re: Aumentar resolución del ADC
« Respuesta #14 en: 08 de Febrero de 2008, 14:19:12 »
Amigo Javicho:

Analog Devices también tiene ADC de 12, 16 bits, con entradas SPI o I2C.

Lo que estás haciendo sirve para un conversor ideal de 8 bits..., sin embargo la realidad dicta otra cosa..., revisa una variable llamada ENOB, con esta probablemente verás que la resolución de tu conversor equivalga a un ADC ideal de 7 bits..., son algunas malas noticias..., por ello es recomendable usar uno externo...

Sin embargo, una luz se abre, esta técnica la usan en telefonía para mejorar la calidad de la señal de voz y al mismo tiempo ahorrar ancho de banda (es decir, con 8 bits obtienen una señal de mayor resolución. pero de todas formas envían los mismo 8 bits, con lo que se ahorran ancho de banda y el poco espacio que uno tiene en memoria en caso de guardar los datos), a esta técnica se le llama COMPANSIÓN (COMPANDER, algo así como compresión).

busca ley u (miu) o ley A (si no estoy mal), se puede hacer de dos formas:

Análoga: usando un amplificador logarítmico, ¿Que hace esto?, pues bien, amplifica en mayor medida las señales pequeñas, es decir, si tu rango es de 1,2V a 36..., digamos que los valores cercanos a 1,2 los amplifica mucho más que los cercanos a 36.., eso sí, siguiendo la función logarítmica.., que hace esto..., pues le asigna mayor número de bits a las señales pequeñas que a las grandes!!!!, porque es bueno amplificar más las señales pequeñas?, porque en estas la relación Señal Ruido es menor, si se amplifica la señal (sin amplificar el ruido) esta relación se hace más grande, y por tanto mayor resolución. MOTOROLA TIENE UNA AMPLIA GAMA DE ESTOS AMPLIFICADORES!. Que hace en telefonía?, cuando reciben la señal la EXPANDEN con un amplificador EXPANSOR (EXPANDER), en tu caso te tocaría expandir la señal digitalmente.... (me imagino).

Digital: Es usando tablas, muy buena, sin embargo no la tengo a mano..., vamos a ver si la recupero entre todos esos documentos en el PC (adelanto, no la he usado). Pero esto me anima a experimentar...

Alejados de la compansión, otra alternativa es usando varias escalas, se me ocurre un amplificador de instrumentación como el AD620, la escala se "setea" con solo una resistencia, ante esto puedes usar un multiplexor análogo (ojo con la resistencia interna del multiplexor análogo) para la selección de las escalas (esta si la usé, y me funcionó de perlasssss!!!!!!!!)...., imagino que se pueden combinar técnicas, la de las referencias (muy buena), con esta...

No sé que te parece, en términos experimentales me parece muy interesante lo que estás haciendo, hasta me dan ganas de ponerme en estas....., jaja  8)!

Exitos viejo men!!, saludos de Colombia.

Andros.
« Última modificación: 08 de Febrero de 2008, 14:35:40 por andros »
Andros!