Welcome! Log In Create A New Profile

Advanced

Termistor 100K

Posted by Z80user 
Termistor 100K
April 21, 2014 03:10PM
Tengo un Ramps 1.4 + Arduino mega2560... alimentado por USB desde un PC
Recientemente he comprado un porron de termistores de 100K, pero no termino de encontrar una tabla para dicho termistor

he probado el codigo del "Analog Read Serial" del arduino y los numeros me bailan de mala manera asi que le he puesto una rutina para minimizar la variacion que provoca.

/*
   AnalogReadSerial
   Reads an analog input on pin 0, prints the result to the serial monitor.
   Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.
  
  This example code is in the public domain.
  */

// the setup routine runs once when you press reset:
void setup() {
   // initialize serial communication at 9600 bits per second:
   Serial.begin(9600);
}

// the loop routine runs over and over again forever:
  int sensor13 = 0;
  int sensor14 = 0;
  int sensor15 = 0;

void loop() {
  
   int sensorValue13 = analogRead(A13);
   delay(10);        // delay in between reads for stability
   int sensorValue14 = analogRead(A14);
   delay(10);        // delay in between reads for stability
   int sensorValue15 = analogRead(A15);
   delay(10);        // delay in between reads for stability
  sensor13 = (((sensor13*31)/32)+sensorValue13/32);
  sensor14 = (((sensor14*31)/32)+sensorValue14/32);
  sensor15 = (((sensor15*31)/32)+sensorValue15/32);

   Serial.print("A");
   Serial.print(sensorValue13);
   Serial.print(" B");
   Serial.print(sensorValue14);
   Serial.print(" C");
   Serial.print(sensorValue15);
   
   Serial.print("A");
   Serial.print(sensor13);
   Serial.print(" B");
   Serial.print(sensor14);
   Serial.print(" C");
   Serial.println(sensor15);
   
   delay(10);        // delay in between reads for stability
}
tocando el termistor con los dedos sale un valor de 256-257 bastante estable, sin ellos algo mas frio se situa sobre los 280, no se a cuanto estamos en la habitacion, a temperatura ambiente la resistencia mide sobre 102K, con el dedo encima 72.6

Segun la tabla que veo en el "SuperEstable"
//// Thermistor settings:
// 1 is 100k thermistor
// 2 is 200k thermistor
// 3 is mendel-parts thermistor
// 4 is 10k thermistor
// 5 is ParCan supplied 104GT-2 100K
// 6 is EPCOS 100k
// 7 is 100k Honeywell thermistor 135-104LAG-J01

Los valores de temperatura que saldrian serian estos
con el 1 sobre 151ºC
con el 2 sobre 156ºC
con el 3 mas de 150ºC
con el 4 mas de 70ºC
con el 5 sobre 147ºC
con el 6 mas de 130ºC
con el 7 mas de 160ºC

No se si puede haber algun problema por leer demasiado rapido el valor analogico, el USB no es lo mejor para alimentarlo y deberia alimentar tambien la Ramps con 12V, o la ramps tiene algo mal.
NOTA: solo tengo un pololu enchufado pero sin motor.
Firmware, el Sprinter superestable que decia en el tutorial obijuan y la ultima version del pronterface.
lo curioso es que si no tengo enchufado ningun termistor la temperatura que marca es casi la que hay con la sonda midiendo la temperatura ambiente
Re: Termistor 100K
April 26, 2014 02:41AM
Hola,
la tabla te la puedes construir tú mismo sabiendo el coeficiente B de ese NTC, hay hojas excell por ahí.
Re: Termistor 100K
May 01, 2014 05:39AM
El problema es que me bailan las lecturas del ADC y no tanto que el termistor este mal o algo, haciendo las tablas con los valores me sale sobre 160-165ºC a temperatura ambiente, y esto con sobremuestreo o cono la rutina que he hecho, pero si no la pongo las temperaturas leidas oscilan en el rango 150-175, lo que para nada es una precision aceptable y mas a unos 25ºC a los que esta la habitacion.

Resistencia R1 4.7K
Resistencia NTC 102K
con estos valores deberia de leer 977-978 cuando en realidad leo valores entre 200 y 300

(Por esto es por lo que he puesto el mensaje)

