steinhart_hart: Beta Parameter uom dimensions
The Beta Parameter is not dimensionless, and has unit kelvin. Incorporate that into the type system.
This commit is contained in:
parent
9d89104f50
commit
8b0ad14311
|
@ -34,11 +34,13 @@ use uom::{
|
|||
ElectricPotential,
|
||||
ElectricalResistance,
|
||||
ThermodynamicTemperature,
|
||||
TemperatureInterval,
|
||||
},
|
||||
electric_current::ampere,
|
||||
electric_potential::volt,
|
||||
electrical_resistance::ohm,
|
||||
thermodynamic_temperature::degree_celsius,
|
||||
temperature_interval::kelvin,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -243,7 +245,7 @@ impl Handler {
|
|||
use super::command_parser::ShParameter::*;
|
||||
match parameter {
|
||||
T0 => sh.t0 = ThermodynamicTemperature::new::<degree_celsius>(value),
|
||||
B => sh.b = value,
|
||||
B => sh.b = TemperatureInterval::new::<kelvin>(value),
|
||||
R0 => sh.r0 = ElectricalResistance::new::<ohm>(value),
|
||||
}
|
||||
send_line(socket, b"{}");
|
||||
|
|
|
@ -3,10 +3,12 @@ use uom::si::{
|
|||
f64::{
|
||||
ElectricalResistance,
|
||||
ThermodynamicTemperature,
|
||||
TemperatureInterval,
|
||||
},
|
||||
electrical_resistance::ohm,
|
||||
ratio::ratio,
|
||||
thermodynamic_temperature::{degree_celsius, kelvin},
|
||||
temperature_interval::kelvin as kelvin_interval,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
|
@ -15,17 +17,21 @@ use serde::{Deserialize, Serialize};
|
|||
pub struct Parameters {
|
||||
/// Base temperature
|
||||
pub t0: ThermodynamicTemperature,
|
||||
/// Base resistance
|
||||
/// Resistance at base temperature
|
||||
pub r0: ElectricalResistance,
|
||||
/// Beta
|
||||
pub b: f64,
|
||||
pub b: TemperatureInterval,
|
||||
}
|
||||
|
||||
impl Parameters {
|
||||
/// Perform the voltage to temperature conversion.
|
||||
/// Perform the resistance to temperature conversion.
|
||||
pub fn get_temperature(&self, r: ElectricalResistance) -> ThermodynamicTemperature {
|
||||
let inv_temp = 1.0 / self.t0.get::<kelvin>() + (r / self.r0).get::<ratio>().ln() / self.b;
|
||||
ThermodynamicTemperature::new::<kelvin>(1.0 / inv_temp)
|
||||
let t0 = TemperatureInterval::new::<kelvin_interval>(self.t0.get::<kelvin>());
|
||||
|
||||
let inv_temp = 1.0 / t0 + (r / self.r0).get::<ratio>().ln() / self.b;
|
||||
let temp = 1.0 / inv_temp;
|
||||
|
||||
ThermodynamicTemperature::new::<kelvin>(temp.get::<kelvin_interval>())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,7 +40,7 @@ impl Default for Parameters {
|
|||
Parameters {
|
||||
t0: ThermodynamicTemperature::new::<degree_celsius>(25.0),
|
||||
r0: ElectricalResistance::new::<ohm>(10_000.0),
|
||||
b: 3800.0,
|
||||
b: TemperatureInterval::new::<kelvin_interval>(3800.0),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue