52 lines
1.6 KiB
C
52 lines
1.6 KiB
C
|
|
#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__ */
|