Tambien he probado en las 3 patas que hay en la ramps 1.4 que tengo, pero obtengo los mismos resultados en las 3, he medido las resistencias de la placa individualmente y dan 4.7K El condensador no tengo manera de comprobarlo pero tampoco creo que aun estando mal varien los resultados:
-. Si estubiese en corto, siempre mediria lo mismo pero calentando la resistencia con los dedos varia
-. Si estubiese en abierto, no influiria
-. Si funcionase bien mantendria un valor estable en la salida

Como es improbable que los 3 condensadores esten en diferentes estados lo mas normal seria que estubiesen bien.

Otra posible causa seria la pista desde el pin hasta el atmega, pero tambien esta correcta
--------------------------------
Tengo esta duda:
No se si el USB no es lo suficientemente estable (estoy usando un PC para alimentarlo con una XFX PRO850W y la placa es una ASUS P6T WS PRO)
Re: Termistor 100K
May 05, 2014 11:25PM
Hola,
son diferencias que indican algún error gordo. Tendrás que ir comprobando, ahí hay algo que estás haciendo mal.
Si tuvieras un tester, podrías medir directamente la tensión que da el termistor a la entrada ADC. Tienes un divisor de tensión con la resistencia de 4.7K y el NTC, por otra parte sabes la resistencia que debe tener el NTC a la temperatura de la habitación (mirando la tabla, que supongo estás usando la correcta, eso también tienes que comprobar). Con todo eso deberías poder verificar si la tensión que se pasa a arduino está dentro de lo esperable.

Edited 1 time(s). Last edit at 05/05/2014 11:26PM by paxkuali.
Re: Termistor 100K
May 06, 2014 06:00PM
Resistencia desde GND
T0 T1 T2
5,56 5,61 5,55 Sin thermistor
5,27 5,32 5,26 Con thermistor (Normal)
5,11 5,14 5,10 Con thermistor (Dedo)

Voltaje desde GND
4,695 4,69 4,70 Sin thermistor
4,58 4,58 4,59 Con termistor (dedo)
4,56 4,54 4,54 Con termistor (dedo2)

normal (temperatura ambiente)
dedo = mi dedo, estoy algo resfriado
dedo2 = dedo de mi madre algo mas resfriada que yo

He tomado 2023 valores consecutivos, la habitacion esta algo caliente, pero no debia de variar demasiado, en donde esta el sensor no ha variado apenas la temperatura yhe obtenido estos valores

NOTA: Termistor colocado en T0...Sin termistores en T1, ni T2
854,52 1164,66 756,36 Varianza
336,31 345,52 341,47 Media-Geometrica
335,05 343,85 340,37 Media-artirmetica
336,00 345,00 340,00 Mediana
272 277 291 Min
391 409 393 Max

Las medias son bastante igualadas, pero la variacion entre max y min es demasiado
en T1 la precision de las resistencias no es tan buena como en T0 y T2 que son practicamente identicas

He mirado la resistencia entre T0,T1 y T2 hasta las patillas del Atmega2560 y son correctas (comprobado en el pin, no en la soldadura) me da dado entre 0.1 y 0.2ohm al medirlo, que se puede considerar error del multimetro/tester y resistencia del contanto de la tira de pines.

NOTA: Hace mas calor que el otro dia
Re: Termistor 100K
May 07, 2014 05:58PM
He creado otra version algo mas compleja y he añadido el codigo de [hacking.majenko.co.uk] tal cual, no he hecho modificaciones para adaptarlo al arduino mega (ATmega2560)

/*
   AnalogReadSerial
   Reads an analog input on pin 0, prints the result to the serial monitor.
   Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.
  
  This example code is in the public domain.
  */

// the setup routine runs once when you press reset:
void setup() {
   // initialize serial communication at 9600 bits per second:
   analogReference(DEFAULT);
   Serial.begin(9600);
}

// the loop routine runs over and over again forever:
  long sensor13 = 512;
  long sensor14 = 512;
  long sensor15 = 512;
unsigned int ADCValue;
double Voltage;
double Vcc;

