• Martes 5 de Noviembre de 2024, 17:23

Autor Tema:  Como Adaptar Un Sensor Lineal De Movimiento  (Leído 3061 veces)

farmada

  • Miembro activo
  • **
  • Mensajes: 62
    • Ver Perfil
Como Adaptar Un Sensor Lineal De Movimiento
« en: Miércoles 22 de Noviembre de 2006, 02:48 »
0
Gente:

     Ha llegado a mis manos un sensor lineal inductivo al cual quiero sacarle provecho, por ejemplo para medir posicionamiento de cualquier cosa ( piston, nivel de agua en un tanque ) lo que se pueda ocurrir. El tema es que estoy teniendo problemas con la lectura de el mismo ya que no esta muy estable, es decir por ejemplo dejo el iman en una posicion sin tocarlo y cuando leo la entrada analogica este no me muestra siempre el mismo valor sino que me va tirando el valor correcto y erroneamente me muestra otros valores ( si por ejemplo esta en la posicion 234, ademas de ese valor puede ser que me tire 234,233,235,236 ). Igualmente les paso el programa que hice para leerlo el cual no creo que tenga problemas. Yo estoy pensando que el problema esta en que no lo estoy adaptando electricamente bien cuando lo conecto directo al PIC. Si alguno puede ayudarme les agradezco dado que estoy hace un tiempo con el y no loe encuentro la vuelta. Hice dos programas, uno que saca el promedio del maximo y otro que no pero no hay caso. Les adjunto la hoja de datos del sensor que baje de internet.
Cabe aclarar como veran que lo que leo lo envio por MAX232 a una hiperterminal

PROGRAMA CON PROMEDIO DE LA MEDIDA


#include <18f4525.h>
#fuses HS, NOWDT, NOPROTECT, NOLVP, NOBROWNOUT, PUT
#use delay(clock=20000000)
#use rs232(baud=57600, xmit=PIN_C4, rcv=PIN_C5)
#include <STDLIB.H>
#define Delay 5

float LeoSensor(int Sensor)
{
   int i = 0;
   float max, maxii;
   float min,minii;
   float ant = 0;
   float suma = 0;

   max = maxii = 0;
   min = minii = 255;
   
   set_adc_channel(Sensor);

   for (i=1;i<11;i++)
   {
      delay_us(10);
      ant = read_adc();
      if (ant>max)
         max = ant;
      if (ant<min)
         min = ant;
      suma+=ant;
   }
   ant = (suma - max - min)/8;
   return ant;
}

void main(void)
{
    int MinA, MaxA, sentidoA;
    int MinB, MaxB, sentidoB;
    long PosicionA,PosicionB;
    long i;
    boolean on = true;
   
   
    sentidoA  = 1;
    MaxA = MaxB = 0;
    MinA = MinB = 255;
   
        set_tris_c(0x00);
   set_tris_b(0x00);
   set_tris_a(0xFF);

   i = 0;   
    setup_adc_ports(AN0_TO_AN1);
    setup_adc(ADC_CLOCK_DIV_16);



   while(on)
   {
         PosicionA = LeoSensor(0);
         printf("%Lu \n", PosicionA);      
   }

}



AHORA LES PASO EL PROGRAMA SIN EL PROMEDIO


#include <18f4525.h>
#fuses HS, NOWDT, NOPROTECT, NOLVP, NOBROWNOUT, PUT
#use delay(clock=20000000)
#use rs232(baud=57600, xmit=PIN_C4, rcv=PIN_C5)
#include <STDLIB.H>
#define Delay 5

float LeoSensor(int Sensor)
{
   float ant = 0;

   set_adc_channel(Sensor);
   delay_us(10);
   ant = read_adc();

   return ant;
}

void main(void)
{
    int MinA, MaxA, sentidoA;
    int MinB, MaxB, sentidoB;
   long PosicionA,PosicionB;
   long i;
    boolean on = true;
   
   
    sentidoA = sentidoB = 1;
    MaxA = MaxB = 0;
    MinA = MinB = 255;
   
    set_tris_c(0x00);
    set_tris_b(0x00);
    set_tris_a(0xFF);

    setup_adc_ports(AN0_TO_AN1);
    setup_adc(ADC_CLOCK_DIV_16);



   while(on)
   {
         PosicionA = LeoSensor(0);
         printf("%Lu \n", PosicionA);      
   }

}



ARACTERITICAS DEL SENSOR

