Autor Tema: velocidad muestreo A/D pic 18f4550  (Leído 17743 veces)

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

Desconectado plucchetti

  • PIC10
  • *
  • Mensajes: 1
velocidad muestreo A/D pic 18f4550
« en: 10 de Octubre de 2009, 01:02:40 »
Hola,

Estoy trabajando en un proyecto con el pic 18f4550.
Necesito muestrear como minimo a 1Khz 12 señales analogicas = 12KHz
y pasarlas a una PC por USB

Por lo que veo en la hoja de datos del PIC, en su Con A/D interno usa su oscilador interno que va de 31Khz a 8Mhz

Esto es correcto ?

Me podrian aclarar mejor a frecuencia trabaja el A/D interno del PIC ?

o una opcion mejor ???

Muchas gracias

Pablo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: velocidad muestreo A/D pic 18f4550
« Respuesta #1 en: 10 de Octubre de 2009, 12:43:05 »
Hola.

Cuando conviertes una señal analógica a digital, debes tener en cuenta el tiempo de conversión (Tad) -busca ese dato en el datasheet-. Además tu quieres cambiar de canal, por lo que hay que cambiar la entrada, esto te consume tiempo, ya que hay que esperar algunos microsegundos para que se estabilice la señal de entrada, de lo contrario, tomaras medidas erroneas; normalmente se usa 20uS.

Cuando se usa el oscilador interno para la frecuencia de conversion, creo que deja el tiempo en unos 6uS, asi que el tiempo total que te toma una sola conversion seria de unos 26uS.

Ojo que el conversor AD de los PIC es muy inestable en los 2LSB, por lo que es recomendable tomar varios datos para promediarlos, esto se traduce en un aumento de tiempo, una opcion es truncar los datos, pero perderias resolucion.

Saludos

El papel lo aguanta todo

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: velocidad muestreo A/D pic 18f4550
« Respuesta #2 en: 10 de Octubre de 2009, 16:30:04 »
si te sirve de ayuda plucchetti , en la data del 18f4550 hablan de que el tiempo de adquisición se puede hacer por hardware y que dependiendo de la configuración se puede llegar a 2,45us. pero hay que sumarle el Tad y no recuerdo cuanto es el otro cuando se cambia de canal.

umm para 12kHz, habría que hacer los cálculos, partiendo del hecho de usar un solo canal a 12kHz, tienes una muestra cada 83,3us. Usando el oscilador interno, imposible, si acaso usando la máxima frecuencia, porque hay que calcular el tiempo para ejecutar los procesos requeridos en esa ranura de tiempo.



La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: velocidad muestreo A/D pic 18f4550
« Respuesta #3 en: 10 de Octubre de 2009, 18:03:09 »
Lo que menciona palitroque es cierto. Pero no tan simple es decir, esos 2.45us (como maximo, puede ser menos) solo es el tiempo de adquisicion, pero el pic tambien utiliza un tiempo de conversion que va de 700ns hasta 1.33us por bit, ya que son 10 bits tendrías al rededor de 7us hasta 13us por cada conversion, y sumando el Tacqt serian alrededor de 16us por conversion como minimo.

Como ya saben MiKroC trae una funcion de conversion A/D, esta función utiliza el reloj de conversion del RC interno, esto es muy lento ya que se tarda alrededor de 80us por cada muestra, asi que es mejor realizar una pequeña función tu mismo mas adelante muestro un ejemplo.

Código: [Seleccionar]
unsigned Leer_adc(){
    ADCON0.ADON=1;            //Encendemos el ADC
    ADCON0.GO_DONE=1;      //Empezamos la Conversion
    while(ADCON0.GO_DONE);//Cuando GO_DONE se desactiva termina la conversion
                                       //Debido a que no se como enviar dos byte directamente a un entero lo realizo en asambler
asm{movff   ADRESL,_adc    //muevo el valor del ADRESL a la parte baja del entero adc
    movff   ADRESH,_adc+1} //muevo el valor del registro ADRESH a la parte alta del entero adc
    return adc;                   //regreso el dato del adc
            }
void main(){
    TRISA=255;                  //PuertoA como entrada
    ADCON1= 0b001110;      //Configura solo AN0 como analogica
    ADCON2=0b10001010;   //Fad=Fosc/32=32MHz/32=1MHz, Tacq=2Tad y justificación derecha
    ADCON0=0;                 //Seleccionamos canal0 para conversion con Vdd y Vss como referencias
    while(1){
        V=Leer_adc();}       //Aqui se hace el llamado a la funcion de conversion
        }
}

