Autor Tema: Ajuste ADC dspic30F4011  (Leído 12572 veces)

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

Desconectado borre4

  • PIC10
  • *
  • Mensajes: 15
Re: Ajuste ADC dspic30F4011
« Respuesta #15 en: 08 de Diciembre de 2011, 20:48:01 »
Hola,

el apartado 20.8 menciona la resistencia maxima RSS=5K para no sobrepasar la impedancia, pero en la configuracion automatica menciona que se necesita considerar el tiempo suficiente de adquisicion o al menos asi yo lo entiendo pero no dice cuanto es. ? o como se calcula el tacq para esta familia 30F?

Encontre este ejemplo del 30F4013 (yo manejo el 30F4011) donde menciona el tacq de 1tad cuando se cumple SSRC<2:0> = 111 and SAMC<4:0> = 00001 pero no se si se cumpla lo mismo para el 4011.

asi lo tengo ya configurado y con un pot de 1K en la entrada analogica respetando un tad minimo de 154ns para trabajar hasta 500 ksps y con todas las Vdd conectadas a Vss con un capacitor de 100nF pero sigue oscilando la entrada.
Saludos

Desconectado borre4

  • PIC10
  • *
  • Mensajes: 15
Re: Ajuste ADC dspic30F4011
« Respuesta #16 en: 09 de Diciembre de 2011, 20:22:44 »
despues de revisar varios parametros el Tad minimo 154ns, mi cristal de 4MHz con PLL16 , tenemos una frecuencia de 64Mhz y trabajamos a 16MIPS y en relacion a la formula

TAD = TCY * (0.5 * (ADCS<5:0> + 1))

Asigno el valor de 4 a ADCS<5:0> para respetar el Tad minimo. Al mismo tiempo mencionan que TSamp minimo es de 1 Tad por lo cual en el programa colocamos las siguientes lineas despues de la libreria del lcd

Código: [Seleccionar]
#define ADC_CLOCK_DIV_5    0x0004
#define ADC_TAD_MUL_1      0x0100

y cambiamos la configuracion del adc por:

Código: [Seleccionar]
setup_adc(ADC_CLOCK_DIV_5|ADC_TAD_MUL_1); //  
lo cual nos da como resultado en asm como:

registro ADCON3 (2A4)=104
registro ADCON2 (2A2)=0
registro ADCON1 (2A0)=80E0

