139 lines
3.2 KiB
Rust
139 lines
3.2 KiB
Rust
#![allow(dead_code)]
|
|
|
|
use crate::hardware::mct8316a::motor_startup::DutyCycle;
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct TrapConfig1 {
|
|
pub open_loop_handoff_cycles: OpenLoopHandoffCycles,
|
|
pub avs_negative_current_limit: AVSNegativeCurrentLimit,
|
|
pub avs_limit_hysteresis: AVSLimitHysteresis,
|
|
pub isd_bemf_threshold: IsdBemfThreshold,
|
|
pub isd_cycle_threshold: IsdCycleThreshold,
|
|
pub open_loop_zc_detection_threshold: OpenLoopZcDetectionThreshold,
|
|
pub fast_startup_div_factor: FastStartupDivFactor,
|
|
}
|
|
|
|
impl Default for TrapConfig1 {
|
|
fn default() -> Self {
|
|
Self {
|
|
open_loop_handoff_cycles: OpenLoopHandoffCycles::Cycles3,
|
|
avs_negative_current_limit: AVSNegativeCurrentLimit::Limit0,
|
|
avs_limit_hysteresis: AVSLimitHysteresis::Limit20,
|
|
isd_bemf_threshold: IsdBemfThreshold::Limit0,
|
|
isd_cycle_threshold: IsdCycleThreshold::Limit2,
|
|
open_loop_zc_detection_threshold: OpenLoopZcDetectionThreshold::Degrees5,
|
|
fast_startup_div_factor: FastStartupDivFactor::Value1,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum OpenLoopHandoffCycles {
|
|
Cycles3 = 0x0,
|
|
Cycles6 = 0x1,
|
|
Cycles12 = 0x2,
|
|
Cycles24 = 0x3,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum AVSNegativeCurrentLimit {
|
|
Limit0 = 0x0,
|
|
LimitNeg40 = 0x1,
|
|
LimitNeg30 = 0x2,
|
|
LimitNeg20 = 0x3,
|
|
LimitNeg10 = 0x4,
|
|
Limit10 = 0x5,
|
|
Limit20 = 0x6,
|
|
Limit30 = 0x7,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum AVSLimitHysteresis {
|
|
Limit20 = 0x0,
|
|
Limit10 = 0x1,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum IsdBemfThreshold {
|
|
Limit0 = 0x00,
|
|
Limit200 = 0x01,
|
|
Limit400 = 0x02,
|
|
Limit600 = 0x03,
|
|
Limit800 = 0x04,
|
|
Limit1000 = 0x05,
|
|
Limit1200 = 0x06,
|
|
Limit1400 = 0x07,
|
|
Limit1600 = 0x08,
|
|
Limit1800 = 0x09,
|
|
Limit2000 = 0x0A,
|
|
Limit2200 = 0x0B,
|
|
Limit2400 = 0x0C,
|
|
Limit2600 = 0x0D,
|
|
Limit2800 = 0x0E,
|
|
Limit3000 = 0x0F,
|
|
Limit3200 = 0x10,
|
|
Limit3400 = 0x11,
|
|
Limit3600 = 0x12,
|
|
Limit3800 = 0x13,
|
|
Limit4000 = 0x14,
|
|
Limit4200 = 0x15,
|
|
Limit4400 = 0x16,
|
|
Limit4600 = 0x17,
|
|
Limit4800 = 0x18,
|
|
Limit5000 = 0x19,
|
|
Limit5200 = 0x1A,
|
|
Limit5400 = 0x1B,
|
|
Limit5600 = 0x1C,
|
|
Limit5800 = 0x1D,
|
|
Limit6000 = 0x1E,
|
|
Limit6200 = 0x1F,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum IsdCycleThreshold {
|
|
Limit2 = 0x0,
|
|
Limit5 = 0x1,
|
|
Limit8 = 0x2,
|
|
Limit11 = 0x3,
|
|
Limit14 = 0x4,
|
|
Limit17 = 0x5,
|
|
Limit20 = 0x6,
|
|
Limit23 = 0x7,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum OpenLoopZcDetectionThreshold {
|
|
Degrees5 = 0x0,
|
|
Degrees8 = 0x1,
|
|
Degrees12 = 0x2,
|
|
Degrees15 = 0x3,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum FastStartupDivFactor {
|
|
Value1 = 0x0,
|
|
Value2 = 0x1,
|
|
Value4 = 0x2,
|
|
Value8 = 0x3,
|
|
}
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct TrapConfig2 {
|
|
/// Max of 0xF (15us)
|
|
pub blanking_time_microseconds: u8,
|
|
/// Max of 0x7 (7us)
|
|
pub comparator_deglitch_time_microseconds: u8,
|
|
pub align_duty_cycle: DutyCycle,
|
|
}
|
|
|
|
impl Default for TrapConfig2 {
|
|
fn default() -> Self {
|
|
Self {
|
|
blanking_time_microseconds: 0,
|
|
comparator_deglitch_time_microseconds: 0,
|
|
align_duty_cycle: DutyCycle::Percent10,
|
|
}
|
|
}
|
|
}
|
|
|