278 lines
7.0 KiB
Rust
278 lines
7.0 KiB
Rust
#![allow(dead_code)]
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct FaultConfig1 {
|
|
pub no_motor_detect_deglitch_time: NoMotorDetectDeglitchTime,
|
|
pub cycle_by_cycle_current_limit: CycleByCycleCurrentLimit,
|
|
pub lock_detection_current_limit: LockDetectionCurrentLimit,
|
|
pub lock_detection_current_limit_mode: LockMode,
|
|
pub lock_detection_current_limit_deglitch_time: LockDetectionCurrentLimitDeglitchTime,
|
|
/// Max of 0x7
|
|
pub cycle_by_cycle_pwm_limit: u8,
|
|
pub motor_lock_mode: LockMode,
|
|
pub lock_retry_time: LockRetryTime,
|
|
}
|
|
|
|
impl Default for FaultConfig1 {
|
|
fn default() -> Self {
|
|
Self {
|
|
no_motor_detect_deglitch_time: NoMotorDetectDeglitchTime::Milliseconds1,
|
|
cycle_by_cycle_current_limit:
|
|
CycleByCycleCurrentLimit::RecoverNextPwmFaultActiveRecirculation,
|
|
lock_detection_current_limit: LockDetectionCurrentLimit::NotApplicable,
|
|
lock_detection_current_limit_mode: LockMode::LatchFaultTristated,
|
|
lock_detection_current_limit_deglitch_time:
|
|
LockDetectionCurrentLimitDeglitchTime::Milliseconds1,
|
|
cycle_by_cycle_pwm_limit: 0,
|
|
motor_lock_mode: LockMode::LatchFaultTristated,
|
|
lock_retry_time: LockRetryTime::Milliseconds100,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum NoMotorDetectDeglitchTime {
|
|
Milliseconds1 = 0x0,
|
|
Milliseconds10 = 0x1,
|
|
Milliseconds25 = 0x2,
|
|
Milliseconds50 = 0x3,
|
|
Milliseconds100 = 0x4,
|
|
Milliseconds250 = 0x5,
|
|
Milliseconds500 = 0x6,
|
|
Milliseconds1000 = 0x7,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum CycleByCycleCurrentLimit {
|
|
RecoverNextPwmFaultActiveRecirculation = 0x0,
|
|
RecoverNextPwmFaultInactiveRecirculation = 0x1,
|
|
RecoverVsoxFaultActiveRecirculation = 0x2,
|
|
RecoverVsoxFaultInactiveRecirculation = 0x3,
|
|
RecoverRetryFaultActiveRecirculation = 0x4,
|
|
RecoverRetryFaultInactiveRecirculation = 0x5,
|
|
ReportOnly = 0x6,
|
|
Disabled = 0xF,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum LockDetectionCurrentLimit {
|
|
NotApplicable = 0x0,
|
|
Volts0_1 = 0x1,
|
|
Volts0_2 = 0x2,
|
|
Volts0_3 = 0x3,
|
|
Volts0_4 = 0x4,
|
|
Volts0_5 = 0x5,
|
|
Volts0_6 = 0x6,
|
|
Volts0_7 = 0x7,
|
|
Volts0_8 = 0x8,
|
|
Volts0_9 = 0x9,
|
|
Volts1_0 = 0xA,
|
|
Volts1_1 = 0xB,
|
|
Volts1_2 = 0xC,
|
|
Volts1_3 = 0xD,
|
|
Volts1_4 = 0xE,
|
|
Volts1_5 = 0xF,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum LockMode {
|
|
LatchFaultTristated = 0x0,
|
|
LatchFaultRecirculation = 0x1,
|
|
LatchFaultHighSideBrake = 0x2,
|
|
LatchFaultLowSideBrake = 0x3,
|
|
RecoverRetryTristated = 0x4,
|
|
RecoverRetryRecirculation = 0x5,
|
|
RecoverRetryHighSideBrake = 0x6,
|
|
RecoverRetryLowSideBrake = 0x7,
|
|
ReportOnly = 0x8,
|
|
Disabled = 0xF,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum LockDetectionCurrentLimitDeglitchTime {
|
|
Milliseconds1 = 0x0,
|
|
Milliseconds2 = 0x1,
|
|
Milliseconds5 = 0x2,
|
|
Milliseconds10 = 0x3,
|
|
Milliseconds25 = 0x4,
|
|
Milliseconds50 = 0x5,
|
|
Milliseconds75 = 0x6,
|
|
Milliseconds100 = 0x7,
|
|
Milliseconds250 = 0x8,
|
|
Milliseconds500 = 0x9,
|
|
Seconds1 = 0xA,
|
|
Seconds2_5 = 0xB,
|
|
Seconds5 = 0xC,
|
|
Seconds10 = 0xD,
|
|
Seconds25 = 0xE,
|
|
Seconds50 = 0xF,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum LockRetryTime {
|
|
Milliseconds100 = 0x0,
|
|
Milliseconds500 = 0x1,
|
|
Milliseconds1000 = 0x2,
|
|
Milliseconds2000 = 0x3,
|
|
Milliseconds3000 = 0x4,
|
|
Milliseconds5000 = 0x5,
|
|
Milliseconds7500 = 0x6,
|
|
Milliseconds10000 = 0x7,
|
|
}
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct FaultConfig2 {
|
|
/// Lock 1
|
|
pub lock_abnormal_speed_enable: bool,
|
|
/// Lock 2
|
|
pub lock_loss_of_sync_enable: bool,
|
|
/// Lock 3
|
|
pub lock_no_motor_enable: bool,
|
|
pub abnormal_speed_lock_threshold: AbnormalSpeedLockThreshold,
|
|
pub loss_sync_times: LossSyncTimes,
|
|
pub no_motor_threshold: NoMotorThreshold,
|
|
pub max_motor_voltage_mode: MotorVoltageMode,
|
|
pub max_motor_voltage: MaxMotorVoltage,
|
|
pub min_motor_voltage_mode: MotorVoltageMode,
|
|
pub min_motor_voltage: MinMotorVoltage,
|
|
pub automatic_retries: AutomaticRetries,
|
|
pub lock_min_speed: LockMinSpeed,
|
|
pub abnormal_speed_lock: AbnormalSpeedLock,
|
|
pub zero_duty_threshold: ZeroDutyThreshold,
|
|
}
|
|
|
|
impl Default for FaultConfig2 {
|
|
fn default() -> Self {
|
|
Self {
|
|
lock_abnormal_speed_enable: false,
|
|
lock_loss_of_sync_enable: false,
|
|
lock_no_motor_enable: false,
|
|
abnormal_speed_lock_threshold: AbnormalSpeedLockThreshold::Hertz250,
|
|
loss_sync_times: LossSyncTimes::Count2,
|
|
no_motor_threshold: NoMotorThreshold::Volts0_005,
|
|
max_motor_voltage_mode: MotorVoltageMode::Latch,
|
|
max_motor_voltage: MaxMotorVoltage::NoLimit,
|
|
min_motor_voltage_mode: MotorVoltageMode::Latch,
|
|
min_motor_voltage: MinMotorVoltage::NoLimit,
|
|
automatic_retries: AutomaticRetries::NoLimit,
|
|
lock_min_speed: LockMinSpeed::Hertz0_5,
|
|
abnormal_speed_lock: AbnormalSpeedLock::Ratio2,
|
|
zero_duty_threshold: ZeroDutyThreshold::Percent1,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum AbnormalSpeedLockThreshold {
|
|
Hertz250 = 0x0,
|
|
Hertz500 = 0x1,
|
|
Hertz750 = 0x2,
|
|
Hertz1000 = 0x3,
|
|
Hertz1250 = 0x4,
|
|
Hertz1500 = 0x5,
|
|
Hertz1750 = 0x6,
|
|
Hertz2000 = 0x7,
|
|
Hertz2250 = 0x8,
|
|
Hertz2500 = 0x9,
|
|
Hertz2750 = 0xA,
|
|
Hertz3000 = 0xB,
|
|
Hertz3250 = 0xC,
|
|
Hertz3500 = 0xD,
|
|
Hertz3750 = 0xE,
|
|
Hertz4000 = 0xF,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum LossSyncTimes {
|
|
Count2 = 0x0,
|
|
Count3 = 0x1,
|
|
Count4 = 0x2,
|
|
Count5 = 0x3,
|
|
Count6 = 0x4,
|
|
Count7 = 0x5,
|
|
Count8 = 0x6,
|
|
Count9 = 0x7,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum NoMotorThreshold {
|
|
Volts0_005 = 0x0,
|
|
Volts0_0075 = 0x1,
|
|
Volts0_010 = 0x2,
|
|
Volts0_0125 = 0x3,
|
|
Volts0_020 = 0x4,
|
|
Volts0_025 = 0x5,
|
|
Volts0_030 = 0x6,
|
|
Volts0_04 = 0x7,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum MotorVoltageMode {
|
|
Latch = 0x0,
|
|
AutomaticClear = 0x1,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum MaxMotorVoltage {
|
|
NoLimit = 0x0,
|
|
Volts20 = 0x1,
|
|
Volts25 = 0x2,
|
|
Volts30 = 0x3,
|
|
Volts35 = 0x4,
|
|
Volts40 = 0x5,
|
|
Volts50 = 0x6,
|
|
Volts60 = 0x7,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum MinMotorVoltage {
|
|
NoLimit = 0x0,
|
|
Volts6 = 0x1,
|
|
Volts7 = 0x2,
|
|
Volts8 = 0x3,
|
|
Volts9 = 0x4,
|
|
Volts10 = 0x5,
|
|
Volts12 = 0x6,
|
|
Volts15 = 0x7,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum AutomaticRetries {
|
|
NoLimit = 0x0,
|
|
Count2 = 0x1,
|
|
Count3 = 0x2,
|
|
Count5 = 0x3,
|
|
Count7 = 0x4,
|
|
Count10 = 0x5,
|
|
Count15 = 0x6,
|
|
Count20 = 0x7,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum LockMinSpeed {
|
|
Hertz0_5 = 0x0,
|
|
Hertz1 = 0x1,
|
|
Hertz2 = 0x2,
|
|
Hertz3 = 0x3,
|
|
Hertz5 = 0x4,
|
|
Hertz10 = 0x5,
|
|
Hertz15 = 0x6,
|
|
Hertz20 = 0x7,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum AbnormalSpeedLock {
|
|
Ratio2 = 0x0,
|
|
Ratio4 = 0x1,
|
|
Ratio6 = 0x2,
|
|
Ratio8 = 0x3,
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub enum ZeroDutyThreshold {
|
|
Percent1 = 0x0,
|
|
Percent1_5 = 0x1,
|
|
Percent2 = 0x2,
|
|
Percent2_5 = 0x3,
|
|
}
|