diff --git a/thermistor/README.md b/thermistor/README.md new file mode 100644 index 0000000..887a2e1 --- /dev/null +++ b/thermistor/README.md @@ -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(¶ms); + +float R = 8000; // thermistor resistance +result_float result = b_param_convert(¶ms, 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) diff --git a/thermistor/thermistor.c b/thermistor/thermistor.c new file mode 100644 index 0000000..f1fdfbb --- /dev/null +++ b/thermistor/thermistor.c @@ -0,0 +1,41 @@ +/* + * b_parameter.c + * + * Created on: Mar 17, 2022 + * Author: leocelente + */ + +#include +#include + +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; + +} diff --git a/thermistor/thermistor.h b/thermistor/thermistor.h new file mode 100644 index 0000000..c0fceb8 --- /dev/null +++ b/thermistor/thermistor.h @@ -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_ */