TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: alexiel en 19 de Mayo de 2010, 23:11:12

Título: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 19 de Mayo de 2010, 23:11:12
Hola señores del foro.
He tenido inconvenientes con el modulo ADC del dspic33fj64gp802, y he leido de muchos problemas que se han tenido con el ADC y se han solucionado en este foro.
Mi problema es el siguiente:
Necesito tomar información de señales acústicas captadas con un micrófono, ésta señal es amplificada y pasada por un filtro pasabanda (conformado por un filtro pasa alto en serie con un filtro pasa bajo), circuito adjuntado con nombre filtro activo. La señal filtrada se pasa por el circuito adjuntado con el nombre sujetador, para evitar que la señal pase del nivel permitido por el ADC.
 El problema que tuve al principio fue que se perdían muchos datos, me daba cuenta de esto porque cuando utilizo el modulo ADC, los datos que se digitalizan se envían serialmente por el modulo UART hacia el computador y los grafico en matlab, de antemano comento que el modulo UART está bien configurado porque lo he utilizado muchas veces para este fin. De muchas pruebas realizadas y leyendo en las especificaciones eléctricas del Dspic, encontré que si la resistencia total vista por el ADC pasa de los 10K, la conversión puede verse afectada, donde la solución es poner a la entrada un condensador de 0.1uF.
Coloqué el condensador mencionado y todavía seguía perdiéndose datos, aumenté el valor a 4.7uF y el ADC comenzó a funcionar correctamente, pero el problema de esto es que la señal se atenúa mucho.
Señores del foro, después de comentar todo esto, quisiera preguntarles: Los circuitos que propongo (adjuntados) para acondicionar la señal al modulo ADC, no son los adecuados?. De antemano agradezco por la colaboración brindada.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 20 de Mayo de 2010, 10:41:11
Hola, cuando colocas un capacitor a la entrada del ADC, ¿lo conectas entre la señal y el pin ADC o lo conectas entre el pin ADC y tierra?

En tu circuito no veo la etapa en donde monta la señal del micrófono en una componente DC para que sea medida por el ADC, ¿el ADC del dsPIC tolera señales bipolares?
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 20 de Mayo de 2010, 11:25:56
Hola, cuando colocas un capacitor a la entrada del ADC, ¿lo conectas entre la señal y el pin ADC o lo conectas entre el pin ADC y tierra?
Hola Santiago, el capacitor que recomiendan lo puse entre el pin ADC y tierra. Tomado del datasheet: Section 16. Analog-to-Digital Converter (ADC) dsPIC33F/PIC24H Family Reference Manual referencia DS70183B en la seccion 16.20 DESIGN TIPS, que dice textualmente:
2. Often the source impedance of the analog signal is high (greater than 10 kΩ), so the current drawn from the source to charge the sample capacitor can affect accuracy. If the input signal does not change too quickly, try putting a 0.1 μF capacitor on the analog input. This capacitor charges to the analog voltage being sampled and supplies the instantaneous current needed to charge the 4.4 pF internal holding capacitor.

En tu circuito no veo la etapa en donde monta la señal del micrófono en una componente DC para que sea medida por el ADC, ¿el ADC del dsPIC tolera señales bipolares?
La señal filtrada va al circuito sujetador, grafico adjuntado con nombre sujetador. Las dos resistencias de 10K ohmios (R5 y R6) sujetan la señal a la mitad de VDD/2, siendo VDD la alimentación del dspic en este caso 3.3V. No el dspic que utilizo no tolera señales bipolares. Y el max voltaje que tolera por el ADC es 3.6V.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: Suky en 20 de Mayo de 2010, 12:15:20
Buenas, no le falata una resistencia del lado del capacitor al sujetador para que adecue los niveles correctamente? Fuera de eso, a que velocidad estas muestreando? Porque como haces para tomar la muestra y enviar por UART a la PC?  :?


Saludos!
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 20 de Mayo de 2010, 12:17:44
Hola Santiago, el capacitor que recomiendan lo puse entre el pin ADC y tierra. Tomado del datasheet:

Section 16. Analog-to-Digital Converter (ADC) dsPIC33F/PIC24H Family Reference Manual referencia DS70183B en la seccion 16.20 DESIGN TIPS, que dice textualmente:

2. Often the source impedance of the analog signal is high (greater than 10 kΩ), so the current drawn from the source to charge the sample capacitor can affect accuracy. If the input signal does not change too quickly, try putting a 0.1 μF capacitor on the analog input. This capacitor charges to the analog voltage being sampled and supplies the instantaneous current needed to charge the 4.4 pF internal holding capacitor.

La señal filtrada va al circuito sujetador, grafico adjuntado con nombre sujetador. Las dos resistencias de 10K ohmios (R5 y R6) sujetan la señal a la mitad de VDD/2, siendo VDD la alimentación del dspic en este caso 3.3V. No el dspic que utilizo no tolera señales bipolares. Y el max voltaje que tolera por el ADC es 3.6V.

