steinhart_hart: fix equation

This commit is contained in:
Astro 2020-03-19 22:56:14 +01:00
parent bec7019f3a
commit 2e72a03b93
3 changed files with 10 additions and 21 deletions

View File

@ -110,7 +110,7 @@ pub enum PidParameter {
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub enum ShParameter { pub enum ShParameter {
T0, T0,
R, B,
R0, R0,
} }
@ -353,7 +353,7 @@ fn steinhart_hart_parameter(input: &[u8]) -> IResult<&[u8], Result<Command, Erro
let (input, _) = whitespace(input)?; let (input, _) = whitespace(input)?;
let (input, parameter) = let (input, parameter) =
alt((value(ShParameter::T0, tag("t0")), alt((value(ShParameter::T0, tag("t0")),
value(ShParameter::R, tag("r")), value(ShParameter::B, tag("b")),
value(ShParameter::R0, tag("r0")) value(ShParameter::R0, tag("r0"))
))(input)?; ))(input)?;
let (input, _) = whitespace(input)?; let (input, _) = whitespace(input)?;

View File

@ -243,7 +243,7 @@ fn main() -> ! {
channel, channel,
); );
let _ = writeln!(socket, "- t0={}", state.sh.t0); let _ = writeln!(socket, "- t0={}", state.sh.t0);
let _ = writeln!(socket, "- r={}", state.sh.r); let _ = writeln!(socket, "- b={}", state.sh.b);
let _ = writeln!(socket, "- r0={}", state.sh.r0); let _ = writeln!(socket, "- r0={}", state.sh.r0);
let _ = writeln!(socket, ""); let _ = writeln!(socket, "");
} }
@ -355,10 +355,9 @@ fn main() -> ! {
use command_parser::ShParameter::*; use command_parser::ShParameter::*;
match parameter { match parameter {
T0 => sh.t0 = value, T0 => sh.t0 = value,
R => sh.r = value, B => sh.b = value,
R0 => sh.r0 = value, R0 => sh.r0 = value,
} }
sh.update();
let _ = writeln!(socket, "Steinhart-Hart equation parameter updated"); let _ = writeln!(socket, "Steinhart-Hart equation parameter updated");
} }
Command::PostFilter { channel, rate } => { Command::PostFilter { channel, rate } => {

View File

@ -4,38 +4,28 @@ use num_traits::float::Float;
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct Parameters { pub struct Parameters {
pub t0: f64, pub t0: f64,
pub r: f64, pub b: f64,
pub r0: f64, pub r0: f64,
r_fact: f64,
} }
impl Parameters { impl Parameters {
/// Update the cached r_fact
pub fn update(&mut self) {
self.r_fact = (self.r / self.r0).ln();
}
/// Perform the voltage to temperature conversion. /// Perform the voltage to temperature conversion.
/// ///
/// Result unit: Kelvin /// Result unit: Kelvin
/// ///
/// TODO: verify /// TODO: verify
pub fn get_temperature(&self, b: f64) -> f64 { pub fn get_temperature(&self, r: f64) -> f64 {
let inv_temp = 1.0 / self.t0 + self.r_fact / b; let inv_temp = 1.0 / self.t0 + (r / self.r0).ln() / self.b;
1.0 / inv_temp 1.0 / inv_temp
} }
} }
impl Default for Parameters { impl Default for Parameters {
fn default() -> Self { fn default() -> Self {
let mut p = Parameters { Parameters {
t0: 0.001_4, t0: 0.001_4,
r: 0.000_000_099, b: 0.000_000_099,
r0: 5_110.0, r0: 5_110.0,
r_fact: 0.0, }
};
p.update();
p
} }
} }