Compare commits

..

2 Commits

Author SHA1 Message Date
b3a6d16c3d steinhart_hart: Beta Parameter uom dimensions
The Beta Parameter is not dimensionless, and has unit kelvin.
Incorporate that into the type system.
2024-08-20 12:40:32 +08:00
c6040899dd ItecPin -> ITecPin 2024-08-12 13:02:22 +08:00
3 changed files with 6 additions and 10 deletions

View File

@ -24,7 +24,7 @@ pub struct Channel<C: ChannelPins> {
pub vref_meas: ElectricPotential,
pub shdn: C::Shdn,
pub vref_pin: C::VRefPin,
pub itec_pin: C::ItecPin,
pub itec_pin: C::ITecPin,
/// feedback from `dac` output
pub dac_feedback_pin: C::DacFeedbackPin,
pub tec_u_meas_pin: C::TecUMeasPin,

View File

@ -61,7 +61,7 @@ pub trait ChannelPins {
type DacSync: OutputPin;
type Shdn: OutputPin;
type VRefPin;
type ItecPin;
type ITecPin;
type DacFeedbackPin;
type TecUMeasPin;
}
@ -76,7 +76,7 @@ impl ChannelPins for Channel0 {
type DacSync = PE4<Output<PushPull>>;
type Shdn = PE10<Output<PushPull>>;
type VRefPin = Channel0VRef;
type ItecPin = PA6<Analog>;
type ITecPin = PA6<Analog>;
type DacFeedbackPin = PA4<Analog>;
type TecUMeasPin = PC2<Analog>;
}
@ -91,7 +91,7 @@ impl ChannelPins for Channel1 {
type DacSync = PF6<Output<PushPull>>;
type Shdn = PE15<Output<PushPull>>;
type VRefPin = Channel1VRef;
type ItecPin = PB0<Analog>;
type ITecPin = PB0<Analog>;
type DacFeedbackPin = PA5<Analog>;
type TecUMeasPin = PC3<Analog>;
}
@ -108,7 +108,7 @@ pub struct ChannelPinSet<C: ChannelPins> {
pub dac_sync: C::DacSync,
pub shdn: C::Shdn,
pub vref_pin: C::VRefPin,
pub itec_pin: C::ItecPin,
pub itec_pin: C::ITecPin,
pub dac_feedback_pin: C::DacFeedbackPin,
pub tec_u_meas_pin: C::TecUMeasPin,
}

View File

@ -26,11 +26,7 @@ pub struct Parameters {
impl Parameters {
/// Perform the resistance to temperature conversion.
pub fn get_temperature(&self, r: ElectricalResistance) -> ThermodynamicTemperature {
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;
let temp = (self.t0.recip() + (r / self.r0).get::<ratio>().ln() / self.b).recip();
ThermodynamicTemperature::new::<kelvin>(temp.get::<kelvin_interval>())
}
}