Save the current setpoint i_set directly

This avoids the need to back-calculate the current setpoint value back
from the DAC value when reporting, as it is a user-provided value.
atse 2023-08-25 13:04:27 +08:00
parent 204336aaf3
commit 9ef1d05a42
2 changed files with 6 additions and 5 deletions

View File

@ -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::<volt>(0.0),
i_set: ElectricCurrent::new::<ampere>(0.0),
pid_engaged: false,
pid: pid::Controller::new(pid::Parameters::default()),
sh: sh::Parameters::default(),

View File

@ -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::<ohm>(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
}