Fixing ADC/voltage conversion functions

master
Ryan Summers 2021-04-29 17:39:19 +02:00
parent 4169cd8251
commit b35250efbf
3 changed files with 24 additions and 11 deletions

View File

@ -160,7 +160,7 @@ const APP: () = {
[adc_samples[0][0] as i16, adc_samples[1][0] as i16];
c.resources.telemetry.latest_outputs =
[dac_samples[0][0] as i16, dac_samples[1][0] as i16];
[dac_samples[0][0], dac_samples[1][0]];
c.resources.telemetry.digital_inputs = [
c.resources.digital_inputs.0.is_high().unwrap(),
@ -198,7 +198,9 @@ const APP: () = {
c.resources.telemetry.lock(|telemetry| telemetry.clone());
let gains = c.resources.settings.lock(|settings| settings.afe.clone());
c.resources.mqtt.publish_telemetry(&telemetry.to_telemetry(gains[0], gains[1]));
c.resources
.mqtt
.publish_telemetry(&telemetry.to_telemetry(gains[0], gains[1]));
let telemetry_period = c
.resources

View File

@ -204,12 +204,11 @@ const APP: () = {
}
// Update telemetry measurements.
// TODO: Should we report these as voltages?
c.resources.telemetry.latest_samples =
[adc_samples[0][0] as i16, adc_samples[1][0] as i16];
c.resources.telemetry.latest_outputs =
[dac_samples[0][0] as i16, dac_samples[1][0] as i16];
[dac_samples[0][0], dac_samples[1][0]];
}
#[idle(resources=[mqtt], spawn=[settings_update])]
@ -246,7 +245,9 @@ const APP: () = {
];
let gains = c.resources.settings.lock(|settings| settings.afe.clone());
c.resources.mqtt.publish_telemetry(&telemetry.to_telemetry(gains[0], gains[1]));
c.resources
.mqtt
.publish_telemetry(&telemetry.to_telemetry(gains[0], gains[1]));
let telemetry_period = c
.resources

View File

@ -5,7 +5,7 @@ use crate::hardware::AfeGain;
#[derive(Copy, Clone)]
pub struct TelemetryBuffer {
pub latest_samples: [i16; 2],
pub latest_outputs: [i16; 2],
pub latest_outputs: [u16; 2],
pub digital_inputs: [bool; 2],
}
@ -13,7 +13,7 @@ pub struct TelemetryBuffer {
pub struct Telemetry {
input_levels: [f32; 2],
output_levels: [f32; 2],
digital_inputs: [bool; 2]
digital_inputs: [bool; 2],
}
impl Default for TelemetryBuffer {
@ -28,11 +28,21 @@ impl Default for TelemetryBuffer {
impl TelemetryBuffer {
pub fn to_telemetry(self, afe0: AfeGain, afe1: AfeGain) -> Telemetry {
let in0_volts = self.latest_samples[0] as f32 / (i16::MAX as f32 * 5.0 * afe0.to_multiplier() as f32) * 4.096;
let in1_volts = self.latest_samples[1] as f32 / (i16::MAX as f32 * 5.0 * afe1.to_multiplier() as f32) * 4.096;
let in0_volts =
(self.latest_samples[0] as f32 / i16::MAX as f32) * 4.096 / 2.0
* 5.0
/ afe0.to_multiplier() as f32;
let in1_volts =
(self.latest_samples[1] as f32 / i16::MAX as f32) * 4.096 / 2.0
* 5.0
/ afe1.to_multiplier() as f32;
let out0_volts = self.latest_outputs[0] as f32 / (i16::MAX as f32) * 10.24;
let out1_volts = self.latest_outputs[1] as f32 / (i16::MAX as f32) * 10.24;
let out0_volts = (10.24 * 2.0)
* (self.latest_outputs[0] as f32 / (u16::MAX as f32))
- 10.24;
let out1_volts = (10.24 * 2.0)
* (self.latest_outputs[1] as f32 / (u16::MAX as f32))
- 10.24;
Telemetry {
input_levels: [in0_volts, in1_volts],