Ten cuidado. El capacitor de 0.1uF entre el ADC y tierra funge como filtro pasa bajas. La sección de la appnote que pones dice explícitamente: "If the input signal does not change too quickly". Una señal de audio va de 20Hz a 20kHz y el capacitor de 0.1uF está atenuando la parte baja del espectro de frecuencia.

Sobre las 2 resistencias de 10K, no sé si realmente conviertan la señal a una polarizada positivamente. Pero si te funciona, no hay problema.  :mrgreen: Si no te funciona, prueba con un amplificador sumador que sume 1.65V a la señal.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 20 de Mayo de 2010, 12:41:36
Buenas, no le falata una resistencia del lado del capacitor al sujetador para que adecue los niveles correctamente?
Saludos!
Suky gracias por la respuesta. No te entiendo casi lo que me quieres decir. Al lado del condensador de valor 33uF. R5 y R6 de 10K ohmios las utilizo para sumar una componente de DC de valor de VDD/2, en este caso de 1.65V, a la señal filtrada para luego ingresarla al modulo ADC y los diodos Schottky para que la señal no supere los niveles permitidos por el ADC.

Fuera de eso, a que velocidad estas muestreando? Porque como haces para tomar la muestra y enviar por UART a la PC?  :?
Yo tomo primero unas 1000 muestras con el ADC y luego las envio al PC. El ADC lo configuré a una frecuencia de muestreo de 29090Hz.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 20 de Mayo de 2010, 13:00:41
Hola Santiago, excelente por el interés que muestras por el problema, Gracias. Si, es verdad lo del condensador actúa como filtro pasa-bajas. El filtro pasabanda que utilizo, lo configuré con frecuencia central de 4850Hz, porque es la frecuencia que analizo, el paso de banda va desde los 3Khz hasta los 6Khz. Pero al subir el condensador de valor 0.1uF a 4.7uF el ADC dejaba de perder datos, porque si ponía al ADC a recoger 500 datos y después el Dspic me los envía al PC por el UART, llegaban todos y los graficaba en Matlab, sin problemas. Pero se me atenuaba la señal MUCHO, de 1V de amplitud de la señal me la baja a 35mV, que horror. Además los calculos que luego hago con la señal dependen drásticamente de la amplitud, pero no la puedo amplificar por software porque altero la señal.
Con referente a lo de sujetar la señal a un nivel DC, yo siempre lo he hecho con resistencias, no sé que tan fiable u optimo sea. Que sugerencias me pueden dar para esto y si los diodos Schottky si son los correctos para el uso que les doy que es el de recortar la señal si se pasa de 3.3V y se baja de 0V. O hay otras mejores opciones.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 20 de Mayo de 2010, 13:16:39
Si tienes problemas por acoplamiento de impedancia a la entrada del ADC sólo coloca un seguidor de voltaje después de los diodos zener. No coloques ningún capacitor en la entrada ADC porque estarás atenuando toda frecuencia que rebase los 200Hz aproximadamente.

Sobre sujetar la señal a un nivel de DC, como te mencionaba anteriormente, usa un sumador de voltaje hecho con amplificadores operacionales.

Un ejemplo de sumador de 1.65V es éste:

http://www.todopic.com.ar/foros/index.php?topic=19699.msg240561#msg240561

Sólo encárgate de agregar tu filtro pasa banda antes del sumador y del seguidor de voltaje.

Y si te es posible, usa un osciloscopio para corroborar que lo que estás transformando sea correcto.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 20 de Mayo de 2010, 14:00:36
Citar
Hola, probé el circuito de Jfmateos y modifiqué un par de cosas para adaptarlo al material que tengo a la mano y para el voltaje de 3.3V.
Funciona muy bien su circuito, monta la señal alterna del micrófono en 1.65V.

http://img192.imageshack.us/img192/4965/abcd0002aq.jpg

http://img709.imageshack.us/img709/2004/abcd0002mh.jpg