Auf dem Schuffel 9, D-58513 Lüdenscheid, Germany
Postfach 8130 D-58489 Lüdenscheid, Germany
Tel: + 49.2351.95870
Fax: + 49.2351.56491
www.mtssensor.de
JAPAN
Linearity error -0.3 mm ≤ EL ≤ 0.3 mm
Repeatability error -25µm ≤ ER ≤ 25µm
Hysteresis error -25µm ≤ EH ≤ 25µm
Temperature Drift -10µm/°K ≤ ETPWM≤ 10µm/°K
-20µm/°K ≤ ETvoltage≤ 20µm/°K
Current consumption 20mA ≤ Is ≤ 40mA
Operating temperature Operating temperature range:
-30°C ≤ AR ≤ 115°C
Power supply voltage 4.75V ≤ Vs ≤ 5.50V
Output load The PWM push-pull output is designed to
sink and source 1mA. Therefore, the
minimum impedance of the input side to
ground and /or + 5V should be the value of:
5000Ω ≤ RL
The capacity to ground is defined to:
CL ≤ 100pF
The load resistor for the voltage output
should be connected to the sensors ground
with a value of:
6kΩ ≤ RL
The capacity to ground is defined to:
CL < 100pF
Magnet The sensor is designed for use with magnet
part number
Package CSPI IP67
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Como Adaptar Un Sensor Lineal De Movimiento
« Respuesta #1 en: Miércoles 22 de Noviembre de 2006, 06:56 »
0
Hola Farmada!
Fijate en la hoja de datos del sensor, dice que la salida es una señal PWM, donde el Ton es proporcional a la distancia (hay una formula en el documento). Sin embargo, dice que el período de la señal puede estar entre 1.5 y 3 ms, es decir no es constante. Podría ser que este período varíe, por lo que variaría tu señal analógica resultante...
Mi idea: deja el ADC, y fijate de medir la duración del tiempo en alto (Ton) de la señal del sensor; podría ser con un modulo de captura ;)
En mi trabajo usamos transductores lineales, pero tienen una salida 4..20 mA, si te interesa te paso los datos.
Saludos :hola:

farmada

  • Miembro activo
  • **
  • Mensajes: 62
    • Ver Perfil
Re: Como Adaptar Un Sensor Lineal De Movimiento
« Respuesta #2 en: Miércoles 22 de Noviembre de 2006, 12:31 »
0
Huguen:

     Lo que decis es cierto pero en este caso no estoy utilizando la salida PWM. El sensor posee otra salida la que me entrega tension con un rango desde 1,19 volt hasta 4,5 volt
como maximo, quiere decir que estoy sensando en la entrada analogica del micro ese rango de tensiones. ( supongo que dentro de la carcasa del sensor hacen una primera adaptacion d la señal ya que el mismo debe utilizar un puente ya se weastone u otro para detectar el movimiento y deben acondicionar la señal mediante algun elemento activo dentro de el ). El problema es que tengo variaciones en las lecturas y no se como
poder adaptar y filtrar algun ruido que se filtre desde afuera.

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Como Adaptar Un Sensor Lineal De Movimiento
« Respuesta #3 en: Jueves 23 de Noviembre de 2006, 23:55 »
0
Hola Farmada!
Seguramente tiene un puente dentro, más algo de electrónica para entregar la salida...
Justamente estoy jugando con unos sensores de corriente por efecto Hall (el ACS706-5, se pueden conseguir muestras directamente de Allegro, jeje!!). Tambien tengo problemas de ruido; pasa que el margen de medida es de 0 a unos +/-15A, y para corrientes pequeñas afecta mucho el ruido. Estaba probando con una lampara, y al ser la corriente pequeña, influía mucho el ruido. Tomé "prestada" la plancha (mi señora se puso contenta, pero duro lo que una instrucción del micro!) y la cosa mejoró.
Como solución bastante aceptable para mi propósito, soldé un capacitor de 10n (fue el primero que encontré) a la entrada del AO (un buffer) y el resultado es más que aceptable. Además hago un promedio en el micro, y tomo el valor RMS de la señal. Tambien le resto un pequeño offset en programa, ya voy a ver como lo soluciono...
Probá con algún capacitor de filtro; con el tema ruido es muy difícil calcular un valor. Lo mejor es ir probando y viendo en el osciloscopio.
Probá en tu programa darle un poco más de 10us para el filtrado, probá con 100us o más. Y al promediar, usa como primer "medida" el resultado del último promedio.
También podrías usar un timer para hacer las medidas e ir promediando, asi el tiempo entre muestras se mantiene constante... :( Ahora veo algo... Normalmente el micro necesita al menos unos 15us para retener la tensión a medir (tiempo de muestreo), estás haciendo una demora de 10us... &lt;_&lt;  Probá darle un cachito más de tiempo!
En fín, el tema ruido, hace más ruido del que imaginamos...
Mantenenos al tanto!
Saludos! :hola:

farmada

  • Miembro activo
  • **
  • Mensajes: 62
    • Ver Perfil
Re: Como Adaptar Un Sensor Lineal De Movimiento
« Respuesta #4 en: Domingo 26 de Noviembre de 2006, 04:36 »
0
Huguen:


                   Gracias por tu ayuda. Estuve probando con el osciloscopio y solucione bastante bien los problemas poniendo un capacitor de 100 nf y otro de 10nf a masa.
Tambien lo que cambie segun tu recomendacion fue el tiempo a 20us en la espera para la conversion.
Muchas gracias.

Fernando