1
0
forked from M-Labs/kirdy

Save Thermostat and Laser Diode PWR On/Off status

This commit is contained in:
linuswck 2024-02-23 14:57:30 +08:00
parent d1cc677668
commit 18dd0a7963
2 changed files with 12 additions and 0 deletions

View File

@ -50,6 +50,7 @@ impl Settings{
#[derive(Deserialize, Serialize, Clone, Copy, Debug, Tree)] #[derive(Deserialize, Serialize, Clone, Copy, Debug, Tree)]
struct Settings { struct Settings {
pwr_on: bool,
ld_drive_current: ElectricCurrent, ld_drive_current: ElectricCurrent,
ld_drive_current_limit: ElectricCurrent, ld_drive_current_limit: ElectricCurrent,
pd_responsitivity: pd_responsitivity::Parameters, pd_responsitivity: pd_responsitivity::Parameters,
@ -59,6 +60,7 @@ struct Settings {
impl Default for Settings { impl Default for Settings {
fn default() -> Self { fn default() -> Self {
Self { Self {
pwr_on: false,
ld_drive_current: ElectricCurrent::new::<milliampere>(0.0), ld_drive_current: ElectricCurrent::new::<milliampere>(0.0),
ld_drive_current_limit: ElectricCurrent::new::<milliampere>(0.0), ld_drive_current_limit: ElectricCurrent::new::<milliampere>(0.0),
pd_responsitivity: pd_responsitivity::Parameters::default(), pd_responsitivity: pd_responsitivity::Parameters::default(),
@ -124,10 +126,12 @@ impl LdDrive{
// Wait for LD Power Supply to start up before driving current to laser diode // Wait for LD Power Supply to start up before driving current to laser diode
sleep(30); sleep(30);
self.ld_set_i(self.settings.ld_drive_current); self.ld_set_i(self.settings.ld_drive_current);
self.settings.pwr_on = true;
} }
pub fn power_down(&mut self){ pub fn power_down(&mut self){
LdPwrExcProtector::pwr_off(); LdPwrExcProtector::pwr_off();
self.settings.pwr_on = false;
} }
pub fn get_pd_i(&mut self) -> ElectricCurrent { pub fn get_pd_i(&mut self) -> ElectricCurrent {
@ -205,6 +209,7 @@ impl LdDrive{
pub fn get_settings_summary(&mut self) -> LdSettingsSummary { pub fn get_settings_summary(&mut self) -> LdSettingsSummary {
let settings = self.settings; let settings = self.settings;
LdSettingsSummary { LdSettingsSummary {
pwr_on: self.settings.pwr_on,
ld_drive_current: LdSettingsSummaryField { value: settings.ld_drive_current, max: Settings::LD_CURRENT_MAX}, ld_drive_current: LdSettingsSummaryField { value: settings.ld_drive_current, max: Settings::LD_CURRENT_MAX},
ld_drive_current_limit: LdSettingsSummaryField { value: settings.ld_drive_current_limit, max: Settings::LD_CURRENT_MAX}, ld_drive_current_limit: LdSettingsSummaryField { value: settings.ld_drive_current_limit, max: Settings::LD_CURRENT_MAX},
pd_responsitivity: settings.pd_responsitivity, pd_responsitivity: settings.pd_responsitivity,
@ -215,6 +220,7 @@ impl LdDrive{
#[derive(Deserialize, Serialize, Copy, Clone, Debug, Tree)] #[derive(Deserialize, Serialize, Copy, Clone, Debug, Tree)]
pub struct LdSettingsSummary { pub struct LdSettingsSummary {
pwr_on: bool,
ld_drive_current: LdSettingsSummaryField<ElectricCurrent>, ld_drive_current: LdSettingsSummaryField<ElectricCurrent>,
ld_drive_current_limit: LdSettingsSummaryField<ElectricCurrent>, ld_drive_current_limit: LdSettingsSummaryField<ElectricCurrent>,
pd_responsitivity: pd_responsitivity::Parameters, pd_responsitivity: pd_responsitivity::Parameters,

View File

@ -28,6 +28,7 @@ pub const R_SENSE: ElectricalResistance = ElectricalResistance {
#[derive(Deserialize, Serialize, Clone, Copy, Debug, Tree)] #[derive(Deserialize, Serialize, Clone, Copy, Debug, Tree)]
pub struct TecSettings { pub struct TecSettings {
pub pwr_on: bool,
pub center_pt: ElectricPotential, pub center_pt: ElectricPotential,
pub max_v_set: ElectricPotential, pub max_v_set: ElectricPotential,
pub max_i_pos_set: ElectricCurrent, pub max_i_pos_set: ElectricCurrent,
@ -89,6 +90,7 @@ impl TecSettings{
impl Default for TecSettings { impl Default for TecSettings {
fn default() -> Self { fn default() -> Self {
Self { Self {
pwr_on: false,
center_pt: ElectricPotential::new::<volt>(1.5), center_pt: ElectricPotential::new::<volt>(1.5),
max_v_set: ElectricPotential::new::<volt>(5.0), max_v_set: ElectricPotential::new::<volt>(5.0),
max_i_pos_set: ElectricCurrent::new::<ampere>(1.0), max_i_pos_set: ElectricCurrent::new::<ampere>(1.0),
@ -108,6 +110,7 @@ pub struct Thermostat {
#[derive(Deserialize, Serialize, Copy, Clone, Debug, Tree)] #[derive(Deserialize, Serialize, Copy, Clone, Debug, Tree)]
pub struct ThermostatSettingsSummary { pub struct ThermostatSettingsSummary {
pwr_on: bool,
tec_settings: TecSettingSummary, tec_settings: TecSettingSummary,
pid_params: PidParams, pid_params: PidParams,
temp_mon_settings: TempMonSettings, temp_mon_settings: TempMonSettings,
@ -187,12 +190,14 @@ impl Thermostat{
pub fn power_up(&mut self){ pub fn power_up(&mut self){
self.max1968.power_up(); self.max1968.power_up();
self.tec_settings.pwr_on = true;
} }
pub fn power_down(&mut self){ pub fn power_down(&mut self){
self.max1968.power_down(); self.max1968.power_down();
self.pid_ctrl_ch0.reset_pid_state(); self.pid_ctrl_ch0.reset_pid_state();
self.set_i(ElectricCurrent::new::<ampere>(0.0)); self.set_i(ElectricCurrent::new::<ampere>(0.0));
self.tec_settings.pwr_on = true;
} }
fn set_center_pt(&mut self, value: ElectricPotential){ fn set_center_pt(&mut self, value: ElectricPotential){
@ -384,6 +389,7 @@ impl Thermostat{
pub fn get_settings_summary(&mut self) -> ThermostatSettingsSummary { pub fn get_settings_summary(&mut self) -> ThermostatSettingsSummary {
ThermostatSettingsSummary { ThermostatSettingsSummary {
pwr_on: self.tec_settings.pwr_on,
tec_settings: self.get_tec_settings(), tec_settings: self.get_tec_settings(),
pid_params: self.get_pid_settings(), pid_params: self.get_pid_settings(),
temp_mon_settings: self.get_temp_mon_settings(), temp_mon_settings: self.get_temp_mon_settings(),