From 0d12c902fcd2818f672cabc448b941f9bbbf6385 Mon Sep 17 00:00:00 2001 From: linuswck Date: Thu, 18 Jan 2024 17:09:24 +0800 Subject: [PATCH] pd_mon: Separate ld_power calculation to a file --- src/laser_diode/laser_diode.rs | 9 --------- src/laser_diode/mod.rs | 4 +++- src/laser_diode/pd_mon.rs | 37 ++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 src/laser_diode/pd_mon.rs diff --git a/src/laser_diode/laser_diode.rs b/src/laser_diode/laser_diode.rs index 16c8a85..88511a9 100644 --- a/src/laser_diode/laser_diode.rs +++ b/src/laser_diode/laser_diode.rs @@ -89,10 +89,6 @@ impl LdDrive{ self.settings.ld_drive_current_limit = i_limit; } - pub fn set_pd_i_to_out_pwr(&mut self, val: IToPowerUnit){ - self.settings.pd_i_to_out_pwr = val; - } - pub fn ld_short(&mut self) { self.ctrl.ld_short_enable(); } @@ -101,11 +97,6 @@ impl LdDrive{ self.ctrl.ld_short_disable(); } - pub fn get_ld_power_output(&mut self) -> Power { - let pd_i = self.get_pd_i(); - pd_i * self.settings.pd_i_to_out_pwr - } - pub fn get_pd_i(&mut self) -> ElectricCurrent { self.ctrl.get_pd_mon_v() * Settings::PD_MON_TRANSCONDUCTANCE } diff --git a/src/laser_diode/mod.rs b/src/laser_diode/mod.rs index c1bf875..8972fe7 100644 --- a/src/laser_diode/mod.rs +++ b/src/laser_diode/mod.rs @@ -1,3 +1,5 @@ pub mod ld_ctrl; pub mod max5719; -pub mod laser_diode; \ No newline at end of file +pub mod laser_diode; +pub mod pid_state; +pub mod pd_mon; \ No newline at end of file diff --git a/src/laser_diode/pd_mon.rs b/src/laser_diode/pd_mon.rs new file mode 100644 index 0000000..fe69219 --- /dev/null +++ b/src/laser_diode/pd_mon.rs @@ -0,0 +1,37 @@ +use core::{f64::NAN, marker::PhantomData}; +use uom::si::{ + f64::{ + ElectricCurrent, + Power + }, + electric_current::microampere, +}; +use uom::{si::{ISQ, SI, Quantity}, typenum::*}; +use miniconf::Miniconf; + +// Ampere / Watt +pub type ResponsitivityUnit = Quantity, SI, f64>; + +/// Steinhart-Hart equation Photodiode +#[derive(Clone, Debug, PartialEq, Miniconf)] +pub struct Parameters { + /// Responsitivity + pub responsitivity: ResponsitivityUnit, + pub i_dark: ElectricCurrent, +} + +impl Parameters { + pub fn get_ld_output_power(&self, i: ElectricCurrent) -> Power { + let ld_power = (i - self.i_dark) / self.responsitivity; + ld_power + } +} + +impl Default for Parameters { + fn default() -> Self { + Parameters { + responsitivity: ResponsitivityUnit {dimension: PhantomData, units: PhantomData, value: NAN}, + i_dark: ElectricCurrent::new::(0.0), + } + } +}