Autor Tema: Lectura inestable ADC 12bits con acelerómetro  (Leído 1998 veces)

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

Desconectado noral

  • PIC10
  • *
  • Mensajes: 17
Lectura inestable ADC 12bits con acelerómetro
« en: 18 de Mayo de 2014, 20:16:27 »
Buenas,

Estoy desarrollando un proyecto para medir la aceleración de un movimiento lineal de apenas 2 segundos de duración. Para ello estoy utilizando un acelerómetro analógico LIS344ALH y un PIC24FJ128GC010. Para la conversión utilizo uno de los ADC internos de 12 bits y estoy trabajando con el compilador CCS.

La primera prueba que hice para ver que funcionaba el código escrito y el ADC fue la clásica con un potenciómetro, la cual resultó satisfactoria a la primera. No se apreciaba variación en la lectura del valor.

Al conectar una de las salidas del acelerómetro en el mismo canal del ADC, la lectura se volvió muy inestable (aún teniendo el acelerómetro totalmente fijo).

He leído que una de las soluciones es trabajar tomando medias, pero considero que no es una solución óptima para el proyecto que quiero desarrollar. También he leído que la colocación de un condensador de 0.1uF entre las tensiones de referencia del ADC ayuda a ello (esto fue lo primero que hice al iniciar el proyecto).

Después de pasar varias horas, no he encontrado ninguna solución que me ayude a resolver mi problema.

Alguien podría echarme una mano con ello?

Muchas gracias de antemano.

Código: [Seleccionar]
#include <24FJ128GC010.H>
#device adc=12

#fuses FRC, NOWDT, NOPROTECT, BROWNOUT, ICSP1
#use delay(clock = 8000000)
#include <flex_lcd.c>

//==========================

float tension;
signed int32 read;

void main()
{
    setup_oscillator(OSC_INTERNAL,8000000);

    lcd_init();
    delay_ms(30);
    setup_adc_ports(sAN6,VSS_VDD);
    setup_adc(ADC_CLOCK_INTERNAL);
    set_adc_channel(6);

   while(1){

        delay_ms(1000);
        read = read_adc();
        tension = (read*3.11)/4095;
        printf(lcd_putc,"\fE: %2.2f",tension);
        printf(lcd_putc,"\n%u",read);


   }
}


Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Lectura inestable ADC 12bits con acelerómetro
« Respuesta #1 en: 18 de Mayo de 2014, 21:08:03 »
Hola

Sí, las lecturas analógicas de esos acelerómetros siempre dan lata. Es difícil medirlos bien.

La solución ya la mencionaste, promediar y agregar capacitores en la terminal. También agrega capacitores de 0.1uF en Vdd, Vss, AVdd, y AVss.

Haz un filtro RC entre la salida analógica y el ADC del PIC.

La promediación es más amable si usas rotaciones.

Código: [Seleccionar]
int16_t Read_Clean(void)
{
   int32_t read = 0;
   int i = 32;
   while(i--)
       read += read_adc();
   return (read >> 5);
}

Hoy en día ya hay acelerómetros SPI o I2C que ya dan la señal limpia. Ellos traen ADC interno.
« Última modificación: 18 de Mayo de 2014, 23:44:56 por migsantiago »

Desconectado noral

  • PIC10
  • *
  • Mensajes: 17
Re: Lectura inestable ADC 12bits con acelerómetro
« Respuesta #2 en: 18 de Mayo de 2014, 21:26:44 »
Gracias por la ayuda migsantiago ;)

No es la solución que me gustaría implementar, pues no entiendo porque para el potenciometro las lecturas son exactas y para el acelerómetro no. Tanta diferencia hay?

De todos modos, podrías aclararme como introducir el código que me adjuntas? No logro hacerlo correr :(

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Lectura inestable ADC 12bits con acelerómetro
« Respuesta #3 en: 18 de Mayo de 2014, 23:04:36 »
Es que los acelerómetros son más complejos que un potenciómetro. Si gustas busca en línea y checa qué traen adentro. Los que yo leí hace tiempo eran unas palanquitas que se enchuecaban con respecto a la aceleración que traen. No sé por qué les pega tanto el ruido, pero es algo que tienes que limipiar por hardware y por software.

Sí, te puedo ayudar, pero dime por qué no lo puedes correr.

Edité la función ;)
« Última modificación: 18 de Mayo de 2014, 23:45:11 por migsantiago »

Desconectado noral

  • PIC10
  • *
  • Mensajes: 17
Re: Lectura inestable ADC 12bits con acelerómetro
« Respuesta #4 en: 20 de Mayo de 2014, 07:52:33 »
Conseguí estabilizar los valores!

El problema estaba en las tensiones de alimentación. Al mejorar la alimentación (microUSB a 5v directo a un LM317 para tener 3.3v constantes) he conseguido que los valores apenas varien +- 0.02v.

Creo que si aislo totalmente la alimentación de las tensiones de referencia del ADC y del acelerómetro las medidas serán aún más limpias.

Os sigo contando!

Gracias por la ayuda igualmente migsantiago  ((:-))

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Lectura inestable ADC 12bits con acelerómetro
« Respuesta #5 en: 20 de Mayo de 2014, 22:54:31 »
Muy bien  :mrgreen:


 

anything