Files
physical/src/transducer/part/thermistor.rs
2024-07-10 16:32:38 -07:00

26 lines
765 B
Rust

use libm::{log, logf};
use crate::quantity::{Kelvins, Ohms};
/// Convert thermistor resistance to a temperature using beta parameter equation
pub fn convert_beta(
resistance: Ohms<f32>,
beta: f32,
reference_temp: Kelvins<f32>,
reference_resist: Ohms<f32>,
) -> Kelvins<f32> {
let kelvins = 1.0 / ((1.0 / reference_temp.0) + (1.0 / beta) * logf(resistance.0 / reference_resist.0));
Kelvins(kelvins)
}
/// Convert thermistor resistance to a temperature using Steinhart-Hart equation
pub fn convert_steinhart(
resistance: Ohms<f64>,
a: f64,
b: f64,
c: f64,
) -> Kelvins<f32> {
let log_omhs = log(resistance.0);
let kelvins = 1.0 / (a + b * log_omhs + c * log_omhs * log_omhs * log_omhs);
Kelvins(kelvins as f32)
}