max1968: Add IIR filter to Tec Readings
This commit is contained in:
parent
d8ddd5fb24
commit
5909ead681
@ -162,7 +162,7 @@ fn main() -> ! {
|
||||
laser.power_down();
|
||||
thermostat.power_down();
|
||||
}
|
||||
|
||||
thermostat.process_tec_readings();
|
||||
thermostat.start_tec_readings_conversion();
|
||||
}
|
||||
|
||||
|
@ -78,6 +78,8 @@ pub struct MAX1968 {
|
||||
pub pins_adc: Adc<ADC1>,
|
||||
pub dma_adc: DMA_Transfer<Stream2<DMA2>, 1, Adc<ADC2>, PeripheralToMemory, &'static mut [u16; 16]>,
|
||||
pub dac_out_range: ElectricPotential,
|
||||
vtec_volt_iir: u16,
|
||||
itec_volt_iir: u16,
|
||||
prev_vtec_volt: ElectricPotential,
|
||||
prev_itec_volt: ElectricPotential,
|
||||
}
|
||||
@ -243,6 +245,8 @@ impl MAX1968 {
|
||||
pins_adc: pins_adc1,
|
||||
dma_adc: dma_adc,
|
||||
dac_out_range: dac_out_range,
|
||||
vtec_volt_iir: 1861, // VTEC value centers at 1.5V
|
||||
itec_volt_iir: 1861, // ITEC value centers at 1.5V
|
||||
prev_vtec_volt: ElectricPotential::new::<millivolt>(0.0),
|
||||
prev_itec_volt: ElectricPotential::new::<millivolt>(0.0),
|
||||
}
|
||||
@ -261,6 +265,10 @@ impl MAX1968 {
|
||||
}
|
||||
|
||||
pub fn get_tec_readings(&mut self) -> (ElectricPotential, ElectricPotential) {
|
||||
(self.prev_vtec_volt, self.prev_itec_volt)
|
||||
}
|
||||
|
||||
pub fn cal_tec_readings(&mut self) -> (ElectricPotential, ElectricPotential) {
|
||||
if unsafe { DMA_TRANSFER_COMPLETE } {
|
||||
let buffer: &[u16; 16];
|
||||
unsafe {
|
||||
@ -276,18 +284,20 @@ impl MAX1968 {
|
||||
itec += *data;
|
||||
}
|
||||
itec = itec >> 3;
|
||||
self.itec_volt_iir = (7 * self.itec_volt_iir + itec) >> 3;
|
||||
|
||||
let mut vtec: u16 = 0;
|
||||
for data in buffer.into_iter().skip(1).step_by(2) {
|
||||
vtec += *data;
|
||||
}
|
||||
vtec = vtec >> 3;
|
||||
self.vtec_volt_iir = (7 * self.vtec_volt_iir + vtec) >> 3;
|
||||
|
||||
unsafe {
|
||||
ADC2_LOCAL_BUFFER = *buffer;
|
||||
}
|
||||
self.prev_vtec_volt = ElectricPotential::new::<millivolt>(sample_to_millivolts(vtec) as f32);
|
||||
self.prev_itec_volt = ElectricPotential::new::<millivolt>(sample_to_millivolts(itec) as f32);
|
||||
self.prev_vtec_volt = ElectricPotential::new::<millivolt>(sample_to_millivolts(self.vtec_volt_iir) as f32);
|
||||
self.prev_itec_volt = ElectricPotential::new::<millivolt>(sample_to_millivolts(self.itec_volt_iir) as f32);
|
||||
}
|
||||
(self.prev_vtec_volt, self.prev_itec_volt)
|
||||
}
|
||||
|
@ -158,6 +158,10 @@ impl Thermostat {
|
||||
self.max1968.dma_adc_start_conversion();
|
||||
}
|
||||
|
||||
pub fn process_tec_readings(&mut self) {
|
||||
self.max1968.cal_tec_readings();
|
||||
}
|
||||
|
||||
fn tec_setup(&mut self) {
|
||||
self.power_down();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user