pd_mon: Add iir filter to voltage readings

- analog wdg behaviour is unchanged
This commit is contained in:
linuswck 2025-01-27 12:40:01 +08:00
parent 46889ac330
commit c1855f6a08

View File

@ -47,6 +47,7 @@ pub struct LdPwrExcProtector {
calibrated_vdda: u32, calibrated_vdda: u32,
offset: u32, offset: u32,
prev_samples: [u16; 32], prev_samples: [u16; 32],
prev_iir_sample: u16,
ptr: u16, ptr: u16,
} }
@ -148,6 +149,7 @@ impl LdPwrExcProtector {
calibrated_vdda: 3300, calibrated_vdda: 3300,
offset: offset, offset: offset,
prev_samples: [0; 32], prev_samples: [0; 32],
prev_iir_sample: 0,
ptr: 0, ptr: 0,
}); });
} }
@ -198,7 +200,9 @@ impl LdPwrExcProtector {
samples += wdg.prev_samples[idx] as u32; samples += wdg.prev_samples[idx] as u32;
} }
samples = samples >> 5; samples = samples >> 5;
wdg.alarm_status.v = LdPwrExcProtector::convert_sample_to_volt(samples as u16);
wdg.prev_iir_sample = (7 * wdg.prev_iir_sample + samples as u16) >> 3;
wdg.alarm_status.v = LdPwrExcProtector::convert_sample_to_volt(wdg.prev_iir_sample);
} }
return wdg.alarm_status.v; return wdg.alarm_status.v;
} }