pd_mon: add fns to convert between pwr and current
This commit is contained in:
parent
e22f424531
commit
9d8a553669
|
@ -2,7 +2,8 @@ use miniconf::Miniconf;
|
||||||
use stm32f4xx_hal::pac::ADC2;
|
use stm32f4xx_hal::pac::ADC2;
|
||||||
use crate::laser_diode::ld_ctrl::LdCtrl;
|
use crate::laser_diode::ld_ctrl::LdCtrl;
|
||||||
use crate::laser_diode::ld_pwr_exc_protector::{LdPwrExcProtector, self};
|
use crate::laser_diode::ld_pwr_exc_protector::{LdPwrExcProtector, self};
|
||||||
use core::{marker::PhantomData, f64::NAN};
|
use crate::laser_diode::pd_mon;
|
||||||
|
use core::marker::PhantomData;
|
||||||
|
|
||||||
use uom::si::{
|
use uom::si::{
|
||||||
electric_current::milliampere,
|
electric_current::milliampere,
|
||||||
|
@ -43,7 +44,8 @@ impl Settings{
|
||||||
pub struct Settings {
|
pub struct Settings {
|
||||||
ld_drive_current: ElectricCurrent,
|
ld_drive_current: ElectricCurrent,
|
||||||
ld_drive_current_limit: ElectricCurrent,
|
ld_drive_current_limit: ElectricCurrent,
|
||||||
pd_i_to_out_pwr: IToPowerUnit,
|
#[miniconf(defer)]
|
||||||
|
pd_responsitivity: pd_mon::Parameters,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Settings {
|
impl Default for Settings {
|
||||||
|
@ -51,7 +53,7 @@ impl Default for Settings {
|
||||||
Self {
|
Self {
|
||||||
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_i_to_out_pwr: IToPowerUnit {dimension: PhantomData, units: PhantomData, value: NAN}
|
pd_responsitivity: pd_mon::Parameters::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -125,16 +127,17 @@ impl LdDrive{
|
||||||
LdPwrExcProtector::clear_alarm_status();
|
LdPwrExcProtector::clear_alarm_status();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_pd_responsitivity(&mut self, responsitivity: pd_mon::ResponsitivityUnit){
|
||||||
|
self.settings.pd_responsitivity.responsitivity = responsitivity;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn set_ld_power_limit(&mut self, pwr_limit: Power){
|
pub fn set_ld_power_limit(&mut self, pwr_limit: Power){
|
||||||
// LdPwrExcProtector::set_trigger_threshold_v(convert pwr_limit to raw adc code)
|
LdPwrExcProtector::set_trigger_threshold_v(self.settings.pd_responsitivity
|
||||||
unimplemented!()
|
.get_ld_i_from_ld_pwr(pwr_limit) / Settings::PD_MON_TRANSCONDUCTANCE
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_pd_i_limit(&mut self, i: ElectricCurrent){
|
pub fn set_pd_i_limit(&mut self, i: ElectricCurrent){
|
||||||
LdPwrExcProtector::set_trigger_threshold_v(i / Settings::PD_MON_TRANSCONDUCTANCE);
|
LdPwrExcProtector::set_trigger_threshold_v(i / Settings::PD_MON_TRANSCONDUCTANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_pd_v_limit(&mut self, v: ElectricPotential){
|
|
||||||
LdPwrExcProtector::set_trigger_threshold_v(v);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,19 +12,22 @@ use miniconf::Miniconf;
|
||||||
// Ampere / Watt
|
// Ampere / Watt
|
||||||
pub type ResponsitivityUnit = Quantity<ISQ<N2, N1, P3, P1, Z0, Z0, Z0>, SI<f64>, f64>;
|
pub type ResponsitivityUnit = Quantity<ISQ<N2, N1, P3, P1, Z0, Z0, Z0>, SI<f64>, f64>;
|
||||||
|
|
||||||
/// Steinhart-Hart equation Photodiode
|
|
||||||
#[derive(Clone, Debug, PartialEq, Miniconf)]
|
#[derive(Clone, Debug, PartialEq, Miniconf)]
|
||||||
pub struct Parameters {
|
pub struct Parameters {
|
||||||
/// Responsitivity
|
|
||||||
pub responsitivity: ResponsitivityUnit,
|
pub responsitivity: ResponsitivityUnit,
|
||||||
pub i_dark: ElectricCurrent,
|
pub i_dark: ElectricCurrent,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Parameters {
|
impl Parameters {
|
||||||
pub fn get_ld_output_power(&self, i: ElectricCurrent) -> Power {
|
pub fn get_ld_pwr_from_ld_i(&self, i: ElectricCurrent) -> Power {
|
||||||
let ld_power = (i - self.i_dark) / self.responsitivity;
|
let ld_power = (i - self.i_dark) / self.responsitivity;
|
||||||
ld_power
|
ld_power
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_ld_i_from_ld_pwr(&self, pwr: Power) -> ElectricCurrent {
|
||||||
|
let ld_i = pwr * self.responsitivity + self.i_dark;
|
||||||
|
ld_i
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Parameters {
|
impl Default for Parameters {
|
||||||
|
|
Loading…
Reference in New Issue