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
(http://i108.photobucket.com/albums/n18/sasmshiel/SENSORESPRESION.jpg)
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.
(http://i108.photobucket.com/albums/n18/sasmshiel/ESQUEMAELECTRICO.jpg)
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:
(http://i108.photobucket.com/albums/n18/sasmshiel/ESQUEMADEBLOQUES.jpg)
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
Hola chicos!!
el INA128 si lo he podido encontrar aqui en sevilla y es practicamente igual al AD620 en la practica.
He estado leyendo mucho sobre este en internet y en su datasheet la manera de conectarlo al sensor creo que es la siguiente:
(http://i108.photobucket.com/albums/n18/sasmshiel/INA128.jpg)
Y la formula para conseguir la ganancia es la que he puesto tambien en la imagen.
Esta salida en principio podria ingresarla al pic directamente y que este sense el voltaje que esta entregando el sensor sin nada mas entre medias no???
Si vas a conectarlo directo al PIC, te recuerdo que solo dispones de 10 bits de resolucion (solo hay uno o dos de 12 bits)
MGLSOFT en principio no necesito tanta resolucion con 10 bits es mas que suficiente, pero por si acaso he estado mirando el MCP3201 para comunicarme por SPI, pero ya te digo no con los 10 bits del PIC en principio es mas que suficiente.
Otra cosa si podeis ver en el dibujo que he realizado al INA128 lo he alimentado a +5v y gnd en vez de +/-5v puede haver algun problema¿¿??? ya que el AD620 si me permitia esta conexion