forked from M-Labs/kirdy
cleanup boot.rs, thermostat.rs
This commit is contained in:
parent
ee0ed8ebe7
commit
172c3e1dfc
|
@ -1,6 +1,5 @@
|
||||||
use super::{gpio, sys_timer, usb};
|
use super::{gpio, sys_timer, usb};
|
||||||
use crate::device::flash_store::{self, FlashStore};
|
use crate::device::flash_store::{self, FlashStore};
|
||||||
use crate::device::sys_timer::sleep;
|
|
||||||
use crate::laser_diode::ld_ctrl::{*};
|
use crate::laser_diode::ld_ctrl::{*};
|
||||||
use crate::laser_diode::laser_diode::LdDrive;
|
use crate::laser_diode::laser_diode::LdDrive;
|
||||||
use crate::thermostat::max1968::MAX1968;
|
use crate::thermostat::max1968::MAX1968;
|
||||||
|
@ -8,7 +7,7 @@ use crate::thermostat::thermostat::Thermostat;
|
||||||
use crate::net::net::ServerHandle;
|
use crate::net::net::ServerHandle;
|
||||||
use stm32_eth;
|
use stm32_eth;
|
||||||
use fugit::ExtU32;
|
use fugit::ExtU32;
|
||||||
use log::info;
|
use log::{info, debug};
|
||||||
use stm32f4xx_hal::{
|
use stm32f4xx_hal::{
|
||||||
pac::{CorePeripherals, Peripherals},
|
pac::{CorePeripherals, Peripherals},
|
||||||
rcc::RccExt,
|
rcc::RccExt,
|
||||||
|
@ -62,43 +61,38 @@ pub fn bootup(
|
||||||
|
|
||||||
usb::State::setup(usb);
|
usb::State::setup(usb);
|
||||||
|
|
||||||
let ethernet_parts_in = stm32_eth::PartsIn {
|
debug!("Setting up TEC");
|
||||||
dma: perif.ETHERNET_DMA,
|
let tec_driver = MAX1968::new(max1968_phy, perif.ADC1);
|
||||||
mac: perif.ETHERNET_MAC,
|
let mut thermostat = Thermostat::new(tec_driver, ad7172_phy);
|
||||||
mmc: perif.ETHERNET_MMC,
|
thermostat.setup();
|
||||||
ptp: perif.ETHERNET_PTP,
|
thermostat.power_up();
|
||||||
};
|
thermostat.calibrate_dac_value();
|
||||||
|
thermostat.set_i(ElectricCurrent::new::<ampere>(1.0));
|
||||||
sleep(1000);
|
|
||||||
|
|
||||||
info!("Setting up ETH");
|
|
||||||
ServerHandle::new(eth_pins, eth_mgmt_pins, ethernet_parts_in, clocks);
|
|
||||||
info!("Setting finish setting up ETH");
|
|
||||||
|
|
||||||
|
debug!("Setting up Laser Driver");
|
||||||
let current_source = LdCtrl::new(current_source_phy);
|
let current_source = LdCtrl::new(current_source_phy);
|
||||||
info!("Setting up Laser");
|
|
||||||
let mut laser = LdDrive::new(current_source, perif.ADC2, pd_mon_phy);
|
let mut laser = LdDrive::new(current_source, perif.ADC2, pd_mon_phy);
|
||||||
laser.setup();
|
laser.setup();
|
||||||
laser.ld_open();
|
laser.ld_open();
|
||||||
laser.set_ld_drive_current_limit(ElectricCurrent::new::<ampere>(0.2));
|
laser.set_ld_drive_current_limit(ElectricCurrent::new::<ampere>(0.2));
|
||||||
laser.ld_set_i(ElectricCurrent::new::<ampere>(0.15));
|
laser.ld_set_i(ElectricCurrent::new::<ampere>(0.15));
|
||||||
laser.set_pd_i_limit(ElectricCurrent::new::<milliampere>(2.5));
|
laser.set_pd_i_limit(ElectricCurrent::new::<milliampere>(2.5));
|
||||||
laser.power_up();
|
|
||||||
|
|
||||||
info!("Setting up TEC");
|
|
||||||
let tec_driver = MAX1968::new(max1968_phy, perif.ADC1);
|
|
||||||
|
|
||||||
let mut thermostat = Thermostat::new(tec_driver, ad7172_phy);
|
|
||||||
thermostat.setup();
|
|
||||||
|
|
||||||
thermostat.power_up();
|
|
||||||
thermostat.calibrate_dac_value();
|
|
||||||
thermostat.set_i(ElectricCurrent::new::<ampere>(1.0));
|
|
||||||
|
|
||||||
laser.set_pd_mon_calibrated_vdda(thermostat.get_calibrated_vdda());
|
laser.set_pd_mon_calibrated_vdda(thermostat.get_calibrated_vdda());
|
||||||
|
laser.power_up();
|
||||||
|
|
||||||
|
debug!("Setting up Internal Flash Driver");
|
||||||
let flash_store = flash_store::store(perif.FLASH);
|
let flash_store = flash_store::store(perif.FLASH);
|
||||||
|
|
||||||
|
debug!("Setting up ETH");
|
||||||
|
let ethernet_parts_in = stm32_eth::PartsIn {
|
||||||
|
dma: perif.ETHERNET_DMA,
|
||||||
|
mac: perif.ETHERNET_MAC,
|
||||||
|
mmc: perif.ETHERNET_MMC,
|
||||||
|
ptp: perif.ETHERNET_PTP,
|
||||||
|
};
|
||||||
|
ServerHandle::new(eth_pins, eth_mgmt_pins, ethernet_parts_in, clocks);
|
||||||
|
|
||||||
|
debug!("Setting Watchdog");
|
||||||
let mut wd = IndependentWatchdog::new(perif.IWDG);
|
let mut wd = IndependentWatchdog::new(perif.IWDG);
|
||||||
wd.start(WATCHDOG_PERIOD.millis());
|
wd.start(WATCHDOG_PERIOD.millis());
|
||||||
wd.feed();
|
wd.feed();
|
||||||
|
|
|
@ -6,7 +6,7 @@ use crate::thermostat::max1968::{MAX1968, AdcReadTarget, PwmPinsEnum};
|
||||||
use crate::thermostat::ad7172;
|
use crate::thermostat::ad7172;
|
||||||
use crate::thermostat::pid_state::PidState;
|
use crate::thermostat::pid_state::PidState;
|
||||||
use crate::thermostat::steinhart_hart;
|
use crate::thermostat::steinhart_hart;
|
||||||
use log::info;
|
use log::debug;
|
||||||
use uom::si::{
|
use uom::si::{
|
||||||
electric_current::ampere,
|
electric_current::ampere,
|
||||||
electric_potential::volt,
|
electric_potential::volt,
|
||||||
|
@ -167,7 +167,6 @@ impl Thermostat{
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_center_pt(&mut self, value: ElectricPotential){
|
fn set_center_pt(&mut self, value: ElectricPotential){
|
||||||
info!("set center pt: {:?}", value);
|
|
||||||
self.tec_setting.center_pt = value;
|
self.tec_setting.center_pt = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -233,14 +232,14 @@ impl Thermostat{
|
||||||
/// VREF measurement can introduce significant noise at the current output, degrading the stabilily performance of the
|
/// VREF measurement can introduce significant noise at the current output, degrading the stabilily performance of the
|
||||||
/// thermostat.
|
/// thermostat.
|
||||||
pub fn calibrate_dac_value(&mut self) {
|
pub fn calibrate_dac_value(&mut self) {
|
||||||
|
const STEPS: i32 = 18;
|
||||||
let target_voltage = self.max1968.adc_read(AdcReadTarget::VREF, 64);
|
let target_voltage = self.max1968.adc_read(AdcReadTarget::VREF, 64);
|
||||||
let mut start_value = 1;
|
let mut start_value = 1;
|
||||||
let mut best_error = ElectricPotential::new::<volt>(100.0);
|
let mut best_error = ElectricPotential::new::<volt>(100.0);
|
||||||
for step in (0..18).rev() {
|
for step in (0..STEPS).rev() {
|
||||||
info!("Step: {} Calibrating", step);
|
debug!("TEC VREF Calibrating: Step {}/{}", step, STEPS);
|
||||||
let mut prev_value = start_value;
|
let mut prev_value = start_value;
|
||||||
for value in (start_value..=ad5680::MAX_VALUE).step_by(1 << step) {
|
for value in (start_value..=ad5680::MAX_VALUE).step_by(1 << step) {
|
||||||
info!("Calibrating: Value: {:?}", value);
|
|
||||||
self.max1968.phy.dac.set(value).unwrap();
|
self.max1968.phy.dac.set(value).unwrap();
|
||||||
sys_timer::sleep(5);
|
sys_timer::sleep(5);
|
||||||
|
|
||||||
|
@ -258,7 +257,6 @@ impl Thermostat{
|
||||||
prev_value = value;
|
prev_value = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
info!("Best Error: {:?}", best_error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn pid_engaged(&mut self) -> bool {
|
pub fn pid_engaged(&mut self) -> bool {
|
||||||
|
|
Loading…
Reference in New Issue