#pragma once #include #include typedef struct { uint32_t sg_result : 10; uint32_t reserved0 : 5; uint32_t fsactive : 1; uint32_t cs_actual : 5; uint32_t reserved1 : 3; uint32_t stallguard : 1; uint32_t ot : 1; uint32_t otpw : 1; uint32_t s2ga : 1; uint32_t s2gb : 1; uint32_t ola : 1; uint32_t olb : 1; uint32_t stst : 1; } TMC5130MotorStatus_t; typedef struct { uint32_t reset : 1; // fatal error uint32_t drv_err : 1; // fatal error uint32_t uv_cp : 1; // fatal error } TMC5130MotorState_t; // R+C typedef struct { uint32_t sg_result : 10; uint32_t reserved0 : 1; uint32_t reserved1 : 1; uint32_t s2vsa : 1; uint32_t s2vsb : 1; uint32_t stealth : 1; uint32_t fsactive : 1; uint32_t cs_actual : 5; uint32_t reserved2 : 3; uint32_t stallguard : 1; uint32_t ot : 1; uint32_t otpw : 1; uint32_t s2ga : 1; uint32_t s2gb : 1; uint32_t ola : 1; uint32_t olb : 1; uint32_t stst : 1; } TMC2160MotorDriverStatus_t; typedef struct { uint32_t TARGET_REACHED_F : 1; // XACTUAL = XTARGET uint32_t POS_COMP_REACHED_F : 1; // XACTUAL = POS_COMP uint32_t VEL_REACHED_F : 1; // VACTUAL = |VMAX| uint32_t VEL_STATE_F : 2; // 0:VACTUAL = 0; 1:VACTUAL > 0; 2:VACTUAL < 0 uint32_t RAMP_STATE_F : 2; // 0:AACTUAL = 0; 1:AACTUAL 增加(加速); 2:AACTUAL 减小(减速) uint32_t STOPL_ACTIVE_F : 1; // 左停止开关有效。 uint32_t STOPR_ACTIVE_F : 1; // 右停止开关有效。 uint32_t VSTOPL_ACTIVE_F : 1; // 左虚拟停止开关有效。 uint32_t VSTOPR_ACTIVE_F : 1; // 右虚拟停止开关有效。 uint32_t ACTIVE_STALL_F : 1; // 电机堵转检测且 VACTUAL > VSTALL_LIMIT。 uint32_t HOME_ERROR_F : 1; // 输入信号电平不等于预期的回零电平。 uint32_t FS_ACTIVE_F : 1; // 全步有效。 uint32_t ENC_FAIL_F : 1; // XACTUAL 和 ENC_POS 中间的差值超出容差。 uint32_t N_ACTIVE_F : 1; // 事件有效 uint32_t ENC_LATCH_F : 1; // ENC_LATCH 被重置。 uint32_t MULTI_CYCLE_FAIL_F : 1; // 仅适用于绝对编码器 MULTI_CYCLE_FAIL_F 表示上一个多圈数据出现故障。 uint32_t ___ : 1; // uint32_t CL_FIT_F : 1; // 如果 ENC_POS_DEV < CL_COMPLATION,则有效。XACTUAL 和 ENC_POS 之间的差值在容许范围内 uint32_t SERIAL_ENC_FLAGS : 4; // 仅适用于绝对编码器:从编码器接收的 SERIAL_ENC_FLAGS。新的编码器传输请求是会重置这些标志 uint32_t SG : 1; // 仅 TMC26x / TMC21x0 StallGuard2 状态。 uint32_t OT : 1; // 过温关断。 uint32_t OTPW : 1; // 过温预警。 uint32_t S2GA : 1; // 线圈 A 高端 MOSFET 管对地短路检测位。 uint32_t S2GB : 1; // 线圈 B 高端 MOSFET 管对地短路检测位。 uint32_t OLA : 1; // 线圈 A 开路。 uint32_t OLB : 1; // 线圈 B 开路。 uint32_t STST : 1; // 仅 TMC26x / TMC21x0 静止状态。 } TMC4361AMotorStatus_t; // R+CW 事件标志位 typedef struct { uint32_t reset : 1; // fatal error uint32_t drv_err : 1; // fatal error uint32_t uv_cp : 1; // fatal error } TMC2160MotorGstate_t; // R+C typedef struct { uint32_t TARGET_REACHED : 1; // uint32_t POS_COMP_REACHED : 1; // uint32_t VEL_REACHED : 1; // uint32_t VEL_STATE_EQ_0 : 1; // uint32_t VEL_STATE_EQ_1 : 1; // uint32_t VEL_STATE_EQ_2 : 1; // uint32_t RAMP_STATE_EQ_0 : 1; // uint32_t RAMP_STATE_EQ_1 : 1; // uint32_t RAMP_STATE_EQ_2 : 1; // uint32_t MAX_PHASE_TRAP : 1; // 梯形斜坡已经达到其极限速度 uint32_t FROZEN : 1; // 重置 TMC4361A,以便进一步运动。 fatal error uint32_t STOPL : 1; // uint32_t STOPR : 1; // uint32_t VSTOPL_ACTIVE : 1; // uint32_t VSTOPR_ACTIVE : 1; // uint32_t HOME_ERROR : 1; // uint32_t XLATCH_DONE : 1; // uint32_t FS_ACTIVE : 1; // uint32_t ENC_FAIL : 1; // uint32_t N_ACTIVE : 1; // uint32_t ENC_DONE : 1; // uint32_t SER_ENC_DATA_FAIL : 1; // uint32_t ___ : 1; // uint32_t SER_DATA_DONE : 1; // uint32_t SERIAL_ENC_Flags : 1; // uint32_t COVER_DONE : 1; // uint32_t ENC_VEL0 : 1; // 编码器速度到 0。 uint32_t CL_MAX : 1; // uint32_t CL_FIT : 1; // uint32_t STOP_ON_STALL : 1; // 检测到电机堵转。电机斜坡已经停止。 fatal error uint32_t MOTOR_EV : 1; // 选定的 TMC 电机驱动器标志之一被触发。 uint32_t RST_EV : 1; // 复位被触发。 fatal error } TMC4361AMotorEventState_t;