Hola Santiago trato de abrir estos dos links, los que tu me recomiendas y sale error que no se puede encontrar el servidor. Si hay otra forma de ver los links o si estan en otro lado, por favor hágamelo saber.
Pero si es la conclusión que he sacado que el problema es de acople de impedancias..
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 20 de Mayo de 2010, 14:13:18
Aquí los tienes.

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30727.0;attach=12090)
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 20 de Mayo de 2010, 16:22:04
Gracias por la información. Voy a probar el circuito haber como se comporta y estaré comentando mas adelante. :)
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 20 de Mayo de 2010, 23:29:35
Hola Santiago, probé el circuito.
La única modificación que le hice fue la resistencia de 470K se la cambié por 1K, porque no necesito amplificar la señal que viene del filtro porque ya lo está.
Funciona el circuito. Pero tengo una pregunta a usted le funciona como a mi. Es que la salida se satura muy rápido y lo máximo en amplitud es 1.8V, y la señal solo baja hasta 640mV. Le adjunto las imágenes con las señales, la amarilla es la entrada al circuito y la azul es la salida ya pasado por el sumador y por el seguidor de voltaje. Como se ve en la señal azul no pasa de 1.8V y por debajo solo baja a 640mV que no es tan critico. Lo critico es que solo sube la señal hasta 1.8V. La alimentación es de 3.3V. Cuando usted probó el circuito le funcionó igual??? Es que si se sujeta la señal a 1.65V solo llega hasta 1.8V, y de ahí en adelante lo recorta. Habría una forma de solucionar esto? :(
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 20 de Mayo de 2010, 23:38:14
No he probado la señal con osciloscopio cuando hice el circuito pero prácticamente lo que está pasando es que el voltaje está saturándose a 1.8V porque el amplificador operacional es lo máximo que da.

Idealmente, si uno alimenta el ampop a 3.3V, la salida debe ser de hasta 3.3V. En la práctica la salida es menor a 3.3V y en tu caso es de 1.8V.

Considerando eso se puede hacer lo siguiente...

- El voltaje de referencia del dsPIC en vez de operar a 3.3V para su ADC podría ajustarse a 2V para atrapar toda señal sin desperdiciar rango dinámico (aprovechar toda la escala de conversión del ADC)
- El sumador en vez de sumar 1.65V deberá sumar sólo 1.0V (la mitad de 2V)

Con estos cambios la señal no se saturará y cabrá perfectamente en la escala de conversión del ADC.

Voy a armar el circuito de nuevo para corregir esos errores que estás detectando. A ver si el fin de semana te paso una versión limpia. Si los comentarios de arriba funcionan, avísame porfas para tenerlos en cuenta.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: AKENAFAB en 21 de Mayo de 2010, 01:06:38
No les sirve un amplificador rail to rail para que entregue los 3.3v o lo más cercano a su alimentacion??
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 21 de Mayo de 2010, 12:33:15
No les sirve un amplificador rail to rail para que entregue los 3.3v o lo más cercano a su alimentacion??

Suena bien, ¿cuál propones para reemplazar al obsoleto LM324?  :mrgreen:
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: pablomanieri en 21 de Mayo de 2010, 13:11:29
Yo he usado el LMC6484 y anda muy bien, aunque cuesta alrededor de USD3. Y no se si se consigue fácilmente.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: AKENAFAB en 21 de Mayo de 2010, 13:16:00
http://www.national.com/cat/index.cgi?i=i//11

Aqui esta la lista :P surtance XD
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 21 de Mayo de 2010, 13:38:33
Yo he usado el LMC6484 y anda muy bien, aunque cuesta alrededor de USD3. Y no se si se consigue fácilmente.


Hola Pablo, ¿ese ampop opera con fuente unipolar?

Akena... te haría la misma pregunta pero son muchos los que pones  :D
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: pablomanieri en 21 de Mayo de 2010, 15:22:15
El lmc6484 es cuadruple, efectivamente opera con fuente unipolar y es rail-to-rail. Se puede alimenta con 3V hasta 15.5V
El lmc6482, tiene las mismas características pero es de 2 opamps por encapsulado
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: AKENAFAB en 21 de Mayo de 2010, 17:22:51
No recuerdo cual use.
XD
Pero lo escogi de esa lista , unos los puedes trabajas de las 2 formas , con funete simple o simetrica.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 21 de Mayo de 2010, 18:04:18
Suena excelente Pablo. Me gusta el ancho de banda de 1.5MHz y slew rate de 1.3V/us.

Akena, para la próxima compra Newarkense te encargaré uno de estos bichos  :-/
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: AKENAFAB en 21 de Mayo de 2010, 18:49:02
Sale
Anotado xD
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: STAI en 21 de Mayo de 2010, 20:00:19
El lmc6484 es cuadruple, efectivamente opera con fuente unipolar y es rail-to-rail. Se puede alimenta con 3V hasta 15.5V
El lmc6482, tiene las mismas características pero es de 2 opamps por encapsulado

Hola amigo Pablo, quisiera preguntarle si usted ha probado esos OAMP con señales de audio y alimentados con una sola fuente?  Pregunto porque aveces hay propuestas (muy sanas claro) pero no probadas que cuando uno las monta (luego de haber comprado los elementos en muchos casos) no funcionan, como le fue al compañero alexiel.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: AKENAFAB en 21 de Mayo de 2010, 20:39:29

Para audio uso el tl071 y tl072

Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: blackcat en 21 de Mayo de 2010, 23:01:22
Hola!

No entiendo bien que tipo de datos estás perdiendo ... como configuraste el ADC y como haces para tener muestras a una frecuencia de 29kHz.

Saludos!
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 22 de Mayo de 2010, 13:30:20
Hola, ya armé de nuevo el circuito de audio...

http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30727.0;attach=12090
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30727.0;attach=12090)

Y funciona bien con un sólo cambio, hay que modificar la resistencia de 10k inferior por un potenciómetro de 10k. Ese par de resistencias de 10k son las que suman los 1.65V (3.33V/2) a la señal de salida.

