Compare commits

..

1 Commits

Author SHA1 Message Date
atse 509b53d67d Limit i_set within range of MAX1968 chip 2024-04-03 11:48:56 +08:00
2 changed files with 10 additions and 12 deletions

View File

@ -129,16 +129,7 @@ impl<'a> Channels<'a> {
voltage
}
pub fn set_i(&mut self, channel: usize, mut i_set: ElectricCurrent) -> ElectricCurrent {
// Silently clamp i_set to available range of MAX1968 chip
let min = ElectricCurrent::new::<ampere>(-3.0);
let max = ElectricCurrent::new::<ampere>(3.0);
if i_set < min {
i_set = min;
}
if i_set > max {
i_set = max;
}
pub fn set_i(&mut self, channel: usize, i_set: ElectricCurrent) -> ElectricCurrent {
let vref_meas = match channel.into() {
0 => self.channel0.vref_meas,
1 => self.channel1.vref_meas,

View File

@ -54,7 +54,8 @@ pub enum Handler {
pub enum Error {
ReportError,
PostFilterRateError,
FlashError
FlashError,
InputOutOfRangeError,
}
pub type JsonBuffer = Vec<u8, U1024>;
@ -184,8 +185,14 @@ impl Handler {
fn set_pwm (socket: &mut TcpSocket, channels: &mut Channels, channel: usize, pin: PwmPin, value: f64) -> Result<Handler, Error> {
match pin {
PwmPin::ISet => {
channels.channel_state(channel).pid_engaged = false;
let current = ElectricCurrent::new::<ampere>(value);
let min = ElectricCurrent::new::<ampere>(-3.0);
let max = ElectricCurrent::new::<ampere>(3.0);
if current < min || current > max {
send_line(socket, b"{\"error\": \"i_set has unit A and should be in range [-3, +3]\"}");
return Err(Error::InputOutOfRangeError);
}
channels.channel_state(channel).pid_engaged = false;
channels.set_i(channel, current);
channels.power_up(channel);
}