diff --git a/README.md b/README.md index efb73c8..c9ac0f3 100644 --- a/README.md +++ b/README.md @@ -281,6 +281,6 @@ Fan control commands are available for thermostat revisions with an integrated f 2. `fan auto` - enable auto speed controller mode, where fan speed is controlled by the fan curve `fcurve`. 3. `fan ` - set the fan power with the value from `1` to `100` and disable auto mode. There is no way to completely disable the fan. Please note that power doesn't correlate with the actual speed linearly. -4. `fcurve ` - set coefficients of the controlling curve `a*x^2 + b*x + c`, where `x` is `max_abs_i_measured/MAX_TEC_I`, a normalized value in range [0,1], +4. `fcurve ` - set coefficients of the controlling curve `a*x^2 + b*x + c`, where `x` is `max_abs_i_measured/MAX_I`, a normalized value in range [0,1], i.e. the (linear) proportion of current output capacity used, on the channel with the largest current flow. The controlling curve is also clamped to [0,1]. 5. `fcurve default` - restore fan curve coefficients to defaults: `a = 1.0, b = 0.0, c = 0.0`. diff --git a/src/channels.rs b/src/channels.rs index 6640226..5c900a6 100644 --- a/src/channels.rs +++ b/src/channels.rs @@ -33,7 +33,7 @@ pub const CHANNELS: usize = 2; const R_SENSE: f64 = 0.05; // From design specs -pub const MAX_TEC_I: ElectricCurrent = ElectricCurrent { +pub const MAX_I: ElectricCurrent = ElectricCurrent { dimension: PhantomData, units: PhantomData, value: 2.0, @@ -157,7 +157,7 @@ impl Channels { } pub fn set_i(&mut self, channel: usize, i_set: ElectricCurrent) -> ElectricCurrent { - let i_set = i_set.min(MAX_TEC_I).max(-MAX_TEC_I); + let i_set = i_set.min(MAX_I).max(-MAX_I); let vref_meas = match channel { 0 => self.channel0.vref_meas, 1 => self.channel1.vref_meas, @@ -399,13 +399,13 @@ impl Channels { pub fn get_max_i_pos(&mut self, channel: usize) -> (ElectricCurrent, ElectricCurrent) { let max = ElectricCurrent::new::(3.0); let duty = self.get_pwm(channel, PwmPin::MaxIPos); - (duty * max, MAX_TEC_I) + (duty * max, MAX_I) } pub fn get_max_i_neg(&mut self, channel: usize) -> (ElectricCurrent, ElectricCurrent) { let max = ElectricCurrent::new::(3.0); let duty = self.get_pwm(channel, PwmPin::MaxINeg); - (duty * max, MAX_TEC_I) + (duty * max, MAX_I) } // Measure current passing through TEC @@ -457,7 +457,7 @@ impl Channels { max_i_pos: ElectricCurrent, ) -> (ElectricCurrent, ElectricCurrent) { let max = ElectricCurrent::new::(3.0); - let duty = (max_i_pos.min(MAX_TEC_I).max(ElectricCurrent::zero()) / max).get::(); + let duty = (max_i_pos.min(MAX_I).max(ElectricCurrent::zero()) / max).get::(); let duty = self.set_pwm(channel, PwmPin::MaxIPos, duty); (duty * max, max) } @@ -468,7 +468,7 @@ impl Channels { max_i_neg: ElectricCurrent, ) -> (ElectricCurrent, ElectricCurrent) { let max = ElectricCurrent::new::(3.0); - let duty = (max_i_neg.min(MAX_TEC_I).max(ElectricCurrent::zero()) / max).get::(); + let duty = (max_i_neg.min(MAX_I).max(ElectricCurrent::zero()) / max).get::(); let duty = self.set_pwm(channel, PwmPin::MaxINeg, duty); (duty * max, max) } @@ -524,7 +524,7 @@ impl Channels { PwmSummary { channel, center: CenterPointJson(self.channel_state(channel).center.clone()), - i_set: (self.get_i_set(channel), MAX_TEC_I).into(), + i_set: (self.get_i_set(channel), MAX_I).into(), max_v: self.get_max_v(channel).into(), max_i_pos: self.get_max_i_pos(channel).into(), max_i_neg: self.get_max_i_neg(channel).into(), diff --git a/src/fan_ctrl.rs b/src/fan_ctrl.rs index a278c6f..f2dab51 100644 --- a/src/fan_ctrl.rs +++ b/src/fan_ctrl.rs @@ -1,4 +1,4 @@ -use crate::{channels::MAX_TEC_I, command_handler::JsonBuffer, hw_rev::HWSettings}; +use crate::{channels::MAX_I, command_handler::JsonBuffer, hw_rev::HWSettings}; use num_traits::Float; use serde::Serialize; use stm32f4xx_hal::{ @@ -46,7 +46,7 @@ impl FanCtrl { pub fn cycle(&mut self, max_abs_i_measured: ElectricCurrent) { self.max_abs_i_measured = max_abs_i_measured.get::() as f32; if self.fan_auto && self.hw_settings.fan_available { - let scaled_current = self.max_abs_i_measured / MAX_TEC_I.get::() as f32; + let scaled_current = self.max_abs_i_measured / MAX_I.get::() as f32; // do not limit upper bound, as it will be limited in the set_pwm() let pwm = (MAX_USER_FAN_PWM * (scaled_current * (scaled_current * self.k_a + self.k_b) + self.k_c))