Considerando que el LM324 tiene una saturación en 2V, lo ideal es que la componente DC de la señal sea de 1V. Ese 1V se logra ajustando el potenciómetro que menciono.

Aquí un par de fotos.

http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30727.0;attach=12114
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30727.0;attach=12114)

Es una señal de 300Hz montada sobre una componente DC de 1V. La señal no sufre saturación ya que está dentro de la ventana de 2V. La línea punteada blanca indica 2.22V que es donde se satura mi LM324.

http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30727.0;attach=12116
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30727.0;attach=12116)

Esta foto es un ejemplo de saturación. Lo que graba es un aplauso a 10cm del micrófono electret.

El circuito es capaz de grabar voz sin saturación (20Hz a 4kHz), hice unas pruebas y no hubo problemas. Voy a hacer un nuevo circuito con el cambio del potenciómetro de 10k y agregaré un filtro pasa bajas de 4kHz. En cuanto termine se los paso.

Alexiel, mencionas que cambiaste la R de 470k por una de 1K. Si la señal se satura entonces debes atenuar todavía más la señal porque este circuito es para amplificar. Cuéntanos tus avances.

EDITO: Ya está el diagrama corregido en el otro tema, no lo pongo aquí porque está un poco off-topic.
http://www.todopic.com.ar/foros/index.php?topic=19699.msg256657#msg256657
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: STAI en 22 de Mayo de 2010, 15:38:29
Hola compañeros de la noble causa, vamos a salir de dudas con respecto a los OAMP rail-to-rail que algunos compañeros han propuesto, tengo en mis manos unos de Analog Devices AD8665, AD8054 y AD8027 que dicen serlo, ya hice el diseño de los PCBs para hacer el montaje, voy a pasarle ese material al compañero alexiel para que haga las pruebas y nos comente qué resultados obtuvo.  Considero que el tema de la entrada de señales de audio a los ADC de los micros y dsPIC debe quedar más claro.

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30727.0;attach=12121)
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30727.0;attach=12123)
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=30727.0;attach=12125)
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 24 de Mayo de 2010, 19:40:52
Hola a todos:
Gracias por el seguimiento que se le ha hecho a este tema.
Blackcat: Esta es la función que utilizo para configurar el módulo ADC, en modo automático tanto de sampleo como de conversión, hay pongo las formulas con la que me guío para sacar el muestreo a 29100Hz. Este muestreo específico es porque la señal que sale filtrada debe ser de 4850Hz. Entonces para reconstruir la señal, serian 6 puntos que tomo del muestreo, (29100/4850 = 6).
Código: C
  1. // Funcion para tomar datos con el ADC en modo automatico con Frecuencia de muestreo de 29100, utilizo solo un canal.
  2. // Para el calculo de la frecuencia de Muestreo con un a FCY de 40Mhz, se basó en la siguiente formula:
  3. //     |<-               Tiempo total de ADC              ->|
  4. //     |<-      TtADC = Sample Time + Conversion time     ->|
  5. //     |<-  Sample Time     ->|<-    Conversion time      ->|
  6. //             N*TAD          +            12*TAD                      12*TAD es el tiempo de conversion para ADC a 10 bits y para 12 bits 14*TAD
  7. //      N=SAMC[1:31]                   TAD = (ADCS + 1)*FCY
  8. //                      N((ADCS + 1)*FCY) +             12*((ADCS + 1)*FCY)
  9. //Donde la formula resultante es:         FCY/FS = (ADCS + 1)(SAMC + 12)
  10. //Utilizo esta formula para calcular el valor de ADCS y SAMC en Matlab, para cualquier muestreo y FCY que en este caso son constante
  11. // Y el resultado es ADCS 54 y SAMC 13.
  12. void ADC_FS_29k_inicA(void)
  13. {
  14. //-----------------------ADC Register---------------------------------------------
  15.  
  16.         AD1CON1bits.ADON = 0;                           //ADC operation
  17.         //AD1CON1bits.DONE = 0;                         // ADC Conversion Status bit
  18.         AD1CON1bits.SAMP = 0;                           // ADC Sample Enable bit
  19.         AD1CON1bits.ASAM = 1;                           // ADC Sample Auto-Start bit
  20.         //AD1CON1bits.SIMSAM = 0;                       // Simultaneous Sample Select bit (only applicable when CHPS<1:0> = 01 or 1x)
  21.         AD1CON1bits.SSRC = 7;                           // Sample Clock Source Select bits Auto
  22.         AD1CON1bits.FORM = 0;                           // Data Output Format bits
  23.         AD1CON1bits.AD12B = 0;                          // 10-Bit or 12-Bit Operation Mode bit
  24.         //AD1CON1bits.ADDMABM = 0;                      // DMA Buffer Build Mode bit
  25.         AD1CON1bits.ADSIDL = 0;                         // Stop in Idle Mode bit
  26.        
  27.         AD1CON2bits.VCFG = 0;                           // Converter Voltage Reference Configuration bits
  28.         AD1CON2bits.CSCNA = 0;                          // Scan Input Selections for CH0+ during Sample A bit
  29.         AD1CON2bits.CHPS = 0;                           // Selects Channels Utilized bits
  30.         //AD1CON2bits.BUFS = 0;                         // Buffer Fill Status bit (only valid when BUFM = 1)
  31.         AD1CON2bits.SMPI = 0;                           // Selects Increment Rate for DMA Addresses bits or number of sample/conversion operations per interrupt
  32.         AD1CON2bits.BUFM = 0;                           // Buffer Fill Mode Select bit
  33.         AD1CON2bits.ALTS = 0;                           // Alternate Input Sample Mode Select bit
  34.        
  35.         AD1CON3bits.ADRC = 0;                           // ADC Conversion Clock Source bit
  36.         AD1CON3bits.SAMC = 13;                          // Auto Sample Time bits Sample TIME = 13*TAD
  37.         AD1CON3bits.ADCS = 54;                          // ADC Conversion Clock Select bits: 54 = 55·TCY = TAD
  38.        
  39.         //AD1CHS123bits.CH123NB = 0;                    // Channel 1, 2, 3 Negative Input Select for Sample B bits
  40.         //AD1CHS123bits.CH123SB = 0;                    // Channel 1, 2, 3 Positive Input Select for Sample B bit
  41.         //AD1CHS123bits.CH123NA = 0;                    // Channel 1, 2, 3 Negative Input Select for Sample A bits
  42.         //AD1CHS123bits.CH123SA = 0;                    // Channel 1, 2, 3 Positive Input Select for Sample A bit
  43.        
  44.         //AD1CHS0bits.CH0NB = 0;                                // Channel 0 Negative Input Select for Sample B bit
  45.         //AD1CHS0bits.CH0SB = 0;                                // Channel 0 Positive Input Select for Sample B bits
  46.         AD1CHS0bits.CH0NA = 0;                          // Channel 0 Negative Input Select for Sample A bit
  47.         AD1CHS0bits.CH0SA = 0;                          // Channel 0 Positive Input Select for Sample A bits
  48.        
  49.         AD1PCFGL = 0b1111111111111110;          // ADC1 PORT CONFIGURATION REGISTER LOW; all PORTB = Digital; RA1 = analog
  50.         TRISAbits.TRISA0 = 1;                           //Configuracion del Tris A para indicar que es de entrada.
  51.         AD1CSSL = 0;                                            // ADC1 INPUT SCAN SELECT REGISTER LOW
  52.        
  53.         //AD1CON4 = 0;                                          // ADC1 CONTROL REGISTER 4
  54. //Habilitación de la interrupción del ADC
  55.         IFS0bits.AD1IF =0;
  56.         IEC0bits.AD1IE = 1;                                     //Habilita la interrupción del ADC cuando haya una captura de dato.
  57.         IPC3bits.AD1IP = 7;                                     //Prioridad de interrupcion del ADC 7 max
  58. }
