#ifndef __INT_TMC2209_H__ #define __INT_TMC2209_H__ #include "main.h" #include "tim.h" #include "gpio.h" #include "usart.h" #include "Com_type.h" #include "Com_debug.h" // TMC2209串口从机地址 #define TMC2209_USART_SLAVE_ADDR 0x03 #define TMC2209_GCONF_REG_ADDR 0x00 // ---------------- 机械参数定义 ---------------- // 步进角 1.8° (200步/圈) #define STEPPER_CIRCLE_STEPS 200 // 细分设置 (8细分) #define STEPPER_SPLIT 8 // 丝杆导程 (转一圈前进 8mm) #define STICK_LEAD 8.0f // [核心] 计算每毫米需要的脉冲数 // 公式: (一圈步数 * 细分) / 导程 // 例如: (200 * 8) / 8 = 200 步/mm #define STEPS_PER_MM ((float)(STEPPER_CIRCLE_STEPS * STEPPER_SPLIT) / STICK_LEAD) // 定时器时钟频率 (4MHz) #define TIM_CLOCK_FREQ 4000000 // ---------------- 计算公式修改 ---------------- // [修改] 计算ARR的宏:根据线速度(mm/s)计算ARR值 // 逻辑推导: // 1. 每秒脉冲数 (Hz) = 速度(mm/s) * 每毫米步数(steps/mm) // 2. 翻转频率 (Toggle Hz) = 每秒脉冲数 * 2 (因为一个脉冲包含高低电平两次中断) // 3. ARR = 定时器时钟 / 翻转频率 - 1 // 传入参数 speed_mm_s 单位:mm/s #define CALC_ARR(speed_mm_s) ((uint32_t)((TIM_CLOCK_FREQ) / ((speed_mm_s) * STEPS_PER_MM * 2.0f) - 1)) /* 物理参数定义 */ #define SOFT_LIMIT_MAX_MM 230.0f /* 丝杆有效量程上限 (mm) */ #define SOFT_LIMIT_MIN_MM 0.0f /* 丝杆有效量程下限 (mm) */ void Int_TMC2209_init(void); void Int_TMC2209_start(Stepper_t *stepper, Encoder_t *encoder); void Int_TMC2209_stop(void); #endif /* __INT_TMC2209_H__ */