Y asi se cumple SSRC<2:0> = 111 and SAMC<4:0> = 00001 para trabajar a la maxima velocidad de muestreo.....pero sorpresa la lectura sigue oscilando  :(

O estoy haciendo la configuracion incompleta?? Tambien ya probe modificando el Tsamp por 2,4,8,16 y es lo mismo  :? como si no afectara en lo absoluto
« Última modificación: 09 de Diciembre de 2011, 20:25:18 por borre4 »
Saludos

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: Ajuste ADC dspic30F4011
« Respuesta #17 en: 10 de Diciembre de 2011, 17:10:34 »
que tan grande es la oscilacion que se presenta?

Desconectado borre4

  • PIC10
  • *
  • Mensajes: 15
Re: Ajuste ADC dspic30F4011
« Respuesta #18 en: 11 de Diciembre de 2011, 17:23:55 »
Hola,

Pues la ultima cifra de la lectura practicamente nunca se estabiliza,es decir que si tenemos un voltaje de 2.5 en la entrada analogica, el valor deberia marcar 512 en teoria pero solo el 5 y el 1 estan fijos y el valor de las unidades nunca es fijo siempre esta cambiando en un rango entre 2 y 4 unidades lo cual no deberia estar pasando....

La pregunta es, si estoy configurando bien el ADC??  :?
Saludos

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Ajuste ADC dspic30F4011
« Respuesta #19 en: 11 de Diciembre de 2011, 19:54:29 »
yo creo que es normal esa oscilacion, estamos hablando de que oscila entre 10-20mv, eso puede ser ruido, puedes poner un esquema electrico?

Desconectado borre4

  • PIC10
  • *
  • Mensajes: 15
Re: Ajuste ADC dspic30F4011
« Respuesta #20 en: 11 de Diciembre de 2011, 20:40:55 »
Hola que tal, adjunto el esquema que estoy utilizando. Como nota, es un dspic30F4011 pero la version de proteus no lo maneja asi que lo coloque en un 16f877 pero es basicamente como esta armado. Tengo un 2do pot en AN1 y esta conectado exactamente igual que el pot de AN0. Por ahora solo leo las entradas analogicas para mostrarlas en el lcd asi como su resta(AN0-AN1).

Todas las Vdd y la AVdd estan conectadas a Vss por medio de un capacitor de 100nF lo mas pegados al dspic. Alguna otra recomendacion?? Gracias

Necesito que esa lectura sea lo mas precisa que se pueda sin oscilaciones . Tambien pongo el codigo que tengo para ver si es que algo anda mal por ahi jee

Código: [Seleccionar]

#include <30F4011.h>           //EJEMPLO PWM
#device adc=10
#include <math.h>

#FUSES XT_PLL16   //XT Crystal Oscillator mode with 16X PLL
#FUSES PR   //Primary Oscillator
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOPROTECT   //Code not protected from reading
#FUSES NOWDT   //No Watch Dog Timer
#FUSES MCLR  // Master Clear pin enabled

#use delay(clock=64000000)

#define LCD_ENABLE_PIN  PIN_D0                                    ////
#define LCD_RS_PIN      PIN_D2                                    ////
#define LCD_RW_PIN      PIN_D3                                    ////
#define LCD_DATA4       PIN_F1                                    ////
#define LCD_DATA5       PIN_F4                                    ////
#define LCD_DATA6       PIN_F5                                    ////
#define LCD_DATA7       PIN_F6

#include <lcd.c>

#define ADC_CLOCK_DIV_5    0x0004
#define ADC_TAD_MUL_1      0x0100
#define ADC_TAD_MUL_5      0x0500

int16 p1,p2,p3;
float a;
unsigned int16 duty;

void main()



setup_timer1(TMR_DISABLED);
setup_timer3(TMR_DISABLED);
setup_timer2(TMR_INTERNAL | TMR_DIV_BY_8,0xABDF); //periodo de 22ms para servos
setup_compare(2, COMPARE_PWM | COMPARE_TIMER2);
setup_adc_ports(sAN0|sAN1|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_5|ADC_TAD_MUL_1); //  |ADC_TAD_MUL_2 INTERNAL DIV_4


set_tris_D(0x00);
set_tris_F(0x00);

lcd_init();
int i=0;

while(i==0){

set_adc_channel(0); // pot1 1k
delay_us(2);
p3=read_adc();
//a= (93.75 * p1 / 1023.0);
//duty=a * (int16)64;

delay_us(3); //entre lectura de canales

set_adc_channel(1); // pot2 1K
delay_us(2);
p2=read_adc();

p1=p3-p2;

/*if(p1>0 && p1<=205){
duty=(int16)2980;}
else if(p1>205 && p1<=410) {
duty=(int16)3083.5;}
else if(p1>410 && p1<=614) {
duty=(int16)3187;}
else if(p1>614 && p1<=820) {
duty=(int16)3290.5;}
else if(p1>820 || p1<0) {
duty=(int16)3394;} */

//set_pwm_duty(2,duty);   

lcd_gotoxy(1,1);
printf(lcd_putc,"p3=%4ld p2=%4ld",p3,p2); // u,4ld,f
lcd_gotoxy(1,2);
printf(lcd_putc,"resta=%4ld",p1); //"duty ms=%4ld",duty

delay_ms(10);

}
}
Saludos

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Ajuste ADC dspic30F4011
« Respuesta #21 en: 11 de Diciembre de 2011, 20:48:01 »
el proteus te lo emula bien no? o te da las oscilaciones en el proteus??

Si te oscila en la realidad seria lo correcto, los potenciometros tienen un % de error, la temperatura les afecta, humedad, ruidos... Vamos que no puedes conseguir un voltaje estable con un potenciometro.

Desconectado borre4

  • PIC10
  • *
  • Mensajes: 15
Re: Ajuste ADC dspic30F4011
« Respuesta #22 en: 11 de Diciembre de 2011, 20:52:43 »
En proteus no se puede simular porque no tiene dspic de la familia 30F solo algunos de la 33F.

