separate adc and max vref

pull/20/head
Astro 2020-09-16 23:31:49 +02:00
parent fc0ca8b581
commit f76ee9a607
3 changed files with 7 additions and 5 deletions

View File

@ -16,11 +16,13 @@ use crate::{
};
const R_INNER: f64 = 2.0 * 5100.0;
const VREF_SENS: f64 = 3.3 / 2.0;
pub struct ChannelState {
pub adc_data: Option<u32>,
pub adc_calibration: ad7172::ChannelCalibration,
pub adc_time: Instant,
/// VREF for the TEC (1.5V)
pub vref: ElectricPotential,
pub dac_value: ElectricPotential,
pub pid_engaged: bool,
@ -62,8 +64,9 @@ impl ChannelState {
/// Get `SENS[01]` input resistance
pub fn get_sens(&self) -> Option<ElectricalResistance> {
let r_inner = ElectricalResistance::new::<ohm>(R_INNER);
let vref = ElectricPotential::new::<volt>(VREF_SENS);
let adc_input = self.get_adc()?;
let r = r_inner * adc_input / (self.vref - adc_input);
let r = r_inner * adc_input / (vref - adc_input);
Some(r)
}

View File

@ -51,8 +51,7 @@ impl Channels {
let pwm = pins.pwm;
let mut channels = Channels { channel0, channel1, adc, pins_adc, pwm };
for channel in 0..CHANNELS {
// FIXME: this reads 1.5 V instead of the expected 1.65 V.
// channels.channel_state(channel).vref = channels.read_vref(channel);
channels.channel_state(channel).vref = channels.read_vref(channel);
channels.calibrate_dac_value(channel);
}
channels

View File

@ -170,11 +170,11 @@ fn main() -> ! {
Command::Show(ShowCommand::Input) => {
for channel in 0..CHANNELS {
if let Some(adc_input) = channels.channel_state(channel).get_adc() {
let vref = channels.read_vref(channel);
let vref = channels.channel_state(channel).vref;
let dac_feedback = channels.read_dac_feedback(channel);
let itec = channels.read_itec(channel);
let tec_i = -(itec - ElectricPotential::new::<volt>(1.5)) / ElectricalResistance::new::<ohm>(0.4);
let tec_i = (itec - vref) / ElectricalResistance::new::<ohm>(0.4);
let tec_u_meas = channels.read_tec_u_meas(channel);