forked from M-Labs/kirdy
ld_drive: Add fns to set ld output current
This commit is contained in:
parent
58a8b15c40
commit
d1f7a20c15
|
@ -9,7 +9,13 @@ use stm32f4xx_hal::{
|
|||
spi::{NoMiso, Spi, TransferModeNormal},
|
||||
};
|
||||
|
||||
use uom::si::{
|
||||
ratio::ratio,
|
||||
f64::{ElectricPotential, ElectricCurrent},
|
||||
};
|
||||
|
||||
use crate::laser_diode::max5719::{self, Dac};
|
||||
use crate::laser_diode::ld_drive::transimpedance_unit;
|
||||
|
||||
pub trait ChannelPins {
|
||||
type PdMonPin;
|
||||
|
@ -82,4 +88,16 @@ impl CurrentSource {
|
|||
pub fn ld_short_disable(&mut self) {
|
||||
self.phy.current_source_short_pin.set_high();
|
||||
}
|
||||
|
||||
pub fn set_dac(&mut self, voltage: ElectricPotential, dac_out_v_max: ElectricPotential) -> ElectricPotential {
|
||||
let value = ((voltage / dac_out_v_max).get::<ratio>()
|
||||
* (max5719::MAX_VALUE as f64)) as u32;
|
||||
self.phy.dac.set(value).unwrap();
|
||||
voltage
|
||||
}
|
||||
|
||||
pub fn set_i(&mut self, current: ElectricCurrent, transimpedance: transimpedance_unit, dac_out_v_max: ElectricPotential) -> ElectricCurrent {
|
||||
let v = current * transimpedance;
|
||||
self.set_dac(current * transimpedance, dac_out_v_max) / transimpedance
|
||||
}
|
||||
}
|
|
@ -85,4 +85,9 @@ impl LD_Drive{
|
|||
self.ctrl.ld_short_disable();
|
||||
}
|
||||
|
||||
pub fn ld_set_i(&mut self, i: ElectricCurrent) -> ElectricCurrent {
|
||||
let ld_i_set = self.ctrl.set_i(i, Settings::LD_DRIVE_TRANSIMPEDANCE, Settings::DAC_OUT_V_MAX);
|
||||
self.settings.ld_drive_current = ld_i_set;
|
||||
ld_i_set
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue