Hola chicos que tal??
No sabia bien donde iba a escribir el tema (lenguage C, Foro Tecnico, o aqui) pero al final me decidi por este por que en realidad es un proyecto.
Bueno voy a detallar un poco que es lo que tengo.
Esto realizando el prototipo de un caudalimetro electronico y he conseguido estos sensores de
SENSORTECHNICS Estos sensores son
lineales, entregan una tension como he dicho lineal en la salidas 4 y 2 del sensor. Esta tension es proporcional a la alimentacion con la que este alimentado el sensor. Este puede ser alimentado con una tension de +3,5v a +12v (+3,5 es lo menos con lo que lo he alimentado). Por lo que a la salida tendremos una tension lineal que rondaria de los 1,42 mV a 228,2 mV con una alimentacion de 4,5v.
La manera "
analogica" de medir el caudal seria con mecanismo que consta de dos cilindros milimetreados uno que muestra un 0 cm en columna de agua y otro con metro y medio para medir la cantidad de agua en columna de agua que pasa por la acequia. Si sube el volumen de agua en la acequia va subiendo el nivel de agua en el segundo cilindro con lo que tendremos el volumen de agua en columna de agua que circula por la acequia.
Cuando el volumen de agua esta en
0cm el sensor nos entrega
1,42mV y cuando esta a
metro y medio de volumen el sensor entrega
228,2mV.Claro esta que esta tension entregada tengo que amplificarla para que el pic mediante el ADC pueda trabajar mejor con ella.
Lo que he hecho es con un amplificador operacional el LM741 en configuracion de amplificador de ganacia
no inversor:
Con lo que consigo una ganancia de 21 a su salida.
AV = 1 + R2 / R1
AV = 1 + 200K / 10K = 21
- Con lo que conseguimos que cuando este en 0 cm:
1,42mV * 21 = 0.029mV 228,2mV *21 = 4.79 V
Lo que no se es si me aconsejariais poner un seguidor de tension entre el sensor y el amplificador de ganancia? Actualmente tengo esto montado en la placa:
solo tomo referencia del valor amplificado positivo y creo que es aqui el fallo que estoy teniendo. El programa que tengo cargado en el PIC es el siguiente:
#include <16f876A.h>
#device adc=10 //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#define use_portb_lcd TRUE //definir portb lcd
#include<lcd.c>
//libreria manejo lcd
#use rs232(baud=19200, xmit=pin_c6, rcv=pin_c7)
///PROGRAMA
void main()
{
int16 q;
float mm,p,mv,h,x;
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
lcd_init();
while(1)
{
set_adc_channel(0);
delay_us(20);
q = read_adc();
p = 5 * q / 1024.0;
mm = p * 1000.0; //paso voltios a milivoltios
mv = mm / 21; // divido el 21 de ganancia del operacional
x = mv / 4.5 * 29.762; // ecuacion para pasar de milivoltios a cm en
h = x - 9.4018; // columna de agua.
/* printf("\r\n ADC = %4ld",q);
printf("\r\n Voltage = %01.2f mV",mv);
printf("\r\n altura = %01.2f milimetros",h);
DELAY_MS(200);
printf("\f");*/
//lcd_gotoxy(1,1);
//printf(lcd_putc,"ADC = %4ld",q);
lcd_gotoxy(1,1);
printf(lcd_putc
,"Voltage = %01.2f mV",p
); // muestro voltage de entrada adc //DELAY_MS(500);
lcd_gotoxy(1,2);
printf(lcd_putc
,"Altura = %01.2fcm",h
); // muestro altura en cm. DELAY_MS(500);
//printf(lcd_putc,"f " ) ; //borra pantalla del lcd
}
}
Despues de probarlo todo el fallo es el siguiente: La salida del amplificador la mido con el tester y el pic lee perfectamente el voltage (entre output + amplificado y gnd). Despues haciendo yo con el voltage obtenido los calculos me sale la altura y el pic la hace tambien bien. Pero el problema es que yo solo estoy cogiendo el valor positivo que entrega el amplificador con respecto a gnd y esto me da un voltage distinto a si yo cojo el valor + amplificado y el output - del sensor. Por lo que la ecuacion no me da la altura real en la columna de agua.
Por lo creo que el PIC esta midiendo entre gnd y output amplificado +, cuando en realidad tenia que estarlo haciendo entre output - y output amplificado +.
Puede ser ese
mi error??
Espero haberme explicado lo mejor posible y siento haberme extendido demasiado.
Espero vuestra ayuda.
GRACIAS