diff --git a/src/channel_state.rs b/src/channel_state.rs index 0f00f0b..b1bcd6d 100644 --- a/src/channel_state.rs +++ b/src/channel_state.rs @@ -1,11 +1,13 @@ use smoltcp::time::{Duration, Instant}; use uom::si::{ f64::{ + ElectricCurrent, ElectricPotential, ElectricalResistance, ThermodynamicTemperature, Time, }, + electric_current::ampere, electric_potential::volt, electrical_resistance::ohm, thermodynamic_temperature::degree_celsius, @@ -29,6 +31,7 @@ pub struct ChannelState { /// i_set 0A center point pub center: CenterPoint, pub dac_value: ElectricPotential, + pub i_set: ElectricCurrent, pub pid_engaged: bool, pub pid: pid::Controller, pub sh: sh::Parameters, @@ -44,6 +47,7 @@ impl ChannelState { adc_interval: Duration::from_millis(100), center: CenterPoint::Vref, dac_value: ElectricPotential::new::(0.0), + i_set: ElectricCurrent::new::(0.0), pid_engaged: false, pid: pid::Controller::new(pid::Parameters::default()), sh: sh::Parameters::default(), diff --git a/src/channels.rs b/src/channels.rs index bdd8087..e1c774b 100644 --- a/src/channels.rs +++ b/src/channels.rs @@ -116,11 +116,7 @@ impl Channels { } pub fn get_i(&mut self, channel: usize) -> ElectricCurrent { - let center_point = self.get_center(channel); - let r_sense = ElectricalResistance::new::(R_SENSE); - let voltage = self.get_dac(channel); - let i_tec = (voltage - center_point) / (10.0 * r_sense); - i_tec + self.channel_state(channel).i_set } /// i_set DAC @@ -141,6 +137,7 @@ impl Channels { let voltage = i_tec * 10.0 * r_sense + center_point; let voltage = self.set_dac(channel, voltage); let i_tec = (voltage - center_point) / (10.0 * r_sense); + self.channel_state(channel).i_set = i_tec; i_tec }