From bd9ae997aee94437834f5ebde14881545f38fa0d Mon Sep 17 00:00:00 2001 From: atse Date: Thu, 8 Aug 2024 16:48:29 +0800 Subject: [PATCH] PwmLimits: Use uom quantities for fields not f64s --- src/channel_state.rs | 7 ++++--- src/channels.rs | 12 ++++++------ src/config.rs | 24 ++++++++++-------------- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/channel_state.rs b/src/channel_state.rs index 9872e11..feef84c 100644 --- a/src/channel_state.rs +++ b/src/channel_state.rs @@ -4,6 +4,7 @@ use crate::{ config::PwmLimits, pid, steinhart_hart as sh, }; +use num_traits::Zero; use smoltcp::time::{Duration, Instant}; use uom::si::{ electric_current::ampere, @@ -47,9 +48,9 @@ impl ChannelState { dac_value: ElectricPotential::new::(0.0), i_set: ElectricCurrent::new::(0.0), pwm_limits: PwmLimits { - max_v: 0.0, - max_i_pos: 0.0, - max_i_neg: 0.0, + max_v: ElectricPotential::zero(), + max_i_pos: ElectricCurrent::zero(), + max_i_neg: ElectricCurrent::zero(), }, pid_engaged: false, pid: pid::Controller::new(pid::Parameters::default()), diff --git a/src/channels.rs b/src/channels.rs index 22a7156..4f54726 100644 --- a/src/channels.rs +++ b/src/channels.rs @@ -364,15 +364,15 @@ impl Channels { } pub fn get_max_v(&mut self, channel: usize) -> ElectricPotential { - ElectricPotential::new::(self.channel_state(channel).pwm_limits.max_v) + self.channel_state(channel).pwm_limits.max_v } pub fn get_max_i_pos(&mut self, channel: usize) -> ElectricCurrent { - ElectricCurrent::new::(self.channel_state(channel).pwm_limits.max_i_pos) + self.channel_state(channel).pwm_limits.max_i_pos } pub fn get_max_i_neg(&mut self, channel: usize) -> ElectricCurrent { - ElectricCurrent::new::(self.channel_state(channel).pwm_limits.max_i_neg) + self.channel_state(channel).pwm_limits.max_i_neg } // Get current passing through TEC @@ -420,7 +420,7 @@ impl Channels { let max_v = max_v.min(MAX_TEC_V).max(ElectricPotential::zero()); let duty = (max_v / max).get::(); let duty = self.set_pwm(channel, PwmPin::MaxV, duty); - self.channel_state(channel).pwm_limits.max_v = max_v.get::(); + self.channel_state(channel).pwm_limits.max_v = max_v; (duty * max, max) } @@ -436,7 +436,7 @@ impl Channels { Polarity::Normal => self.set_pwm(channel, PwmPin::MaxIPos, duty), Polarity::Reversed => self.set_pwm(channel, PwmPin::MaxINeg, duty), }; - self.channel_state(channel).pwm_limits.max_i_pos = max_i_pos.get::(); + self.channel_state(channel).pwm_limits.max_i_pos = max_i_pos; (duty * MAX_TEC_I_DUTY_TO_CURRENT_RATE, max) } @@ -452,7 +452,7 @@ impl Channels { Polarity::Normal => self.set_pwm(channel, PwmPin::MaxINeg, duty), Polarity::Reversed => self.set_pwm(channel, PwmPin::MaxIPos, duty), }; - self.channel_state(channel).pwm_limits.max_i_neg = max_i_neg.get::(); + self.channel_state(channel).pwm_limits.max_i_neg = max_i_neg; (duty * MAX_TEC_I_DUTY_TO_CURRENT_RATE, max) } diff --git a/src/config.rs b/src/config.rs index 43c5bb8..2cc701b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -6,11 +6,7 @@ use crate::{ }; use num_traits::Zero; use serde::{Deserialize, Serialize}; -use uom::si::{ - electric_current::ampere, - electric_potential::volt, - f64::{ElectricCurrent, ElectricPotential}, -}; +use uom::si::f64::{ElectricCurrent, ElectricPotential}; #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct ChannelConfig { @@ -77,9 +73,9 @@ impl ChannelConfig { #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct PwmLimits { - pub max_v: f64, - pub max_i_pos: f64, - pub max_i_neg: f64, + pub max_v: ElectricPotential, + pub max_i_pos: ElectricCurrent, + pub max_i_neg: ElectricCurrent, } impl PwmLimits { @@ -88,15 +84,15 @@ impl PwmLimits { let max_i_pos = channels.get_max_i_pos(channel); let max_i_neg = channels.get_max_i_neg(channel); PwmLimits { - max_v: max_v.get::(), - max_i_pos: max_i_pos.get::(), - max_i_neg: max_i_neg.get::(), + max_v, + max_i_pos, + max_i_neg, } } pub fn apply(&self, channels: &mut Channels, channel: usize) { - channels.set_max_v(channel, ElectricPotential::new::(self.max_v)); - channels.set_max_i_pos(channel, ElectricCurrent::new::(self.max_i_pos)); - channels.set_max_i_neg(channel, ElectricCurrent::new::(self.max_i_neg)); + channels.set_max_v(channel, self.max_v); + channels.set_max_i_pos(channel, self.max_i_pos); + channels.set_max_i_neg(channel, self.max_i_neg); } }