initial work on mct8316a

This commit is contained in:
2025-10-18 16:32:22 -07:00
parent e8f91d0d75
commit d552fe3627
20 changed files with 2221 additions and 42 deletions

View File

@@ -0,0 +1,140 @@
#![allow(dead_code)]
use crate::hardware::mct8316a::motor_startup::DutyCycle;
#[allow(dead_code)]
#[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,
}
}
}