Como las muestras se recogen de forma automática cuando habilito el ADC (AD1CON1bits.ADON = 1), la función de interrupción del ADC es:

Código: C
  1. void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt(void)
  2. {
  3.         *ptrADC = ADC1BUF0;
  4.         ptrADC++;
  5.         incADC++;
  6.         IFS0bits.AD1IF =0;
  7. }

y la parte de codigo que utilizo para probar el ADC es:
Código: C
  1. AD1CON1bits.ADON = 1;                                                                   //Habilitamos el ADC
  2. while( incADC < MUESTRAS )
  3. {}
  4. AD1CON1bits.ADON = 0;                                                                   //Deshabilitamos el ADC
Citar
No entiendo bien que tipo de datos estás perdiendo
Blackcat, cuando los datos han sido recolectados, los envío en forma serial por el módulo UART hacia el PC y allí los grafico en MATLAB. Cuando conecto un potenciómetro y hago la prueba de recoger 1000 datos con el ADC y enviarlos al PC, funciona correctamente los datos los recibo todos. Este es el gráfico (adjuntado con nombre figure1)hecho desde Matlab de los datos que recibo por el ADC, cuando con el potenciómetro cuadro a la entrada del ADC 2V, con alimentación 3.095V. El promedio de los datos es 669 * (3.095/1024) = 2.022V. Pero cuando pongo los dos circuitos que mencioné al inicio de este tema y voy a recoger 1000 datos, solo se reciben 980 o 995 0 990. Algo pasa que hace que el ADC de alguna forma no tome datos o se desconfigura (Eso es lo que trato de averiguar). A eso me refiero con pérdida de datos.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: blackcat en 25 de Mayo de 2010, 00:24:30
Me resulta interesante tu forma de hacer el muestreo pues no usas un timer o alguna temporizacion, si bien entiendo estás jugando con los tiempo de sampleo + conversion del ADC para generar una frecuencia fija de muestreo.

