laser: Short LD terminals when ld pwr is off

This commit is contained in:
linuswck 2025-01-21 11:54:11 +08:00
parent 6ad41c8502
commit 227d9d4877
2 changed files with 16 additions and 4 deletions

View File

@ -71,7 +71,6 @@ pub fn bootup(
let current_source = LdCtrl::new(current_source_phy);
let mut laser = LdDrive::new(current_source, perif.ADC3, perif.TIM2.counter(&clocks), pd_mon_phy);
laser.setup();
laser.ld_open();
laser.ld_set_i(ElectricCurrent::new::<ampere>(0.0));
laser.set_pd_i_limit(ElectricCurrent::new::<milliampere>(2.5));
laser.set_pd_mon_calibrated_vdda(thermostat.get_calibrated_vdda());

View File

@ -99,22 +99,33 @@ impl LdDrive {
Settings::DAC_OUT_V_MAX,
);
LdCurrentOutCtrlTimer::reset();
self.ld_short();
self.ctrl.ld_short_enable();
}
pub fn ld_short(&mut self) {
if LdPwrExcProtector::get_status().pwr_engaged {
self.ctrl.ld_short_enable();
}
self.settings.ld_terms_short = true;
}
pub fn ld_open(&mut self) {
if LdPwrExcProtector::get_status().pwr_engaged {
self.ctrl.ld_short_disable();
}
self.settings.ld_terms_short = false;
}
pub fn power_up(&mut self) {
let prev_i_set = self.settings.ld_drive_current;
LdCurrentOutCtrlTimer::reset();
if self.settings.ld_terms_short {
self.ctrl.ld_short_enable();
} else {
self.ctrl.ld_short_disable();
}
let _ = self.ctrl.set_i(
ElectricCurrent::new::<milliampere>(0.0),
Settings::LD_DRIVE_TRANSIMPEDANCE,
@ -132,6 +143,8 @@ impl LdDrive {
pub fn power_down(&mut self) {
LdPwrExcProtector::pwr_off();
self.settings.pwr_on = false;
// Short the laser diode terminals at power off state for electrical protection
self.ctrl.ld_short_enable();
}
pub fn get_pd_i(&mut self) -> ElectricCurrent {