El codigo fue hecho para una frecuencia de 32MHz lo cual se logra poniendo un cristal de 4MHz y activando los flags de configuración
  • PLLDIV_1L para que la frecuencia de entrada al PLL sea de Fosc/1=4MHz/1=4MHz
  • CPU_OSC2_PLL3_1L para que la frecuencia de entrada al CPU sea de Fpll/3=96MHz/3=32MHz
  • FOSC_XTPLL_XT_1H o tambien FOSC_HSPLL_HS_1H para poder utilizar el PLL y multiplicar la frecuencia de trabajo.

yo utilizo 96MHz/3=32MHz porque
Tad=32*Tosc=32/Fosc=32/32MHz=1us

Tambien puedes utilizar estas opciones:
Si uso 96MHz/2=48MHz
Tad=64*Tosc=64/Fosc=64/48MHz=1.3333us

Utilizo 96MHz/4=24MHz porque
Tad=32*Tosc=32/Fosc=32/24MHz=1.3333us

Utilizo 96MHz/6=16MHz porque
Tad=16*Tosc=16/Fosc=16/16MHz=1us
Pero el tiempo de cada ciclo aumenta lo que disminuye el tiempo total de conversion

Recuerda que 96MHz es la Fpll.

Si uso un cristal de 20MHz
Tad=16*Tosc=16/Fosc=16/20MHz=800ns
pero no tengo Cristal de ese tipo. Pero tambien aumento el tiempo de ciclo en unos cuantos ns. podria ser la mejor opcion.

Si uso el oscilador interono a 8MHz
Tad=8*Tosc=8/Fosc=8/8MHz=1us.
Pero aumento el Tcyc disminuyendo el tiempo de conversion total.

Recuerda que debes mantenerte entre el margen de Tad que arriba menciono para poder realizar la conversion, sino ocurriran errores y podrias dañar el PIC.

Debido a que Necesitas muestrear como minimo a 1Khz 12 señales analogicas = 12KHz y lo multiplicas por 2 para obtener la frecuencia de Nyquist tendrias 24kHz supongo que podrias hacerlo porque tu frecuencia de muestreo es 1/16us=62.5KHz

Aun no pruebo el codigo pero creo que funcionara, avisame si lo hace y suerte

« Última modificación: 10 de Octubre de 2009, 18:12:54 por bigluis »
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado OSUKARU

  • PIC10
  • *
  • Mensajes: 6
Re: velocidad muestreo A/D pic 18f4550
« Respuesta #4 en: 17 de Octubre de 2009, 18:08:02 »
hola que tal respecto a lo que dices bigluis segun lo anterior dices que si utilizo el cristal de 20Mhz  mi Tad=800nS verdd???, pero para configurar el reloj de conversion (como debo seleccionarlo), y en el caso del timepode adquisicion debere seleccionar cual el 16Tad??? menor a 4Tad no podre seleccionar porque segun lei la hoaja de datos y me dice que se necesitan al menos 3Tad entre conversiones ... epsero me ayudes porfavor y disculpa mi ignorancia ya que apenas me he metido en el rollo de los pic18f4550 ya que solo utilizaba el pic16F628 Y EL PIC16F877A por lo que segun veo la configuracion de los modulos de a/d son diferentes en cada tipo de pic (877y 4550), espero y me ayudes a solucionar mi duda anexo el codigo que llevo realizado en ensamblador para que me logren corregir en caso de errores o sugerencias de como compactar o simplificar el codigo asta pronto ....saludos

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: velocidad muestreo A/D pic 18f4550
« Respuesta #5 en: 18 de Octubre de 2009, 02:33:13 »
Primero aclaro:
  • Tosc Periodo del circuito de oscilacion (en nuestro caso el cristal).
  • Tacqt significa Periodo de Adquisicion, es el tiempo necesario para que el circuito sample/hold guarde la muestra antes de ser convertida, es decir el tiempo que el capacitor de mustreo se cargue con el voltaje a convertir. Esto se hace para evitar errores en la conversion.
  • Tad significa Periodo de conversion analogo digital, es el tiempo en que el ADC realiza la conversion de cada bit.

Como mencione antes si tienes un cristal de 20MHz lo mejor seria usar Tad=16 Tosc y usando un Tacqt=2Tad de la siguiente manera:

ADCON2=10001101