Porque no intentas de la siguiente manera, siempre me ha resultado bien:

- Configuras el ADC para que tome solamente una muestra cada vez que le das ON y devuelva el valor a un registro temporal.

- Pones el ADC a maxima velocidad, es decir, si el ADC es de 1MSPS lo pones a 1MSPS, o un valor que consideres en donde se toman muestras correctas. Pero lo mas rápido posible.

- Verificas que el ADC tome muestras correctamente utilizando el potenciometro.

- Despues configuras cualquier TIMER para que genere una interrupcion con frecuencia de 29kHz.

- Dentro de la interrupcion del TIMER colocas el codigo de toma de un dato con ADC. Tambien, podes poner un bit de un puerto de salida y que invierta cada vez que entre a la interrupcion, una vez funcionando se mide la frecuencia de salida. De esta manera nos aseguramos que exista una frecuencia fija de 29kHz (mas bien la mitad 14.5kHz) constante en todo instante.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 25 de Mayo de 2010, 00:58:49
Gracias Blackcat, por las sugerencias voy probar el ADC de la forma que tu dices.... Comentaré mas adelante las conclusiones de todas estas pruebas.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: pablomanieri en 26 de Mayo de 2010, 10:46:39
Hola amigo Pablo, quisiera preguntarle si usted ha probado esos OAMP con señales de audio y alimentados con una sola fuente?  Pregunto porque aveces hay propuestas (muy sanas claro) pero no probadas que cuando uno las monta (luego de haber comprado los elementos en muchos casos) no funcionan, como le fue al compañero alexiel.

Muy buena aclaración amigo STAI.
Con fuente simple de 3,3V si lo he probado. Con señales de audio no lo he probado, pero según las hojas de datos tiene un ancho de banda de unos 1Mhz (alimentando con 3V) y un Slew rate típico de 0,9V//us (alimentando con 3V) , que para audio es más que suficiente. La frecuencia a la que los he usado es de 50Hz, para el sensado y filtro de corriente de un inversor trifásico.
Pongo mis manos en el fuego por estos bichos trabajando en frecuencias de audio, jaja
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 26 de Mayo de 2010, 15:55:11
Muy buena aclaración amigo STAI.
Con fuente simple de 3,3V si lo he probado. Con señales de audio no lo he probado, pero según las hojas de datos tiene un ancho de banda de unos 1Mhz (alimentando con 3V) y un Slew rate típico de 0,9V//us (alimentando con 3V) , que para audio es más que suficiente. La frecuencia a la que los he usado es de 50Hz, para el sensado y filtro de corriente de un inversor trifásico.
Pongo mis manos en el fuego por estos bichos trabajando en frecuencias de audio, jaja

Hola Pablo. ¿Qué criterio sigues para determinar que 0.9V/us son apropiados para señales de audio?

Yo usé un OP177GP para otro circuito de audio y tiene un slew rate de 0.3V/us. Hice una simulación en Matlab con la que determiné que eso no fue suficiente para señales de 11kHz. Me gustaría conocer tu criterio.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: pablomanieri en 26 de Mayo de 2010, 17:52:25
Para calcular el slew rate necesario. Lo que hice es tomar una onda senoidal de amplitud A=3,3V y de frecuencia f=20Khz (A*seno(2*Pi*f*t)), que es el máximo para frecuencia de audio. La mayor pendiente de crecimiento (el mayor slew rate) de esta onda se produce en el origen. Por lo tanto para calcular la pendiente en el origen derivo dando A*2*Pi*f*cos(2*Pi*f*0)=3,3*2*Pi*20K=4.147e5V/s. Ahora multiplico este valor por 1u para obtener los volt/uS, entonces 0.4147V/uS.
Fijate que puse una amplitud A de 3,3v y no de 1,5 como en realidad debería ser.
Y como el SLEW RATE que posee el operacional es alrededor del doble, no va a haber problemas en reproducir ondas en la frecuencia de audio. Si estoy equivocado avisen.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 26 de Mayo de 2010, 19:26:55
¡Interesante!  :mrgreen:

http://www.wolframalpha.com/input/?i=derivative+of+3.3sin%28125663+t%29

Pero hay algo que no me cuadra.

La ecuación completa queda para t=0s

A * 2 * pi * f * cos(2 * pi * f * t)=

(3.3 V) (2) (3.1416 rad) (20 kHz) cos(0)=

414690 (V * rad * Hz) (1) = 414690 (V*rad/s)

Creo que está faltando un paso, pasar los radianes a unidades adimensionales. Creo que dividiendo entre 2*pi sería lo correcto.

414690/2*pi = 66000 V/s

Una vez teniendo eso, se divide entre 10^6 (o multiplica por 10^-6) para tener V/us

0.066V/us