Tambien creo que pueden ser los potenciometros, mañana tratare con pots lineales porque no tengo a la mano por el momento. Tambien otro detalle que veo es que cuando cambio la resistencia de un solo pot la lectura del otro pot cambia en unas 4-6 unidades  :shock:
Saludos

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Ajuste ADC dspic30F4011
« Respuesta #23 en: 12 de Diciembre de 2011, 10:49:18 »
si, piensa que las resistencias normales tienen un 5% de error, ademas la temperatura tambien les influye, las hay de 1% quizas con esas te de menos.

Una buena prueba que puedes hacer es colocar un polimetro en la salida del pot, si es un polimetro de precision veras que si varia la tension, con esto ya sabes que el problema es de margen de error y no de tu programa.

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: Ajuste ADC dspic30F4011
« Respuesta #24 en: 12 de Diciembre de 2011, 12:27:33 »
Hola:

Otra forma de descartar el ruido es que pongas un zener de 2.5 V. Este regula el voltaje y el ruido deberia ser mucho meno que con el pot.

Desconectado borre4

  • PIC10
  • *
  • Mensajes: 15
Re: Ajuste ADC dspic30F4011
« Respuesta #25 en: 13 de Diciembre de 2011, 14:10:17 »
Citar
Publicado por: MerLiNz
Insertar Cita
si, piensa que las resistencias normales tienen un 5% de error, ademas la temperatura tambien les influye, las hay de 1% quizas con esas te de menos.

Una buena prueba que puedes hacer es colocar un polimetro en la salida del pot, si es un polimetro de precision veras que si varia la tension, con esto ya sabes que el problema es de margen de error y no de tu programa.

Hola merlinz ya probe con el multimetro a la entrada del analogico y si varia algo el voltaje es minimo, entre 0.0001 y.0008 volts aunque viendolo detalladamente si me puede afectar ya que a la entrada tengo 5 volts y con 10 bits tengo una unidad cada 0.0048828125 volts

Citar
Publicado por: fram_22
Insertar Cita
Hola:

Otra forma de descartar el ruido es que pongas un zener de 2.5 V. Este regula el voltaje y el ruido deberia ser mucho meno que con el pot.

Hola fram me podrias decir en donde conectar el zener?. Va conectado a Vdd desde AN0 asi como el capacitor de 100nF a VSS? Se tiene que sustituir el pot o es un complemento. Gracias
Saludos

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: Ajuste ADC dspic30F4011
« Respuesta #26 en: 13 de Diciembre de 2011, 23:11:08 »


Hola fram me podrias decir en donde conectar el zener?. Va conectado a Vdd desde AN0 asi como el capacitor de 100nF a VSS? Se tiene que sustituir el pot o es un complemento. Gracias

Checa el esquema que te anexo. El valor de la resistencia es para limitar la corriente del zener, esta dependera de la potencia del mismo.

Desconectado borre4

  • PIC10
  • *
  • Mensajes: 15
Re: Ajuste ADC dspic30F4011
« Respuesta #27 en: 14 de Diciembre de 2011, 00:27:30 »
hola,

intentare lo del zener gracias
Saludos

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: Ajuste ADC dspic30F4011
« Respuesta #28 en: 14 de Diciembre de 2011, 00:47:29 »
ok espero sirva de algo!

Desconectado Alber_pic

  • PIC10
  • *
  • Mensajes: 6
Re: Ajuste ADC dspic30F4011
« Respuesta #29 en: 04 de Enero de 2014, 07:11:16 »

Hola , este post es de hace unos años pero no veo como acaba el asunto de la oscilación.

He tenido ese problema hace pocos dias. En mi caso la oscilación( muy pequeña, 1 o 2 bit sobre 10bit)  coincidia con la frecuencia del cuarzo.

Tengo un pin (PWM) con una F = 10khz. que ataca un transmisor y la frecuencia de salida del TX tiene residuos de la F del cristal.

No lo tengo resuelto aún pero supongo que si coloco unas resistencias y unos condensadores a modo de filtro pasa bajos algo debe filtrar.

Como no sabia como solucionarlo hice una rutina que en lugar de guardar y manipular un solo valor del ADC lo hacia con dos valores : ADC_max y ADC_min y con eso me fuí apañando.

Saludos


 

anything