generated from zenitheesc/new-zenith-template
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
First version, MVP of thermistor library #37
- Loading branch information
1 parent
e052ebe
commit dea4e32
Showing
3 changed files
with
113 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(¶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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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_ */ |