Skip to content

Commit

Permalink
First version, MVP of thermistor library #37
Browse files Browse the repository at this point in the history
  • Loading branch information
leocelente committed Mar 18, 2022
1 parent e052ebe commit dea4e32
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 0 deletions.
36 changes: 36 additions & 0 deletions thermistor/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Thermistor

Biblioteca para conversão de resistência para temperatura usando termistores.

## Exemplo
```c
b_param_t params = {.beta = 3900, .cal_resistance = 10e3 };
b_param_init(&params);

float R = 8000; // thermistor resistance
result_float result = b_param_convert(&params, R);
if(result.hasError){
printf("Invalid Temperature detected\r\n");
}

float temperature = result.value;
printf("T: %.2f C\r\n", temperature);
```
## Documentação
A intenção da biblioteca é conter multiplos métodos de conversão.
Atualmente foi implementado o _beta-parameter_ ou _b-value_. Ele é uma simplificação
da equação de Steinhart–Hart, que é uma aproximação logarítimica de 3ª ordem da
relação real.
A principal simplificação além do método escolhido, é o uso de um _beta_ constante.
Alguns datasheets de termistores disponibilizam _betas_ que variam com a faixa
de temperatura escolhida.
Geralmente o valor da resistência em 25°C é a principal especificação do termistor
o _beta_ pode ser mais dificil de encontrar.
## Referências
[Documento Interno] Controle Térmico das Baterias - Gabriel Kenji (@18950)
41 changes: 41 additions & 0 deletions thermistor/thermistor.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* b_parameter.c
*
* Created on: Mar 17, 2022
* Author: leocelente
*/

#include <math.h>
#include <thermistor.h>

static float to_celcius(float kelvin) {
return kelvin - 273.15f;
}

error_t b_param_init(b_param_t *params) {
if (params->beta <= 0.f) {
return ERROR;
}

if (params->cal_resistance <= 0.f) {
return ERROR;
}

// TODO: do actual checks
return SUCCESS;
}

result_float b_param_convert(b_param_t const *params, float resistance) {
float beta = params->beta;
float R0 = params->cal_resistance;
float K = beta/(log( resistance / R0) + (beta / T0));

result_float result = { .value = to_celcius(K), .hasError = 0 };

if (K < 0 || isnan(K) || !isfinite(K)) {
result.hasError = ERROR;
}

return result;

}
36 changes: 36 additions & 0 deletions thermistor/thermistor.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* b_paramter.h
*
* Created on: Mar 17, 2022
* Author: leocelente
*/

#ifndef INC_THERMISTOR_H_
#define INC_THERMISTOR_H_

#include "platform/platform.h"

#define T0 (25.0f + 273.15f)


// Conversion Parameters for Beta-Parameter method
typedef struct {
// B-parameter of thermistor
float beta;
// Resistance expected at 25C
float cal_resistance;
} b_param_t;

/**
* Checks calibration data is valid for the method
*/
error_t b_param_init(b_param_t *params);

/**
* Converts measured resistance in Ohms to temperature in degree Celcius
* Using the Beta-Parameter method
*/
result_float b_param_convert(b_param_t const * params, float resistance);


#endif /* INC_THERMISTOR_H_ */

0 comments on commit dea4e32

Please sign in to comment.