Autor Tema: Escalar voltajes en el ADC  (Leído 9884 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Escalar voltajes en el ADC
« en: 28 de Octubre de 2008, 23:16:21 »
Hola amigos, como están?, me disculpan la ausencia, pero es que he estado trabajando en unos proyectos que no me ha dejado tiempo pero para nada.... Precisamente en uno de esos proyectos se me ha presentado una cuestión que la verdad ya no encuentro como resoolver, despues de haber pensado mil y una formas, a ver si alguien se le ocurre una idea. Estoy trabajando con nuestro amigo el 18F4550, con C... La cuestión es que necesito escalar unos valores sin perder resolución, me explico... Por el conversor analógico dígital, me esta entrando un voltaje comprendido en rangos de 2.17 y 3.22 V, no como normalmente lo vemos de 0 a 5V. La cuestión es que trato de hacer que el conversor, me vea ese 2.17 como 0 tanto en decimal como en binario, y el 3.22 como 255, ya que la resolución es de 8 bits... He intentado formulas, aproximaciones, de todo, pero no he logrado nada ya que la resolución se me va a tierra, es decir si se dan cuenta, solo tengo menos de 60 números (esto por la resta de 2.17 y 3.22V en binario es decir, 110.64 para 2.17 y 164.17 para 3.22V), es decir, aproximadamente una resolución de 6 bits.... Mi última acción es usar una tabla equivalente, pero igual la resolución se me está yendo a pique.... Y lo peor de todo es que no puedo usar algún comnponente ajeno, todo ha de ser por software...

Como les dije he hecho muchas formulas, de unidades de ingenieria y nada, no logro mantener la resolución de 8 bits... Ya que por ejemplo 2.17 V me tienen que representar 4mA y 3.22 me tienen que representar 20mA, y pues ni maquillando el programa me sale... ya que los valores que me dan son saltos muy grandes... Por ejemplo si estoy en 2.17 y cambia a 2.20 pues el valor de corriente me cambia de 4mA a 10mA :shock:, algo muy insolito!!!! esto es en software y simulación.... Si alguien tiene una idea de como escalar sin perder resolución, bienvenida sea porque de verdad ya no doy más!" :z)

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Escalar voltajes en el ADC
« Respuesta #1 en: 28 de Octubre de 2008, 23:23:25 »
Se puede con VREFS?
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado jfh900

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Escalar voltajes en el ADC
« Respuesta #2 en: 28 de Octubre de 2008, 23:30:16 »
No acabo de entender el problema que tienes. Veamos haber si lo desliamos un poco. En primer lugar el ADC te mide tensión y no corriente, supongo que estarás haciendo algún tipo de conversión sobre una resistencia shunt y por lo tanto divide V/R para obtener la intensidad. En segundo lugar si tus voltajes van entre 2.17 y 3.22 no tienes que realizar nada, solo leer la entrada del ADC y multiplicar el valor obtenido por 5/255 (como float para conservar la parte decimal). La resolución en 8 bits es 5/255=0.0196 osease aproximadamente 0,02 voltios por salto del conversor, como casi son 0,02 voltios no podrás discriminar entre 2,33 y 2,34 ya que la precisión es de 0,02V. Si utilizas 10 bits la precisión será de 0,00488 voltios por salto, valor más que suficiente para lo que tu quieres realizar.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: Escalar voltajes en el ADC
« Respuesta #3 en: 29 de Octubre de 2008, 02:42:22 »
Hola Enigma, el problema que tu tienes es porque el micro necesita de una diferencia entre tensiones de referencias al menos de 1,8V alimentandolo con menos de 3V y de 3V si lo alimentas con 3V o más, osea:

dVRef= (VRef+) - (VRef-) >= 1,8V para Vcc<3V

dVRef= (VRef+) - (VRef-) >= 3V    para Vcc>=3V

según el índice del datasheet PIC18F2455/2550/4455/4550 en la página 393, Tabla 28-28: A/D CONVERTER CHARACTERISTICS , Parámetro A20 Reference Voltage Range.

Todo esto me pasó ya una vez por eso lo recuerdo, lo discutimos en este hilo: SALTO EN EL CONVERTIDOR A/D DE UN 16F877
Si bien el problema era con un 16F877, te recomiendo que veas esa referencia que te indiqué en el DS del 18f4550.

Por lo tanto te recomiendo implementes un amplificador para la señal y así no perder la resolución en ese rango, puedes ver el ejemplo aquí:Adaptación de sensor LM35 a PIC 16F877

También puede que tengas el problema discutido en este hilo: Conversor AD PIC16f877a y lcd problema resolución??? aunque me inclino por el problema del primer hilo.
Saludos!!

Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Escalar voltajes en el ADC
« Respuesta #4 en: 29 de Octubre de 2008, 16:54:03 »

Cita de: navaismo
Se puede con VREFS?

Umm Bueno, ya pense en esa opción... Pero eso implicariacolocar elementos externos para fijar los voltajes (como zeners, opamps, etc).... Y los Vref internos no me sirven de mucho puesto que no tiene os valores exactos que neceto...

Cita de: jfh900


No acabo de entender el problema que tienes.

Con respecto a lo de la corriente, si se que el ADC no mide corriente! jejeje, y la conversión la estoy hacieno a través de una formula genérica!!!!

Con respecto al la resolución de 10 bits, creeme lo intente, pero el micro, no discriminaba tampoco mucho entre los valores además de que me fluctuaba demasiado, ya qu le estoy restando resolución y para más ñapa voltaje...  Ya qe el pic, cuando ve los 2.17 en la entrada lo que está viendo en binario, es 110 y cuando observa el valor másimo que es 3.22 pues observa 164, imaginate, 164 menos 110, serian 54 valores :shock:, es decir menos de la mitad e la resolución de 8 bits.... Por eso es que te digo que lo saltos son enormes!!!!

Cita de: flacoclau

Por lo tanto te recomiendo implementes un amplificador para la señal y así no perder la resolución en ese rango,

Umm.... No puedo olocar componentes externos mi estimado... :(... aunque lo de la dferencia del vrf, pues si se me cumple, porque estoy alimentando con 4V ese seria vrf+ y vrf- pues es cero....


Yo más bien creo que tendré que hacer un sacrificio de resolución.... :(

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Escalar voltajes en el ADC
« Respuesta #5 en: 29 de Octubre de 2008, 17:38:06 »
Hola

Talvez ya hayas intentado algo así, pero lo escribo por si notas alguna diferencia entre tus cálculos y los míos.

Vref+ = 5V
Vref- = 0V
Resolución ADC 10 bits
Error de la medición ADC 1 LSb

El programa recibe la conversión binaria de 10 bits en binaria:

int16 binaria;

Despreciemos el último bit ya que es erróneo y oscila mucho; además no podemos filtrarlo usando componentes externos.

binaria=binaria>>1; //lo rota y desaparece el LSb

Nuestro ADC ya es de 9 bits.

Luego se deduce la ecuación que convierte a binario.

5V -> 2^9, 5V -> 512

2.17V -> 222bits
3.22 -> 329bits

222bits serán 4mA y 329 serán 20mA, entonces...

m= (20-4)mA / (329-222)bits = 0.149532 mA/bit

y=mx+b

20mA = (0.149532mA/bit) + b
b= -29.196028

Corriente = 0.159532mA/bit (binario) - 29.196028mA

Ejemplo...

Si llegan 2.22V al ADC y se convierten a 227bits.

Corriente = (0.149532)(227)-29.196028
Corriente = 4.747736mA

Si llegan 3.0V y se convierten a 307bits.

Corriente = (0.149532)(307) - 29.196028
Corriente = 16.71mA

La ecuación en c puede quedar:

float corriente;
corriente=(float)(0.149532)*(binario>>1)-29.196028;
« Última modificación: 29 de Octubre de 2008, 18:57:23 por migsantiago »

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: Escalar voltajes en el ADC
« Respuesta #6 en: 29 de Octubre de 2008, 17:40:39 »
Hola Enigma o note entendí o no me entendiste  :D

"me vea ese 2.17 como 0 tanto en decimal como en binario, y el 3.22 como 255,"

"porque estoy alimentando con 4V ese seria vrf+ y vrf- pues es cero..."

No entiendo hay un dato que no me cierra...


Santiago, con justificar a la izquierda ya te quedan 8 bits...
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Escalar voltajes en el ADC
« Respuesta #7 en: 29 de Octubre de 2008, 18:56:49 »
Santiago, con justificar a la izquierda ya te quedan 8 bits...

Sí, pero en ensamblador y configurando el adc. Yo recomiendo que haga la medición a 10 bits y rote un bit a la derecha para que tenga 9 bits y desprecie el décimo bit menos significativo que varía mucho en su circuito.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Escalar voltajes en el ADC
« Respuesta #8 en: 29 de Octubre de 2008, 19:03:05 »
Cual dato flacocau??

a ver me explico otra vez... a lo mejor soy yo que no me doy a entender... es que con tanto strees, y tantos calculos hechos ultimamamente ya mi manera de expresar está ificil..

El voltaje, de alimentación del pic es de 4 V, pero de otro circuito, vienen el voltaje comprendido en un rango de 2.17 y 3.22... Es decir, el otro circuito nunca mpieza de cero, es como si sucero fuera 2,17, es por eso que el pic siempre verá ese voltaje como minimo, el 2.17... No se si me explique está vez....=?

Migsantiago, si había pensado algo así, e incluso aplique una formula que invente allí, pero no me funciono, la diferencia con respecto a tu aporte es que yo no use el adc de 10 bits porque como dije antes pues me fluctuaban los valores, no se me ocurrio rotar el bit para hacerlo de 9 bits.... Voy a intentarlo, y también que tu estás tomando la alimentación de 5V, yo estoy alimentando con 4, por tanto ya no sería 512 sino más bien 409 aproximadamente...., en donde para 2,17 me daria 221 y para 3.22 me daria 329... si no estoy mal  :shock:... Pero igual, creo que la resolución aumenta un poco más con tu metodo si no estoy mal....

Cita de: Flacoclau
Santiago, con justificar a la izquierda ya te quedan 8 bits...

Creo que el tiene la idea de usar 9 bits y no 8... o me equivoco.... :?

Seguiré trabajando en esto, implementaré lo de 9 bits a ver.... Aunque ahorita estaba haciendo una gran tabla de 54 valores y estaba haciendo aproximaciones... pero la resolución con esta tabla está pata de perro!!! :(

Atte: Enigma... La llanerita de Guayana :-)
« Última modificación: 29 de Octubre de 2008, 19:19:39 por Enigma »
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Escalar voltajes en el ADC
« Respuesta #9 en: 29 de Octubre de 2008, 19:16:50 »
Trata de mejorar tu circuito de entrada al pic porque si te fluctuan los valores es porque la entrada al pic viene muy ruidosa. Si muestreas a baja velocidad digamos 1Hz pued podria mejorarte si colcaras un filtro pasa bajo eso hará que la señal que lee el pic sea mas estable, revisa esa señal con osciloscopio si pudieras.

Javicho.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Escalar voltajes en el ADC
« Respuesta #10 en: 29 de Octubre de 2008, 19:29:13 »
Lo que pasa es que tratar de estabilizarlo involucra como dices colocar una red rc, y eso sería añadir más componentes al circuito cuestión que no puedo hacer, porque eso seria un consumo de corriente más, y bueno ya la corriente que tengo es la necesaria para alimentar el circuito, no puedo tomar más... :(

Es como tratar de hacer un cohete con solo chatarra! tengo lo que tngo y solo puedo acudir a la programación... :S

Atte: Enigma... La llanerita de Guayana
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Escalar voltajes en el ADC
« Respuesta #11 en: 29 de Octubre de 2008, 19:38:47 »
Migsantiago, si había pensado algo así, e incluso aplique una formula que invente allí, pero no me funciono, la diferencia con respecto a tu aporte es que yo no use el adc de 10 bits porque como dije antes pues me fluctuaban los valores, no se me ocurrio rotar el bit para hacerlo de 9 bits.... Voy a intentarlo, y también que tu estás tomando la alimentación de 5V, yo estoy alimentando con 4, por tanto ya no sería 512 sino más bien 409 aproximadamente...., en donde para 2,17 me daria 221 y para 3.22 me daria 329... si no estoy mal  :shock:... Pero igual, creo que la resolución aumenta un poco más con tu metodo si no estoy mal....

Aunque tengas como Vref+ a 4V, la resolución del ADC será siempre de 2^9=512, el que utilices solo un área del adc para tu medición no implica que la resolución del adc cambie.

Reajustando los valores a 4V la fórmula para tu cálculo queda así...

4V -> 2^9
4V -> 512

2.17V -> 277bits
3.22 -> 412bits

Lo anterior fue calculado por regla de 3.

277bits serán 4mA y 412 serán 20mA, entonces...

m= (20-4)mA / (412-277)bits = 0.118518 mA/bit

y=mx+b

20mA = (0.118518mA/bit)(412) + b
b= -28.829629

Corriente = 0.118518mA/bit (binario) - 28.829629

Ejemplo...

Si llegan 2.22V al ADC y se convierten a 284bits...

2.22*512/4= 284 bits

Corriente = (0.118518)(284)-28.829629
Corriente = 4.829483mA

El nuevo código a emplear es:

float corriente;
corriente=(float)(0.118518)*(binario>>1)-28.829629;


Debes resolver parte de la conversión usando la ecuación de la recta, no debes usar reglas de 3 ni ajustar la referencia positiva a 3.22, esa siempre será 4V.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Escalar voltajes en el ADC
« Respuesta #12 en: 29 de Octubre de 2008, 21:06:04 »
Migsantiago, si tienes razón, pero te digo que los resultados cambian, y no entiendo porque, ya que la difrenecia no es tan grande entre ambos voltajes y los calculos entre ambos... Mirá estas pruebas...

Esto es sacando 4V con resolución en 409, en el minimo voltaje, es decir en 2.17V



Fijate que el valor de la corriente si es aproximado a 4mA, con poca resolución pero mucho mejor de la que yo tenia con la tabla....


Esto es sacando 4V con resolución en 409, en el maximo voltaje, es decir en 3.22V



El valor de corriente aquí es aproximadamente 20mA.

Esto es sacando 4V con resolución en 512, en el minimo voltaje, es decir en 2.17V




Fijate en el valor de corriente... Negativo..... :?


Esto es sacando 4V con resolución en 512, en el maximo voltaje, es decir en 3.22V



Y mira la corriente en el valor máximo... solo lega hasta 10...mA


Y el código está bien...



Que opinas al respecto....?

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado jfh900

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Escalar voltajes en el ADC
« Respuesta #13 en: 29 de Octubre de 2008, 22:40:17 »
Hola Enigma.

¿Por qué no pones la simulación y el programa para que lo podamos ejecutar y ver el problema?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Escalar voltajes en el ADC
« Respuesta #14 en: 30 de Octubre de 2008, 00:59:38 »
Que opinas al respecto....?

Atte: Enigma... La llanerita de Guayana :-)

En ningún lado veo la alimentación del pic18. Proteus conecta automáticamente el pic a 5V. Debes dar click derecho al pic18 y ponerle que NO oculte los pines Vdd y Vss. Luego a esos pines conectas 4V y 0V respectivamente.

La conversión adc en la simulación que publicas se está haciendo con Vref+ a 5V, y no a 4V como debe ser... hasta donde recuerdo de cuando yo simulaba en proteus.

Edito: Se me olvidó decirte que por si las dudas no quites el casting (float) en la conversión.