Disculpa OSOKARU pero en ningun lado hallé eso de que estas limitado a Tacqt=4Tad. Tengo entendido que tu puedes programar el Tacqt desde 2 hasta 20 Tad, y que esto lo haces dependiendo de la velocidad de cambio de la señal. Es decir, si la señal es de cambio lento (periodica) es mejor utilizar un Tacqt menor y si la señal es de cambio rapido y aleatorio (aperiodica) es mejor utilizar un Tacqt mayor para evitar errores.

Para trabajar el oscilador con esta frecuencia debes hacer lo siguiente:
  • FOSC_HS_1H para no utilizar el PLL y que solo se divida la Fosc si es necesario.
  • CPU_OSC1_PLL2_1L para que la frecuencia de entrada al CPU sea de Fosc/1=20MHz/1=20MHz
En MikroC lo haces durante la creacion de un nuevo proyecto graficamente, en MPLAB o CCS no se como hacerlo, espero que alguien lo postee si sabe.

Como mencione antes aun no he hecho pruebas fisicas del circuito, yo tambien soy principiante :oops: en esto por lo tanto lo mejor es que realices las pruebas, recuerda tener mucho cuidado y espero que te sirva lo que he posteado.
« Última modificación: 18 de Octubre de 2009, 02:52:42 por bigluis »
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: velocidad muestreo A/D pic 18f4550
« Respuesta #6 en: 18 de Octubre de 2009, 10:47:21 »
Por aquí hay una explicación del módulo A/D con algunos ejemplos.


Este hilo hay que trasladarlo  ;-)

Saludos!
« Última modificación: 18 de Octubre de 2009, 12:55:00 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: velocidad muestreo A/D pic 18f4550
« Respuesta #7 en: 18 de Octubre de 2009, 14:51:05 »
Trasladado ya está, bajo orden y comando del Sr. Suky  :mrgreen:

Parece que la gente cierra los ojos y da click donde sea y ahí publican. De antier a hoy he movido 6 temas   :?

Reglas del foro
http://www.todopic.com.ar/foros/index.php?action=globalAnnouncements;id=1

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: velocidad muestreo A/D pic 18f4550
« Respuesta #8 en: 18 de Octubre de 2009, 18:47:05 »
Parece que la gente cierra los ojos y da click donde sea y ahí publican. De antier a hoy he movido 6 temas   :?

Yo pienso que esto ocurre porque la mayoria de usuarios somos nuevos en el foro y simplemente deseamos obtener conocimientos  :(, por ello tendemos a cometer este error que es tan frecuente  :oops:.

 :? Me preguntaba si es posible que el servidor realice preguntas como:
  • ¿Que lenguaje usas? C, Basic, ASM u otros.
  • ¿Que Compilador Usas? MikroC, MikroBasic, PBP, CCS, C18, MPLAB u otros
  • ¿Que Pic Usas? Pic 16, 18, dsPic u otros
  • ¿Que modulo deseas tratar? Modulo A/D, Comparador, CCP, Puertos de I/O, Vref Interno, Timers u otros

Esto con el fin de que sea el mismo servidor quien filtre y ubique cada tipo de tema en su lugar correspondiente. Es decir, que antes de publicar cualquier tema sea obligatorio que los usuarios contestemos estas preguntas.

  :? No se, supongo que hasta seria posible que evite que hayan temas sumamente similares.

 ;-) Tambien creo que esto le evitaria mucho trabajo a los moderadores ya que seria el servidor quien se encargue de ubicar el tema.

Como Programador se que decirlo es una cosa y otra hacerlo,  :( por eso solo quiero saber si es posible o no, y espero que no mal interpreten mi pregunta.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: velocidad muestreo A/D pic 18f4550
« Respuesta #9 en: 18 de Octubre de 2009, 19:10:36 »
Yo pienso que esto ocurre porque la mayoria de usuarios somos nuevos en el foro y simplemente deseamos obtener conocimientos  :(, por ello tendemos a cometer este error que es tan frecuente  :oops:.

Pero no es difícil ver todos los subforos disponibles y decidir cuál es el mejor de ellos para un tema nuevo. Los títulos son claros, y ahora más con las pequeñas modificaciones que hizo el administrador BrunoF.  ;-)

Desconectado OSUKARU

  • PIC10
  • *
  • Mensajes: 6
Re: velocidad muestreo A/D pic 18f4550
« Respuesta #10 en: 24 de Octubre de 2009, 23:43:53 »
hola que tal
pues gracias bigluis me ha servido tu info pondre en marcha mi cerebro asta el tope asta lograr mi cometido te agradesco tu atencion luego publicare mis resultados satisfactorios jejejejejej asta pronto
saludos :-/


 

anything