¿Cómo lo ves?  :huh:
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: pablomanieri en 26 de Mayo de 2010, 19:41:22
Disculpame pero PI es ADIMENSIONAL.  :mrgreen:
Si te fijas, las funciones trigonométricas, también son adimensionales. cuando haces 2*pi*f*t, es adimensional, ya que f (Hz)=1/T(s).

¿De donde sale Pi?
El número Pi es la relación entre la longitud de una circunferencia (LC) y su diámetro (D), es decir LC/D=Pi
Para verlo mejor, si en vez de considerar el diámetro consideramos el radio (r):
LC=2*Pi*r
D=2*r

LC/D=2*Pi*r/(2*r)=Pi

y como LC y D tienen unidades de longitud, por ejemplo metros (m). Pi resulta adimensional.

Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 26 de Mayo de 2010, 19:44:34
OK, gracias por tu respuesta Pablo.  ;-)
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 31 de Mayo de 2010, 19:28:52
Señores del foro, he hecho alguna pruebas con los amplificadores rail to rail especialmente con el AD8054, configurado como sumador y segudor de voltaje.
El circuito que tomé como referencia fue el propuesto por el compañero migsantiago menos lo del acople del microfono, pues mi señal viene ya de un filtro pasa banda. Con estas pruebas concluyo que son muy buenos para acoplar señales de audio a los modulos de ADC. Les adjunto dos gráficas de las señales entregadas. El gráfico adjuntado con nombre salida sumador, es la señal de salida del sumador, como verán la señal se satura cercano al voltaje de alimentación en este caso 3.3V (en realidad mi regulador entrega 3.1V a causa que alimenta otros dispositivos). La otra gráfica adjuntada con el nombre salida seguidor es la señal de salida del seguidor de voltaje como se ve se satura un poco más abajo a 2.5V, luego ésta señal entra al ADC del Dspic.
Bueno pero no me ha solucionado el problema que tengo. Lo que no logro entender es porque si funciona con un potenciómetro de 1M, si en las especificaciones del modulo ADC me dice que la resistencia de entrada debe ser de max 200 ohmios o estoy entendiendo mal, textualmente dice:
Recommended Impedance of Analog Voltage Source(Rin) 200.
Mi problema es de acople de impedancias o no? :shock:, y siempre se soluciona colocando el seguidor de voltaje pero a mi no me funciona. :(
Blackcat ya probé el ADC de la forma que me dijiste y funciona bien miro con el osciloscopio el tiempo que se demora en capturar 1000 datos y está correcto a diferentes Frecuencias de muestreo.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 31 de Mayo de 2010, 22:02:02
Hola, ya no sé cómo esté tu circuito actualmente. Una imagen actualizada del mismo ayudaría a detectar el asunto de las impedancias.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: pablomanieri en 31 de Mayo de 2010, 23:49:26
No estará dando problemas la comunicación entre el dsp y el PC, por ahí estás transmitiendo a muy alta velocidad y se pierden datos, y no es por las conversiones del ADC, haces algún tipo de chequeo de errores?
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 01 de Junio de 2010, 18:46:42
Hola migsantiago. Aquí adjunto el circuito completo que acoplo al ADC del Dspic.
Pablo mira cuando le pongo un potenciómetro a la entrada del ADC, me envía correctamente al PC todos los datos que tomo del ADC, el proceso que hago es primero recojo 1000 datos con el ADC y luego los envío al PC. También me funciona cuando a la entrada solo conecto el seguidor de voltaje. Pero con el circuito que adjunto no me funciona, los 1000 datos los toma correctamente porque con el osciloscopio veo que el tiempo que se demora en hacerlo es el correcto, para ver el tiempo que se demora cambio de estado a un bit en la función de interrupción del ADC. Lo que no logro entender es que dato guarda cuando el ADC no captura nada y lo digitaliza. Esto lo puedo hacer si utilizo el debugger? Voy a probar que tal me va. :( :(
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 01 de Junio de 2010, 18:50:24
Ahhh Pablo y en cuanto al uso del chequeo de errores ni idea, me comunico con el PC por medio del modulo UART, y visualizo los datos con el MATLAB.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 01 de Junio de 2010, 18:58:32
A mi parecer el circuito está bien.

Podrías ahorrarte el último seguidor de voltaje ya que la impedancia del ampop sumador ya es ideal.

Cuando estás probando con el potenciómetro de 1M, ¿cómo es que lo conectas y alimentas?
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: pablomanieri en 01 de Junio de 2010, 19:11:14
A que velocidad transmites los datos a la pc, que tan largo es el cable con el que te comunicas con la pc?
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 01 de Junio de 2010, 20:47:13
Hola migsantiago, el potenciómetro lo conecto:
Un pin a +3.3V, el adjustable al pin ADC y el otro pin a tierra.
Pablo la transmisión es a 9600 baudios, y cable no utilizo. Al modulo UART conecto un modulo inalambrico X-bee )))))) X-bee-modulo serial-USB.

