Hola chicos,
Hará ya un tiempo creé un medidor de temperatura para pt100, con el cual tuve algunos problemas y ya comente por el foro. Ahora he querido mejorar el programa y el hardware y me he topado con un problema nuevo, que se me escapa y no veo.
Primero os pongo en situación. El circuito se basa en meter una corriente a través de la pt100 y leer la caida de tensión en sus extremos. El generador de corriente es un lm317 y la caida de tensión se amplifica con un amplificador LM324N.
El hardware parece estar funcionando bien. Y el software también. Pero trasteando me dio por tocar dentro del circuito y ¡tachan! el arduino se reinicia.
Video del circuito funcionando.
En este video vereis como al tocar el circuito se produce un ruido que altera la señal analogica, en este caso la información que se muestra es la resistencia que esta midiendo. Y no se producen reinicios. He visto que el ruido no es muy importante pero aun así me “mosquea”.
En este otro video, si se produce fallo. ¿Cual es la diferencia? Una línea de código.
// LECTURA DE UN CANAL: devuelve el valor de temperatura y lo guarda en registro apropiado.
int readChannel(int ch)
{
float analogvoltage, voltage, resistance, temperature;
analogvoltage=(analogRead(ch+A0)*VREF)/1023.0;
if ( analogvoltage==0.0 )
{
holdingRegs[ch]=0;
return 0;
}
voltage = (analogvoltage-VOFFSET)/GAIN;
resistance = voltage/IREF;
//temperature = (resistance-100.0)/0.385;
//temperature = ((resistance-100.0)*1000.0)/385;
holdingRegs[ch]=(int)temperature;
return 1;
}
Este es el código que utilizo en el programa. Básicamente una operación matemática. Leo la tensión de la entrada analógica (si esta es cero, significa que no hay nada enchufado), calculo el voltage de la resistencia, quitandole la tensión de offset y dividiendo por la ganancia del amplificador, calculo la resistencia dividiendo por la corriente y por último aplico la fórmula de la pt100.
T = (R-100)/0.385.
La única diferencia entre el primer video y el segundo es el cálculo de la temperatura y que en holdingRegs guardo la resistencia en el primero, la temperatura en el segundo. El resto de código es exactamente igual. Pero en el primero se reinicia y el segundo si.
Que conste que no se cuelga si no toco y mide la temperatura bien. Pero si toco malo. Y he comprobado que la diferencia de tensión de tocar y no tocar es del orden de 0.02 voltios.
Dejo el esquema de una etapa (el resto son iguales) y todo el código del programa comprimido como attachment.
A ver si alguien me puede dar inspiración porque no veo el problema, no se si es software (si quito esa linea funciona y no se reincia aunque toque) o si es hardware…
ArduPt100.zip (1.97 KB)