forked from M-Labs/thermostat
Compare commits
1 Commits
master
...
refactor-s
Author | SHA1 | Date | |
---|---|---|---|
839ee56f96 |
@ -398,14 +398,21 @@ impl Channels {
|
||||
* 4.0
|
||||
}
|
||||
|
||||
fn set_pwm(&mut self, channel: usize, pin: PwmPin, duty: f64) -> f64 {
|
||||
fn set_pwm_pin_voltage(
|
||||
&mut self,
|
||||
channel: usize,
|
||||
pin: PwmPin,
|
||||
voltage: ElectricPotential,
|
||||
) -> ElectricPotential {
|
||||
fn set<P: hal::PwmPin<Duty = u16>>(pin: &mut P, duty: f64) -> f64 {
|
||||
let max = pin.get_max_duty();
|
||||
let value = ((duty * (max as f64)) as u16).min(max);
|
||||
pin.set_duty(value);
|
||||
value as f64 / (max as f64)
|
||||
}
|
||||
match (channel, pin) {
|
||||
let duty: f64 = (voltage / CPU_ADC_VREF).into();
|
||||
|
||||
let duty = match (channel, pin) {
|
||||
(_, PwmPin::ISet) => panic!("i_set is no pwm pin"),
|
||||
(0, PwmPin::MaxIPos) => set(&mut self.pwm.max_i_pos0, duty),
|
||||
(0, PwmPin::MaxINeg) => set(&mut self.pwm.max_i_neg0, duty),
|
||||
@ -414,7 +421,8 @@ impl Channels {
|
||||
(1, PwmPin::MaxINeg) => set(&mut self.pwm.max_i_neg1, duty),
|
||||
(1, PwmPin::MaxV) => set(&mut self.pwm.max_v1, duty),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
};
|
||||
duty * CPU_ADC_VREF
|
||||
}
|
||||
|
||||
pub fn set_max_v(
|
||||
@ -425,10 +433,8 @@ impl Channels {
|
||||
let max_v = max_v.min(MAX_TEC_V).max(ElectricPotential::zero());
|
||||
self.channel_state(channel).output_limits.max_v = max_v;
|
||||
let v_maxv = max_v / 4.0;
|
||||
let duty = (v_maxv / CPU_ADC_VREF).get::<ratio>();
|
||||
|
||||
let duty = self.set_pwm(channel, PwmPin::MaxV, duty);
|
||||
let v_maxv = duty * CPU_ADC_VREF;
|
||||
let v_maxv = self.set_pwm_pin_voltage(channel, PwmPin::MaxV, v_maxv);
|
||||
let max_v = 4.0 * v_maxv;
|
||||
|
||||
(max_v, MAX_TEC_V)
|
||||
@ -448,10 +454,8 @@ impl Channels {
|
||||
let max_i_pos = max_i_pos.min(MAX_TEC_I).max(ElectricCurrent::zero());
|
||||
self.channel_state(channel).output_limits.max_i_pos = max_i_pos;
|
||||
let v_maxip = 10.0 * (max_i_pos * r_sense);
|
||||
let duty = (v_maxip / CPU_ADC_VREF).get::<ratio>();
|
||||
|
||||
let duty = self.set_pwm(channel, pin, duty);
|
||||
let v_maxip = duty * CPU_ADC_VREF;
|
||||
let v_maxip = self.set_pwm_pin_voltage(channel, pin, v_maxip);
|
||||
let max_i_pos = v_maxip / 10.0 / r_sense;
|
||||
|
||||
(max_i_pos, MAX_TEC_I)
|
||||
@ -471,10 +475,8 @@ impl Channels {
|
||||
let max_i_neg = max_i_neg.min(MAX_TEC_I).max(ElectricCurrent::zero());
|
||||
self.channel_state(channel).output_limits.max_i_neg = max_i_neg;
|
||||
let v_maxin = 10.0 * (max_i_neg * r_sense);
|
||||
let duty = (v_maxin / CPU_ADC_VREF).get::<ratio>();
|
||||
|
||||
let duty = self.set_pwm(channel, pin, duty);
|
||||
let v_maxin = duty * CPU_ADC_VREF;
|
||||
let v_maxin = self.set_pwm_pin_voltage(channel, pin, v_maxin);
|
||||
let max_i_neg = v_maxin / 10.0 / r_sense;
|
||||
|
||||
(max_i_neg, MAX_TEC_I)
|
||||
|
Loading…
x
Reference in New Issue
Block a user