Hice una prueba en modo debugger con el pickit 3, cuando inicio el programa el cual consiste en recoger 1000 datos con el ADC, miro la ventana Watch donde tengo la variable donde guardo los datos y no veo nada malo(todos los datos concuerdan). Ahora si que entiendo menos  :(. No pensé que se me complicara tanto el asunto.
Seguiré haciendo más intentos.....Gracias por sus comentarios.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 01 de Junio de 2010, 21:02:15
Estamos atacando el problema desde varios flancos pero no sabemos a dónde estamos apuntando  :D

Problema 1
Pierdes muestras. ¿Cómo las pierdes? ¿No te llegan los arreglos por RS232 de forma continua? ¿Llegan las muestras pero con valores erróneos?

Problema 2
Impedancias. Cuando usas el pot de 1M seguro que lees bien la señal porque la variación de un pot es lenta. La señal que quieres medir varía de 3kHz a 6kHz. Es probable que esté mal configurado el ADC del dsPIC y las frecuencias altas se lean mal.

Hasta ahora el circuito de filtrado y adecuación de la señal parece funcionar. Veo que se satura el canal en las fotos que has puesto pero asumo que estás de acuerdo con ello. Por parte del circuito entonces no hay nada que checar.

Creo que ahora hay que revisar el firmware del dsPIC. Habría que dar una segunda checada al tiempo de carga del capacitor sample&hold.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 01 de Junio de 2010, 21:29:38
migsantiago gracias por estar atento al problema...
Bueno voy a comentar que pruebas he hecho para sacar una conclusión:
Quise bajar el número de datos para capturar de 1000 a 100 para hacer mas coto el proceso y poder analizar.
Estaba probando y de un momento a otro se perdió la comunicación, miré la alimentación y había caido un poco.
Puedo estar pensando que el problema va hacer alimentación, no sé tengo que revisar eso. Yo utilizo unas fuentes conmutadas para dar alimentación tanto al dspic como al AD8054 y al X-bee.
Una pregunta si he configurado mi regulador a 3.3V porque se me baja a 3.1V o a 3.05V a que se deberá eso?, tendrá que ver algo esto.....
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 01 de Junio de 2010, 21:40:49
Puede que tu fuente no pueda dar la corriente suficiente para alimentar el XBee. Checa cuánta corriente demanda cada cosa y luego con un amperímetro verifica lo anterior.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 02 de Junio de 2010, 19:52:57
Hola migsantiago, hermano gracias por ayudarme con el problema.
Citar
Creo que ahora hay que revisar el firmware del dsPIC. Habría que dar una segunda checada al tiempo de carga del capacitor sample&hold.
Como se revisa esto que tu comentas.
Ya descarté la fuente probé con otra fuente, además ahora solo tengo conectado el dspic el X-bee y el circuito de acople.
No sé en que ayude esta prueba que hice:
Incorporé un potenciómetro de 1M conectado entre tierra y la entrada del ADC y el otro pin suelto.
capturaba 1000 datos y los recibía bien, pero el problema es que cuando la amplitud de la señal aumenta y toma un valor entre 510 y 520 no he podido detallar bien que valor ocurre el problema. Cuando la señal no la hago pasar mas de 510 me toma los datos bien. Te adjunto 4 gráficos figure1 y figure2 son señales que no pasan de 510 en amplitud y los 1000 datos se toman con exito, figure3 es una señal que pasa en amplitud 510 y en algún dato entre 510 y 520 ocurre el problema y figure4 es el zoom donde ocurre el problema.
Puede que tenga que ver algo con lo del firmware que tu dices?.
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: migsantiago en 02 de Junio de 2010, 20:34:00
Es ahí donde ya no soy de mucha utilidad. No sé configurar el ADC de los dsPIC.

Es que el oscilador que gobierna el muestreo del ADC debe tener periodos apropiados para muestrear la señal. Si muestreas muy rápido entonces puede que la señal no se mida bien.

Fuera de eso creo que ya no tengo más consejos que darte.  :(
Título: Re: Problemas con circuito de acople al modulo ADC.
Publicado por: alexiel en 03 de Junio de 2010, 19:47:55
Hola migsantiago, gracias hermano por la ayuda brindada.
Ya solucioné el problemita y tenía razón el problema no estaba ni en el hardware ni en el ADC, y me dí cuenta cuando solo empece a transmitir datos, lo que hice fue incrementar una variable de 0 hasta 65535, y observé que llegaban datos diferentes. Miré y analicé las funciones que utilizo para la transmisión por el UART y encontré que tenía una confusión entre formato de datos, utilizaba unas funciones de la librería de UART como la putsUART2() y al parecer envíaba los dato con código ASCII y en MATLAB los tomaba como uint8, y algunos valores parecía que no se enviaban pero la verdad era que eran nulos como el enter, y otros valores. Bueno que enredo. Después de corregida las funciones hice unas pruebas y OK :-/. Adjuto una gráfica de la señal (los valores que se observan es que el ADC lo configuré a 12bits nada más).
Mil gracias a todos los que participaron en este foro. :o