long readVcc()
{ long result;
  // Read 1.1V reference against AVcc 269-268
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = 1125300L / result; // Back-calculate AVcc in mV
  return result;
}
void loop() {
   Serial.println( readVcc(), DEC );
   Vcc = readVcc()/1000.0;
   ADCValue = analogRead(0);
   Voltage = (ADCValue / 1023.0) * Vcc;
   delay(1000);
  
   int sensorValue13 = analogRead(13);
   delay(10);        // delay in between reads for stability
   sensorValue13 = analogRead(13);
   int sensorValue14 = analogRead(14);
   delay(10);        // delay in between reads for stability
   sensorValue14 = analogRead(14);
   int sensorValue15 = analogRead(15);
   delay(10);        // delay in between reads for stability
   sensorValue15 = analogRead(15);
   delay(10);        // delay in between reads for stability
   
  sensor13 = ((sensor13*31)/32)+sensorValue13;
  sensor14 = ((sensor14*31)/32)+sensorValue14;
  sensor15 = ((sensor15*31)/32)+sensorValue15;

   Serial.print(" V");
   Serial.print(Voltage);
   Serial.print(" A");
   Serial.print(sensorValue13);
   Serial.print(" B");
   Serial.print(sensorValue14);
   Serial.print(" C");
   Serial.print(sensorValue15);
   
   Serial.print(" A");
   Serial.print(sensor13/32);
   Serial.print(" B");
   Serial.print(sensor14/32);
   Serial.print(" C");
   Serial.println(sensor15/32);
   
   delay(10);        // delay in between reads for stability
}

ahora salen valores algo mas normales, pero el -1 y el 1125300 me parecen valores inusuales
V-0.00 A642 B555 C490A636 B559 C481
1125300
 V0.48 A637 B557 C484A636 B559 C481
-1
 V0.48 A629 B561 C475A635 B559 C480
-1
 V493.90 A624 B565 C469A635 B559 C480
1102
 V0.48 A623 B568 C466A635 B560 C480
1100
 V-0.00 A622 B571 C466A634 B560 C479
1101
 V0.48 A625 B572 C468A634 B560 C479
1102
 V0.47 A630 B568 C472A634 B560 C478
El valor de 634 esta sobre 95-100 ºC (aqui hay un termistor)
El valor de 560 esta sobre 105-106 ºC (aqui hay un termistor)
El valor de 479 esta sobre 112-115ºC (sin termistor)

Cambiando el codigo ahora la rutina es mas precisa y las lecturas teoricamente son con la misma rutina analogRead() pero ahora tienen un valor completamente distinto, asi que estoy pensando en hacer mi propia rutina para leer el ADC

He probado a compilarlo y probarlo la version 1.0.5-r2 y con la 1.5.6-r2

P.D.Al final tengo que reinventar la rueda "analogRead()"
Re: Termistor 100K
May 17, 2014 02:12PM
Ya he encontrado el problema. al leer el puerto y ver los calores en una hoja de calculo (1º foto) y eliminar los valores que no son correlativos (2º foto) he obtenido una grafica mas limpia, y ahora si los valores son mas "normales" dentro del ruido que tiene, aun asi valores entre 300 y 550 no son valores correctos, por la grafica parece que es la grafica de carga de un condensador y su descarga.

Segun el datasheet del Atmega 2560 entre VCC y AVCC deberia de existir una bobina y un condensador con respecto a masa,
aunque hay en algun sitio que he leido que han tenido problemas al programarlo de esta forma.

En el Arduino Mega, esta este error de diseño u omision deliverada, la bobina y el condensador hacen un filtro paso bajo, por lo que seguramente este ruido se vera muy disminuido con respecto a lo que veo.

Aun asi los valores que leo deberian ser bastante mas grandes, en torno a los 950-960 al leer el valor del ADC y no los 300-550 que leo actualmente, el caso es que segun el programa que haga correr me dan unos valores u otros, con lo cual aun no he terminado de determinar donde esta el error, en cualquier caso la proxima semana espero poder comprar la bobina y el condensador para enmendar el problema, comprare una resistencia de 100K asi tendre algo para comprobar los 25ºC sin conocer la temperatura real de la habitacion.
Attachments:
open | download - IMG-20140513-WA0009.jpg (49.5 KB)
open | download - IMG-20140513-WA0011.jpg (61.2 KB)
Sorry, only registered users may post in this forum.

Click here to login