Compare commits
1 Commits
ec5bf1d6b6
...
ecfcce13a8
Author | SHA1 | Date |
---|---|---|
linuswck | ecfcce13a8 |
|
@ -129,11 +129,16 @@ class FilterConfig:
|
||||||
def _filter_type(self):
|
def _filter_type(self):
|
||||||
return "Sinc3"
|
return "Sinc3"
|
||||||
|
|
||||||
|
############## Rewrite
|
||||||
class Sinc3WithFineODR():
|
class Sinc3WithFineODR():
|
||||||
def __init__(self, rate):
|
def __init__(self, rate):
|
||||||
assert rate >= 1.907465 and rate <= 31250
|
assert rate >= 1.907465 and rate <= 31250
|
||||||
self.rate = float(rate)
|
self.rate = float(rate)
|
||||||
|
|
||||||
|
# def rate(self, rate):
|
||||||
|
# assert rate >= 1.907465 and rate <= 31250
|
||||||
|
# return float(rate)
|
||||||
|
|
||||||
def _odr_type(self):
|
def _odr_type(self):
|
||||||
return "sinc3fineodr"
|
return "sinc3fineodr"
|
||||||
|
|
||||||
|
@ -223,7 +228,7 @@ class Device:
|
||||||
'ld_i_set': 0.0, # Laser Diode Output Current (A)
|
'ld_i_set': 0.0, # Laser Diode Output Current (A)
|
||||||
'pd_i': 2.0000002e-06, # Internal Photodiode Monitor current (A)
|
'pd_i': 2.0000002e-06, # Internal Photodiode Monitor current (A)
|
||||||
'pd_pwr': None, # Power Readings from Internal Photodiode (W). Return None if pd_mon parameter(s) are not defined.
|
'pd_pwr': None, # Power Readings from Internal Photodiode (W). Return None if pd_mon parameter(s) are not defined.
|
||||||
'term_50ohm': 'Is50Ohm' # Is the Low Frequency Modulation Input's Impedance 50 Ohm? (On/Off)
|
'term_status': 'Is50Ohm' # Is the Low Frequency Modulation Input's Impedance 50 Ohm? (Is50Ohm/Not50Ohm)
|
||||||
},
|
},
|
||||||
'thermostat': {
|
'thermostat': {
|
||||||
'pwr_on': False, # Tec Power is On (True/False)
|
'pwr_on': False, # Tec Power is On (True/False)
|
||||||
|
|
|
@ -332,7 +332,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
{'name': 'LD Current Set', 'type': 'float', 'suffix': 'A', 'siPrefix': True, 'readonly': True},
|
{'name': 'LD Current Set', 'type': 'float', 'suffix': 'A', 'siPrefix': True, 'readonly': True},
|
||||||
{'name': 'PD Current', 'type': 'float', 'suffix': 'A', 'siPrefix': True, 'readonly': True},
|
{'name': 'PD Current', 'type': 'float', 'suffix': 'A', 'siPrefix': True, 'readonly': True},
|
||||||
{'name': 'PD Power', 'type': 'float', 'suffix': 'W', 'siPrefix': True, 'readonly': True},
|
{'name': 'PD Power', 'type': 'float', 'suffix': 'W', 'siPrefix': True, 'readonly': True},
|
||||||
{'name': 'LF Mod Termination (50 Ohm)', 'type': 'list', 'limits': ['On', 'Off'], 'readonly': True}
|
{'name': 'LF Mod Impedance', 'type': 'list', 'limits': ['Is50Ohm', 'Not50Ohm'], 'readonly': True}
|
||||||
]},
|
]},
|
||||||
{'name': 'Output Config', 'expanded': True, 'type': 'group', 'children': [
|
{'name': 'Output Config', 'expanded': True, 'type': 'group', 'children': [
|
||||||
{'name': 'LD Current Set', 'type': 'float', 'value': 0, 'step': 1, 'decimals': 6, 'limits': (0, 1),
|
{'name': 'LD Current Set', 'type': 'float', 'value': 0, 'step': 1, 'decimals': 6, 'limits': (0, 1),
|
||||||
|
@ -818,7 +818,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
self.params[1].child('Readings', 'PD Power').setValue(report["pd_pwr"])
|
self.params[1].child('Readings', 'PD Power').setValue(report["pd_pwr"])
|
||||||
else:
|
else:
|
||||||
self.params[1].child('Readings', 'PD Power').setValue(0)
|
self.params[1].child('Readings', 'PD Power').setValue(0)
|
||||||
self.params[1].child('Readings', 'LF Mod Termination (50 Ohm)').setValue(report["term_50ohm"])
|
self.params[1].child('Readings', 'LF Mod Impedance').setValue(report["term_status"])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"Params tree cannot be updated. Data:{report}", exc_info=True)
|
logging.error(f"Params tree cannot be updated. Data:{report}", exc_info=True)
|
||||||
|
|
||||||
|
@ -898,7 +898,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
try:
|
try:
|
||||||
if not (self.kirdy.connecting() or self.kirdy.connected()):
|
if not (self.kirdy.connecting() or self.kirdy.connected()):
|
||||||
self.status_lbl.setText("Connecting...")
|
self.status_lbl.setText("Connecting...")
|
||||||
await self.kirdy.start_session(host=host, port=port, timeout=5.0)
|
await self.kirdy.start_session(host=host, port=port, timeout=0.1)
|
||||||
await self._on_connection_changed(True)
|
await self._on_connection_changed(True)
|
||||||
else:
|
else:
|
||||||
await self.bail()
|
await self.bail()
|
||||||
|
|
|
@ -10,7 +10,7 @@ use uom::si::{electric_current::{ampere, milliampere},
|
||||||
power::milliwatt};
|
power::milliwatt};
|
||||||
|
|
||||||
use crate::{device::sys_timer::sleep,
|
use crate::{device::sys_timer::sleep,
|
||||||
laser_diode::{ld_ctrl::{Impedance50Ohm, LdCtrl},
|
laser_diode::{ld_ctrl::{Impedance, LdCtrl},
|
||||||
ld_current_out_ctrl_timer::LdCurrentOutCtrlTimer,
|
ld_current_out_ctrl_timer::LdCurrentOutCtrlTimer,
|
||||||
ld_pwr_exc_protector::{self, LdPwrExcProtector},
|
ld_pwr_exc_protector::{self, LdPwrExcProtector},
|
||||||
pd_mon_params}};
|
pd_mon_params}};
|
||||||
|
@ -66,7 +66,7 @@ pub struct StatusReport {
|
||||||
ld_i_set: ElectricCurrent,
|
ld_i_set: ElectricCurrent,
|
||||||
pd_i: ElectricCurrent,
|
pd_i: ElectricCurrent,
|
||||||
pd_pwr: Power,
|
pd_pwr: Power,
|
||||||
term_50ohm: Impedance50Ohm,
|
term_status: Impedance,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct LdDrive {
|
pub struct LdDrive {
|
||||||
|
@ -210,7 +210,7 @@ impl LdDrive {
|
||||||
self.settings.default_pwr_on = pwr_on;
|
self.settings.default_pwr_on = pwr_on;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_term_status(&mut self) -> Impedance50Ohm {
|
pub fn get_term_status(&mut self) -> Impedance {
|
||||||
self.ctrl.get_lf_mod_in_impedance()
|
self.ctrl.get_lf_mod_in_impedance()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ impl LdDrive {
|
||||||
ld_i_set: ld_i_set,
|
ld_i_set: ld_i_set,
|
||||||
pd_i: self.get_pd_i(),
|
pd_i: self.get_pd_i(),
|
||||||
pd_pwr: self.get_pd_pwr(),
|
pd_pwr: self.get_pd_pwr(),
|
||||||
term_50ohm: self.get_term_status(),
|
term_status: self.get_term_status(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,9 +255,6 @@ impl LdDrive {
|
||||||
self.settings.pd_mon_params = settings.pd_mon_params;
|
self.settings.pd_mon_params = settings.pd_mon_params;
|
||||||
self.settings.ld_pwr_limit = settings.ld_pwr_limit;
|
self.settings.ld_pwr_limit = settings.ld_pwr_limit;
|
||||||
self.settings.default_pwr_on = settings.default_pwr_on;
|
self.settings.default_pwr_on = settings.default_pwr_on;
|
||||||
|
|
||||||
self.set_ld_power_limit(settings.ld_pwr_limit);
|
|
||||||
|
|
||||||
if self.settings.ld_terms_short {
|
if self.settings.ld_terms_short {
|
||||||
self.ld_short();
|
self.ld_short();
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -11,9 +11,9 @@ use uom::si::{electric_current::ampere,
|
||||||
use crate::laser_diode::max5719::{self, Dac};
|
use crate::laser_diode::max5719::{self, Dac};
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize, Debug, Clone, Copy)]
|
#[derive(Deserialize, Serialize, Debug, Clone, Copy)]
|
||||||
pub enum Impedance50Ohm {
|
pub enum Impedance {
|
||||||
On,
|
Is50Ohm,
|
||||||
Off,
|
Not50Ohm,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait ChannelPins {
|
pub trait ChannelPins {
|
||||||
|
@ -66,11 +66,11 @@ impl LdCtrl {
|
||||||
self.phy.current_source_short_pin.set_high();
|
self.phy.current_source_short_pin.set_high();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_lf_mod_in_impedance(&mut self) -> Impedance50Ohm {
|
pub fn get_lf_mod_in_impedance(&mut self) -> Impedance {
|
||||||
if self.phy.termination_status_pin.is_high() {
|
if self.phy.termination_status_pin.is_high() {
|
||||||
Impedance50Ohm::On
|
Impedance::Is50Ohm
|
||||||
} else {
|
} else {
|
||||||
Impedance50Ohm::Off
|
Impedance::Not50Ohm
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ use stm32f4xx_hal::{adc::{config::{self, AdcConfig},
|
||||||
timer::pwm::PwmChannel};
|
timer::pwm::PwmChannel};
|
||||||
use uom::si::{electric_potential::millivolt, f32::ElectricPotential, ratio::ratio};
|
use uom::si::{electric_potential::millivolt, f32::ElectricPotential, ratio::ratio};
|
||||||
|
|
||||||
use crate::{device::sys_timer::sleep, thermostat::ad5680};
|
use crate::thermostat::ad5680;
|
||||||
|
|
||||||
pub const PWM_FREQ_KHZ: KilohertzU32 = KilohertzU32::from_raw(20);
|
pub const PWM_FREQ_KHZ: KilohertzU32 = KilohertzU32::from_raw(20);
|
||||||
|
|
||||||
|
@ -77,7 +77,6 @@ pub struct MAX1968 {
|
||||||
pub phy: MAX1968Phy<Channel0>,
|
pub phy: MAX1968Phy<Channel0>,
|
||||||
pub pins_adc: Adc<ADC1>,
|
pub pins_adc: Adc<ADC1>,
|
||||||
pub dma_adc: DMA_Transfer<Stream2<DMA2>, 1, Adc<ADC2>, PeripheralToMemory, &'static mut [u16; 16]>,
|
pub dma_adc: DMA_Transfer<Stream2<DMA2>, 1, Adc<ADC2>, PeripheralToMemory, &'static mut [u16; 16]>,
|
||||||
pub dac_out_range: ElectricPotential,
|
|
||||||
prev_vtec_volt: ElectricPotential,
|
prev_vtec_volt: ElectricPotential,
|
||||||
prev_itec_volt: ElectricPotential,
|
prev_itec_volt: ElectricPotential,
|
||||||
}
|
}
|
||||||
|
@ -116,7 +115,7 @@ static mut ADC2_FIRST_BUFFER: [u16; 16] = [0; 16];
|
||||||
static mut ADC2_LOCAL_BUFFER: [u16; 16] = [0; 16];
|
static mut ADC2_LOCAL_BUFFER: [u16; 16] = [0; 16];
|
||||||
|
|
||||||
impl MAX1968 {
|
impl MAX1968 {
|
||||||
pub fn new(mut phy_ch0: MAX1968Phy<Channel0>, adc1: ADC1, adc2: ADC2, dma2: DMA2) -> Self {
|
pub fn new(phy_ch0: MAX1968Phy<Channel0>, adc1: ADC1, adc2: ADC2, dma2: DMA2) -> Self {
|
||||||
let adc_config = AdcConfig::default()
|
let adc_config = AdcConfig::default()
|
||||||
.clock(config::Clock::Pclk2_div_8)
|
.clock(config::Clock::Pclk2_div_8)
|
||||||
.default_sample_time(config::SampleTime::Cycles_480);
|
.default_sample_time(config::SampleTime::Cycles_480);
|
||||||
|
@ -223,26 +222,10 @@ impl MAX1968 {
|
||||||
NVIC::unmask(interrupt::DMA2_STREAM2);
|
NVIC::unmask(interrupt::DMA2_STREAM2);
|
||||||
}
|
}
|
||||||
|
|
||||||
phy_ch0.dac.set(ad5680::MAX_VALUE).unwrap();
|
|
||||||
sleep(500);
|
|
||||||
let mut sample = 0;
|
|
||||||
for _ in 0..512 {
|
|
||||||
sample += pins_adc1.convert(
|
|
||||||
&phy_ch0.dac_feedback_pin,
|
|
||||||
stm32f4xx_hal::adc::config::SampleTime::Cycles_480,
|
|
||||||
) as u32;
|
|
||||||
}
|
|
||||||
let sample = sample / 512 as u32;
|
|
||||||
let mv = pins_adc1.sample_to_millivolts(sample as u16);
|
|
||||||
let dac_out_range = ElectricPotential::new::<millivolt>(mv as f32);
|
|
||||||
phy_ch0.dac.set(0).unwrap();
|
|
||||||
|
|
||||||
|
|
||||||
MAX1968 {
|
MAX1968 {
|
||||||
phy: phy_ch0,
|
phy: phy_ch0,
|
||||||
pins_adc: pins_adc1,
|
pins_adc: pins_adc1,
|
||||||
dma_adc: dma_adc,
|
dma_adc: dma_adc,
|
||||||
dac_out_range: dac_out_range,
|
|
||||||
prev_vtec_volt: ElectricPotential::new::<millivolt>(0.0),
|
prev_vtec_volt: ElectricPotential::new::<millivolt>(0.0),
|
||||||
prev_itec_volt: ElectricPotential::new::<millivolt>(0.0),
|
prev_itec_volt: ElectricPotential::new::<millivolt>(0.0),
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,11 @@ pub struct TecSettings {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TecSettings {
|
impl TecSettings {
|
||||||
|
pub const DAC_OUT_V_MAX: ElectricPotential = ElectricPotential {
|
||||||
|
dimension: PhantomData,
|
||||||
|
units: PhantomData,
|
||||||
|
value: 3.0,
|
||||||
|
};
|
||||||
pub const TEC_VSEC_BIAS_V: ElectricPotential = ElectricPotential {
|
pub const TEC_VSEC_BIAS_V: ElectricPotential = ElectricPotential {
|
||||||
dimension: PhantomData,
|
dimension: PhantomData,
|
||||||
units: PhantomData,
|
units: PhantomData,
|
||||||
|
@ -232,8 +237,7 @@ impl Thermostat {
|
||||||
|
|
||||||
pub fn set_i(&mut self, i_tec: ElectricCurrent) -> ElectricCurrent {
|
pub fn set_i(&mut self, i_tec: ElectricCurrent) -> ElectricCurrent {
|
||||||
let voltage = i_tec * 10.0 * R_SENSE + self.tec_settings.center_pt;
|
let voltage = i_tec * 10.0 * R_SENSE + self.tec_settings.center_pt;
|
||||||
let voltage = self.max1968.set_dac(voltage, self.max1968.dac_out_range);
|
let voltage = self.max1968.set_dac(voltage, TecSettings::DAC_OUT_V_MAX);
|
||||||
|
|
||||||
self.tec_settings.i_set = (voltage - self.tec_settings.center_pt) / (10.0 * R_SENSE);
|
self.tec_settings.i_set = (voltage - self.tec_settings.center_pt) / (10.0 * R_SENSE);
|
||||||
self.tec_settings.i_set
|
self.tec_settings.i_set
|
||||||
}
|
}
|
||||||
|
@ -331,7 +335,7 @@ impl Thermostat {
|
||||||
best_error = error;
|
best_error = error;
|
||||||
start_value = prev_value;
|
start_value = prev_value;
|
||||||
|
|
||||||
let vref = (value as f32 / ad5680::MAX_VALUE as f32) * self.max1968.dac_out_range;
|
let vref = (value as f32 / ad5680::MAX_VALUE as f32) * TecSettings::DAC_OUT_V_MAX;
|
||||||
self.set_center_pt(vref);
|
self.set_center_pt(vref);
|
||||||
}
|
}
|
||||||
prev_value = value;
|
prev_value = value;
|
||||||
|
|
Loading…
Reference in New Issue