Autor Tema: Salidas analogas dspic  (Leído 4194 veces)

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

Desconectado adrianrs86

  • PIC10
  • *
  • Mensajes: 24
Salidas analogas dspic
« en: 17 de Diciembre de 2008, 17:29:50 »
Hola amigos tengo una pequeña duda, la cual espero que ustedes me la resuelvan.
Resulta que necesito que por el dspic (30f4013) me salgan datos de forma analoga, tengo entendido que esto ce hace por los pines del PWM, pero lo que no entiendo es como hacer que sean analogas pues segun tengo entendido por el PWM salen valores de 0 o 5 V , mi proposito es hacer una tarjeta de adquisicion
muchas graciass


Desconectado blackcat

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 600
Re: Salidas analogas dspic
« Respuesta #2 en: 18 de Diciembre de 2008, 18:54:23 »
El asunto es muy facil ... se genera una frecuencia X en el PWM ... entonces a la salida del PWM colocamos un filtro pasobajos de orden 4 (... o mas!) con una frecuencia de corte de 1/4 de la frecuencia del PWM ... es decir ... X/4 ....

Como estamos filtrando  todas las armonicas empezando por la fundamental, excepto la 0 .. o CD ... asi tenemos una salida analógica que podemos variar con el ciclo de trabajo del PWM.

Este método acarrea una serie de problemas:

1 - Hay que poner un filtro de orden bastante alto.
2 - Como es un orden alto, la respuesta de salida es lenta.
3 - Por mas bajo que sea la frecuencia de corte siempre oscila.
4 - Es un método barato para aplicaciones de audio, en este caso lo mejor es poner la frecuencia del PWM superior a 20kHz.

Te recomiendo un DAC, el MCP4922 o el MCP4822 ... vienen dos DAC en un solo encapsulado, resolución de 12bits y comunicación SPI hasta 20MHz ...

Saludos!


Control Automático, DSP & Microcontroladores

Desconectado adrianrs86

  • PIC10
  • *
  • Mensajes: 24
Re: Salidas analogas dspic
« Respuesta #3 en: 18 de Diciembre de 2008, 20:24:44 »
Hola foro, a nocturno y blackcat les agradesco por responder mis inquietudes ,y les agradesco sus recomendaciones porque la verdad si me hacian falta  :D , me da pena molestarlos tanto pero tengo otra inquietud y es la siguiente:
Estoy enviando datos por el puerto serial del dspic al pc y estoy leyendo una entrada analoga por el pin B0, esto me funciona hasta cierto punto pues los en el pc aparece el voltaje que varia en un potenciometro pero cuando realizo la medicion en el pic para verificar que los datos si son correctos, el voltaje no es el mismo pues en el voltimetro aparece un voltaje menor, aproximadamente 0.6V menor que el del pc, y tambien cuando mido con el voltimetro el voltaje que aparece en el pc disminuye, como si el voltimetro afectara , aqui pongo mi codigo para que por favor me ayuden (el codigo esta en CSS)

#FUSES  XT_PLL4, NOWDT, NOPUT
#use delay(clock = 16000000)
#use rs232(baud=9600, BITS =8, PARITY=N , STOP=1, uart1)
void main()
{
int16 dato;
float ct,valor;
char caracter;

setup_adc_ports(ALL_ANALOG);
//setup_adc_ports(sAN0|sAN1, VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
//bits=read_adc();

setup_timer2(TMR_INTERNAL | TMR_DIV_BY_1, 3);
setup_compare(1, COMPARE_PWM | COMPARE_TIMER2);
//setup_uart(TRUE);
while (true)
{
putc(13);
set_pwm_duty(1,valor * (int16)16);
set_adc_channel(0);
delay_us(10);
valor=read_adc();
dato=read_adc();
ct=(valor*5)/4095;
delay_ms(500);
printf("%4.2f",ct);

//printf("%LX\r",dato);

}
}

Desconectado blackcat

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 600
Re: Salidas analogas dspic
« Respuesta #4 en: 19 de Diciembre de 2008, 01:11:11 »
Parece que eso esta escrito en CCS ... si no me equivoco ... yo no se mucho de CCS, pero veo que hay una linea que dice ALL_ANALOG, segun mi experiencia con dsPIC he notado que cuando uno asigna varios canales ADC la medición varia un poco si los datos se toman rápidamente ... mi recomendación es asignar solo aquellos canales que se están usando.

Tambien podes colocar algun filtro pasabajas en la entrada del canal analógico, preferiblemente activo .. es decir .. uno hecho con amplificador operacional. Ademas, seguir todas las recomendaciones del manual de referencia como utilizar condensadores lo mas cerca del dsPIC y tener una referencia lo mas estable posible.

Otro punto es de cuantos ohms es el potenciometro?, pues si es bajo no deberia afectar pero si es muy alto, la impedancia de entrada del voltimetro puede variar la resistencia.

Saludos!
Control Automático, DSP & Microcontroladores

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: Salidas analogas dspic
« Respuesta #5 en: 19 de Diciembre de 2008, 06:40:56 »
Adrian, no necesitas seleccionar el canal de adquisición en cada bucle del programa, solo configuralo al inicio antes de entrar al bucle, así podrás eliminar las dos líneas que son a mi criterio las que te estan dando problemas (porque el tiempo entre el cambio de canal y la lectura es muy corto):

Código: [Seleccionar]
set_adc_channel(0);
delay_us(10);
valor=read_adc();
dato=read_adc();

Borra las dos primeras líneas y coloca el set_adc_channel(0); en el main antes de entrar al bucle.
Además, para que lees dos veces el ADC? porque mejor no haces un casting:

Código: [Seleccionar]
dato = read_adc();
valor = (float)dato;

Por último, no se que dsPic estarás utilizando, pero estas configurando el clock del ADC como el RC interno y el datasheet del PIC seguro te va a decir que solo se debe utilizar si vas a medir mientras el pic esta dormido (Cosa que tu no haces) o si estas trabajando o si la frecuencia de reloj del micro es baja (Cosa que tus 16 MHz no lo son).

Saludos.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado adrianrs86

  • PIC10
  • *
  • Mensajes: 24
Re: Salidas analogas dspic
« Respuesta #6 en: 19 de Diciembre de 2008, 20:02:21 »
Hola muchachos, pues gracias por sus valiocisimas recomendaciones que la verdad me han ayudado mucho, por una parte ya solucione el problema de la entrada analoga y su medida, pues resulta que blckcat tenias razon porque tenia un potenciometro de un valor muy alto (100 k) en la entrada y pues lo cambie por otro mas pequeño y todo funciona de maravilla, por otra parte ya mejore el codigo y segui las recomendaciones de gonzalo. De verdad muchas gracias.
Ahora les voy a contar de que se trata mi proyecto:
Resulta que estoy desarrollando unos controladores con el dspic 30f4013, el proyecto se trata de hacer 5 controladores y comparar su desempeño en el dspic, los controladores que espero implementar son 4 de minima varianza (MVR3, MVR3I, MVR2 y MVR1) y un PI, en cuanto a la parte de control, el sistema elegido para controlar es un modulo de microflujo y pues ya tengo el sistema identificado, la funcion de transferencia y las leyes de control. Por eso primero que todo estaba probando las entradas y salidas que necesitaba que el dspic me generara, de todos modos en unos dias les dare mas detalles para que me sigan ayudando jejejeje. saludos!!