跳转到内容
新建笔记

TMC4361A功能方框图

参考网站1 | 参考网站2 |

TMC4361A-LA 功能方框图详解

跳转到“TMC4361A-LA 功能方框图详解”

TMC4361A 引脚功能详解表

跳转到“TMC4361A 引脚功能详解表”
引脚名称类型功能描述与STM32连接备注
NSCSIN输入SPI片选信号(低电平有效)PA4主机控制TMC4361A的SPI片选
SCKIN输入SPI时钟输入PA5接收STM32的SPI时钟信号
SDIIN输入SPI数据输入(MOSI)PA7接收STM32发送的命令和数据
SDOIN输出SPI数据输出(MISO)PA6向STM32发送状态和位置信息

🔄 步进驱动器接口引脚

跳转到“🔄 步进驱动器接口引脚”
引脚名称类型功能描述连接对象备注
NSCSDRV_SDO输出驱动器SPI片选/串行数据输出TMC2xxx驱动器控制下级步进驱动器
SDODRV_SCLK输出驱动器串行数据输出/SPI时钟TMC2xxx驱动器SPI通信时钟
SCKDRV_NSDO输出驱动器SPI时钟/片选信号TMC2xxx驱动器复用功能引脚
SDIDRV_NSCLK输入/输出驱动器数据输入/时钟信号TMC2xxx驱动器双向通信
引脚名称类型功能描述连接对象备注
STPOUT_PWMA输出步进脉冲输出/PWM A相步进驱动器STEP可配置为STEP或PWM输出
DIRPOUT_PWMB输出方向信号输出/PWM B相步进驱动器DIR可配置为DIR或PWM输出
引脚名称类型功能描述连接对象电气特性
A_SCLK输入编码器A相信号/串行时钟增量编码器A+差分输入支持
ANEG_NSCLK输入编码器A相反相/串行时钟反相增量编码器A-差分输入支持
B_SDI输入编码器B相信号/串行数据输入增量编码器B+差分输入支持
BNEG_NSDI输入编码器B相反相/串行数据反相增量编码器B-差分输入支持
N输入编码器Z相(索引)信号增量编码器Z+索引脉冲
NNEG输入编码器Z相反相信号增量编码器Z-差分输入
引脚名称类型功能描述连接建议电气特性
HOME输入原点开关输入机械或光电开关内部上拉,低电平触发
STOPL输入左限位开关左侧限位开关内部上拉,低电平触发
STOPR输入右限位开关右侧限位开关内部上拉,低电平触发
STPIN输入外部步进脉冲输入外部脉冲发生器外部控制模式
DIRIN输入外部方向信号输入外部方向控制外部控制模式
NFREEZE输入紧急停止信号(低电平有效)急停开关立即冻结所有运动
引脚名称类型功能描述连接建议用途
INTR输出中断输出信号STM32中断输入(PA2)状态变化通知
TARGET_REACHED输出目标到达指示LED指示灯或逻辑输入运动完成指示
START输入/输出启动信号(双向)启动按钮或外部控制可配置为输入或输出
引脚名称类型电压功能描述连接要求
VCC电源3.3V主电源输入稳定3.3V供电,100nF去耦电容
VDD1V8(2x)电源1.8V内部1.8V电源外接100nF电容到地
GND电源0V接地良好接地设计
CLK_EXT输入3.3V外部时钟输入可选外部时钟源
STDBY_CLK输出3.3V待机时钟输出低功耗模式时钟
引脚名称类型功能描述连接建议备注
NRST输入复位输入(低电平有效)STM32控制(PA3)外部复位控制
TEST_MODE输入测试模式选择接地(正常工作)生产测试用
MP1输入/输出多功能引脚1根据配置使用可配置多种功能
MP2输入/输出多功能引脚2根据配置使用可配置多种功能

🔌 与您STM32F103RET6的连接映射

跳转到“🔌 与您STM32F103RET6的连接映射”

根据您的硬件配置,主要连接关系:

TMC4361A引脚STM32F103RET6引脚功能
NSCSINPA4SPI片选
SCKINPA5SPI时钟
SDIINPA7SPI MOSI
SDOINPA6SPI MISO
NRSTPA3复位控制
INTRPA2中断输入
// SPI通信引脚 - 必须连接
NSCSIN -> STM32 PA4 (SPI_CS)
SCKIN -> STM32 PA5 (SPI_SCK)
SDIIN -> STM32 PA7 (SPI_MOSI)
SDOIN -> STM32 PA6 (SPI_MISO)
// 控制引脚 - 推荐连接
NRST -> STM32 PA3 (GPIO_OUTPUT)
INTR -> STM32 PA2 (GPIO_INPUT)
// 步进输出 - 连接到步进驱动器
STPOUT_PWMA -> 步进驱动器 STEP输入
DIRPOUT_PWMB -> 步进驱动器 DIR输入

高级配置模式(带编码器)

跳转到“高级配置模式(带编码器)”
// 编码器连接 - 闭环控制
A_SCLK -> 编码器 A+
ANEG_NSCLK -> 编码器 A-
B_SDI -> 编码器 B+
BNEG_NSDI -> 编码器 B-
N -> 编码器 Z+
NNEG -> 编码器 Z-
// 安全开关连接
HOME -> 原点开关
STOPL -> 左限位开关
STOPR -> 右限位开关
NFREEZE -> 急停开关




graph TB
subgraph "STM32F103RET6 正确引脚配置"
PA4[PA4 - SPI1_CS<br/>已配置]
PA5[PA5 - SPI1_SCK<br/>已配置]
PA6[PA6 - SPI1_MISO<br/>已配置]
PA7[PA7 - SPI1_MOSI<br/>已配置]
PA8[PA8 - RCC_MCO<br/>时钟输出]
PA2[PA2 - USART2_TX<br/>已配置]
PA3[PA3 - USART2_RX<br/>已配置]
PB3[PB3 - GPIO_Output<br/>TMC_START]
PB4[PB4 - GPIO_EXTI4<br/>TMC_DONE]
PB5[PB5 - GPIO_EXTI5<br/>TMC_INTR]
PB6[PB6 - I2C1_SCL<br/>EEPROM时钟]
PB7[PB7 - I2C1_SDA<br/>EEPROM数据]
end
subgraph "TMC4361A连接"
TMC_SPI[SPI通信接口]
TMC_CLK[时钟输入CLK]
TMC_START_SIG[START启动信号]
TMC_DONE_SIG[DONE完成信号]
TMC_INTR_SIG[INTR中断信号]
end
PA4 --> TMC_SPI
PA5 --> TMC_SPI
PA6 --> TMC_SPI
PA7 --> TMC_SPI
PA8 --> TMC_CLK
PB3 --> TMC_START_SIG
PB4 --> TMC_DONE_SIG
PB5 --> TMC_INTR_SIG

TMC4361A 实际使用引脚功能分析

跳转到“TMC4361A 实际使用引脚功能分析”

🔌 SPI通信接口组 (与STM32F103RET6通信)

跳转到“🔌 SPI通信接口组 (与STM32F103RET6通信)”
引脚名称功能类型详细功能描述在您系统中的作用
NSCSINSPI片选输入SPI通信的片选信号(低电平有效)连接STM32 PA4,控制SPI通信开始/结束
SCKINSPI时钟输入接收主机SPI时钟信号连接STM32 PA5,接收SPI时钟
SDIINSPI数据输入接收主机发送的数据(MOSI)连接STM32 PA7,接收命令和配置数据
SDOINSPI数据输出向主机发送数据(MISO)连接STM32 PA6,发送状态和位置信息
引脚名称电压等级功能描述数量连接要求
VCC3.3V主电源输入多个稳定3.3V供电,需加100nF去耦电容
GND0V接地引脚多个良好的接地连接,减少噪声
VDD1V81.8V内部1.8V电源2个外接100nF电容到地,内部稳压器输出
引脚名称信号类型功能描述连接建议
NRST复位输入硬件复位信号(低电平有效)连接STM32 PA3,可软件控制复位
CLK_EXT时钟输入外部时钟源输入可连接外部晶振或由STM32提供时钟
TEST_MODE测试控制芯片测试模式选择通常接地(正常工作模式)
START启动信号运动启动信号(可配置为输入或输出)可连接启动按钮或外部控制信号
graph TD
subgraph "DONE信号时序图"
A[运动开始<br/>DONE = 0V]
B[运动进行中<br/>DONE = 0V]
C[运动完成瞬间<br/>上升沿触发]
D[运动完成<br/>DONE = 3.3V]
end
A --> B
B --> C
C --> D
C --> E[触发EXTI4中断<br/>CPU执行中断处理]
E --> F[处理运动完成逻辑<br/>清除中断标志]
引脚名称输出类型功能描述实际应用
INTR中断输出状态变化中断信号连接STM32 PA2,通知运动完成/错误等状态
TARGET_REACHED状态输出目标位置到达指示可连接LED指示灯或外部逻辑电路
graph TB
subgraph "TMC4361A中断事件分类"
A[运动控制事件]
B[错误检测事件]
C[状态变化事件]
D[通信事件]
end
A --> A1[位置到达]
A --> A2[速度到达]
A --> A3[加速完成]
A --> A4[减速开始]
B --> B1[限位开关触发]
B --> B2[编码器错误]
B --> B3[电机堵转]
B --> B4[过流保护]
C --> C1[运动方向改变]
C --> C2[待机模式切换]
C --> C3[参考点找到]
D --> D1[SPI通信错误]
D --> D2[寄存器访问错误]
A1 --> E[INTR信号高电平]
A2 --> E
B1 --> E
B2 --> E
C1 --> E
D1 --> E
引脚名称输出功能详细描述连接对象
STPOUT_PWMA步进脉冲/PWM A步进电机脉冲输出或PWM A相信号连接步进驱动器的STEP输入
DIROUT_PWMB方向信号/PWM B步进电机方向或PWM B相信号连接步进驱动器的DIR输入

STM32F103R3T6的8个GPIO输入的作用:

graph TB
subgraph "8路光耦隔离输入 (第6页)"
A[外部24V信号输入]
B[TLP291-4光耦隔离]
C[STM32 GPIO输入]
D[LED状态指示]
end
subgraph "输入信号类型"
E1[限位开关信号]
E2[急停按钮信号]
E3[传感器检测信号]
E4[外部控制信号]
E5[安全门开关]
E6[启动/停止按钮]
E7[故障报警信号]
E8[外部设备状态]
end
A --> B
B --> C
B --> D
E1 --> A
E2 --> A
E3 --> A
E4 --> A
E5 --> A
E6 --> A
E7 --> A
E8 --> A

STM32F103R3T6的8个GPIO输出的作用:

graph TB
subgraph "8路继电器输出 (第7页)"
A[STM32 GPIO输出]
B[SS8550三极管驱动]
C[继电器RELAY1-4]
D[高压/大电流负载]
end
subgraph "输出控制对象"
E1[电磁阀控制]
E2[指示灯/报警灯]
E3[风扇/冷却系统]
E4[加热器控制]
E5[外部设备启停]
E6[气缸控制]
E7[联锁输出]
E8[状态指示]
end
A --> B
B --> C
C --> D
D --> E1
D --> E2
D --> E3
D --> E4
D --> E5
D --> E6
D --> E7
D --> E8

引脚名称信号类型功能描述说明
ANEG_NSCLK编码器A相反相差分编码器A相负信号或串行时钟反相支持差分编码器输入,提高抗干扰能力
// 您的系统实现了TMC4361A的核心功能:
✅ SPI通信控制 (NSCSIN, SCKIN, SDIIN, SDOIN)
✅ 步进电机控制 (STPOUT_PWMA, DIROUT_PWMB)
✅ 状态监控 (INTR, TARGET_REACHED)
✅ 硬件控制 (NRST, START)
✅ 编码器支持 (ANEG_NSCLK - 部分)
✅ 外部时钟 (CLK_EXT)

时钟路径: STM32 SYSCLK (72MHz) → MCO输出 (PA8) → TMC4361A CLK输入 同步优势: ✅ 避免时钟域交叉问题 ✅ 减少SPI通信错误 ✅ 提高数据传输可靠性

// MCO与SPI通信的关系
MCO频率 = 72MHz (SYSCLK)
SPI频率 = 2.25MHz (SYSCLK/32)
时钟比例 = MCO : SPI = 72MHz : 2.25MHz = 32:1
  • 完整的SPI接口实现
  • 支持双向数据传输
  • 中断状态通知
  • 步进脉冲输出 (STEP/DIR模式)
  • 可切换PWM输出模式
  • 目标到达检测
  • 硬件复位控制
  • 外部时钟输入支持
  • 启动信号控制
  • 部分编码器支持 (仅A相反相)
  • 状态中断通知
  • 目标到达指示

根据您的引脚配置,这个设计适合:

终端窗口
✅ 开环步进电机控制
✅ 精确位置控制
✅ 速度控制应用
✅ 多轴同步控制
✅ 自动化设备控制
终端窗口
❌ 完整闭环控制 (缺少编码器B相、Z相)
❌ 差分编码器支持 (仅有A相反相)
❌ 限位开关保护 (未使用STOPL/STOPR)
❌ 原点开关功能 (未使用HOME)
❌ 紧急停止 (未使用NFREEZE)
  1. 增加安全功能:考虑连接限位开关(STOPL/STOPR)
  2. 完善编码器接口:如需闭环控制,添加B相和Z相信号
  3. 增加保护功能:连接NFREEZE实现紧急停止
  4. 原点功能:连接HOME开关实现自动回零

这个引脚配置实现了TMC4361A的核心运动控制功能,适合大多数开环步进电机控制应用。







TMC4361A是一个高度集成的运动控制器,从方框图可以看出它具有以下主要功能模块:

SPI to μC (SPI转微控制器)

跳转到“SPI to μC (SPI转微控制器)”
  • 功能: 与您的STM32F103RET6进行主要通信
  • 用途: 接收运动命令、配置参数、读取状态
  • 连接: 通过SPI接口(SCK/MISO/MOSI/CS)连接到STM32
  • 功能: 作为SPI主设备控制外部步进驱动器
  • 用途: 直接控制支持SPI的步进驱动器(如TMC2xxx系列)
  • 优势: 可以实现更精确的电流控制和微步控制

S-Ramp Generator (S型斜坡生成器)

跳转到“S-Ramp Generator (S型斜坡生成器)”
终端窗口
功能特点:
- 生成平滑的S型加减速曲线
- 避免急转弯带来的震动和噪音
- 支持多种运动模式:
* 位置模式 (Point-to-Point)
* 速度模式 (Continuous)
* 外部控制模式
  • 功能: 为运动控制提供精确的时基
  • 作用: 确保步进脉冲的精确时序
  • 重要性: 决定运动的平滑性和精度

Step Sequencer (步进序列发生器)

跳转到“Step Sequencer (步进序列发生器)”
  • 功能: 生成步进脉冲序列
  • 输出: STEP/DIR信号到步进驱动器
  • 特点: 支持微步细分和复杂的步进模式

Current Regulation (电流调节)

跳转到“Current Regulation (电流调节)”
  • 功能: 智能电流管理
  • 作用: 根据负载和速度动态调整电流
  • 好处: 降低功耗,减少发热

Driver Interface: SPI (驱动器SPI接口)

跳转到“Driver Interface: SPI (驱动器SPI接口)”
  • 功能: 直接控制智能步进驱动器
  • 支持: TMC2xxx系列驱动器
  • 优势: 实现无传感器负载检测、静音控制等

Encoder Interface (编码器接口)

跳转到“Encoder Interface (编码器接口)”
终端窗口
支持编码器类型:
- ABN增量编码器 (A/B/Z信号)
- SSI绝对编码器 (串行同步接口)
- SPI编码器
功能:
- 位置反馈
- 速度测量
- 失步检测
  • 功能: 基于编码器反馈的位置闭环
  • 算法: PID控制算法
  • 作用: 自动补偿失步,提高精度

Reference Switch Processing (参考开关处理)

跳转到“Reference Switch Processing (参考开关处理)”
终端窗口
支持开关类型:
- 限位开关 (LEFT/RIGHT)
- 原点开关 (HOME)
- 启动开关 (START)
功能:
- 自动回零
- 限位保护
- 安全停机

Safe Ramp Down (安全斜坡下降)

跳转到“Safe Ramp Down (安全斜坡下降)”
  • 功能: 紧急情况下的安全停机
  • 特点: 按照设定的减速曲线安全停止
  • 触发: 限位开关、急停信号等

Status Flag Interrupt Controller (状态中断控制器)

跳转到“Status Flag Interrupt Controller (状态中断控制器)”
  • 功能: 实时状态监控和中断生成
  • 用途: 向STM32报告运动完成、错误等状态
  • 功能: 系统初始化和复位管理
  • 作用: 确保系统可靠启动

TMC4361A-LA 实际应用用法

跳转到“TMC4361A-LA 实际应用用法”
// 配置位置模式
TMC4361A_SPI_WriteRegister(TMC4361A_RAMPMODE, 0); // 位置模式
TMC4361A_SPI_WriteRegister(TMC4361A_VMAX, 50000); // 最大速度
TMC4361A_SPI_WriteRegister(TMC4361A_AMAX, 10000); // 加速度
TMC4361A_SPI_WriteRegister(TMC4361A_XTARGET, 10000); // 目标位置
// 配置速度模式
TMC4361A_SPI_WriteRegister(TMC4361A_RAMPMODE, 1); // 速度模式
TMC4361A_SPI_WriteRegister(TMC4361A_VMAX, 30000); // 目标速度
// 启用编码器反馈
TMC4361A_SPI_WriteRegister(TMC4361A_ENC_IN_CONF, 0x1000); // 启用ABN编码器
TMC4361A_SPI_WriteRegister(TMC4361A_GCONF, 0x0040); // 启用闭环模式
  • TMC4361A: 运动控制器,负责轨迹规划和运动控制
  • TMC2xxx: 步进驱动器,负责电机电流控制
  • 关系: TMC4361A控制TMC2xxx,形成完整的运动控制系统
  1. 高精度: S型斜坡确保平滑运动
  2. 智能化: 自动负载检测和电流调节
  3. 集成度高: 单芯片实现复杂运动控制
  4. 实时性: 硬件实现,响应迅速
  5. 可靠性: 多重安全保护机制

基于您的STM32F103RET6+TMC4361A硬件配置,可以实现:

  1. 高精度CNC控制
  2. 自动化生产线定位
  3. 机器人关节控制
  4. 精密测量设备
  5. 高速包装机械

通过我提供的测试套件,您可以:

  • 验证各个功能模块是否正常工作
  • 测试运动控制的精度和平滑性
  • 验证安全保护功能
  • 调试闭环控制参数





TMC4361A系统概览框图详解

跳转到“TMC4361A系统概览框图详解”

1. 主机接口 (Host CPU SPI Interface)

跳转到“1. 主机接口 (Host CPU SPI Interface)”
终端窗口
连接引脚:
- NSCSIN: 片选信号 (对应您的PA4)
- SCKIN: SPI时钟 (对应您的PA5)
- SDIIN: 数据输入 (对应您的PA7)
- SDOOUT: 数据输出 (对应您的PA6)
功能:
- 接收STM32F103RET6的运动指令
- 上传状态和位置信息
- 参数配置和实时监控

2. 步进/方向输入接口 (Step/Dir Input)

跳转到“2. 步进/方向输入接口 (Step/Dir Input)”
终端窗口
输入引脚:
- STP_IN: 外部步进脉冲输入
- DIR_IN: 外部方向控制输入
用途:
- 外部脉冲控制模式
- 电子齿轮功能
- 从属控制应用

3. 寄存器块 (Register Block)

跳转到“3. 寄存器块 (Register Block)”
主要功能模块:
- Target Register(s): 目标位置寄存器
- Motion Profile Shadowing: 运动轮廓缓存
- Parameter Transfer at Start: 启动参数传输
典型配置:
TMC4361A_SPI_WriteRegister(TMC4361A_XTARGET, 50000); // 设置目标位置
TMC4361A_SPI_WriteRegister(TMC4361A_VMAX, 100000); // 设置最大速度

4. 定时器单元 (Timer Unit)

跳转到“4. 定时器单元 (Timer Unit)”
终端窗口
核心功能:
- 提供系统时基
- 同步各模块操作
- 确保运动时序精度
- 支持外部时钟输入(CLK_EXT)

5. 斜坡生成器 (Ramp-Generator)

跳转到“5. 斜坡生成器 (Ramp-Generator)”
终端窗口
支持的运动模式:
✅ S-Ramps with 4 Bows: S型斜坡(4个弯曲点)
✅ Trapezoid Ramps: 梯形斜坡
✅ Rectangle Ramps: 矩形斜坡
✅ Circles: 圆弧运动
关键特性:
- PID闭环控制集成
- 实时轨迹修改
- 多段运动规划

实际配置示例:

// S型斜坡配置
TMC4361A_SPI_WriteRegister(TMC4361A_RAMPMODE, 0); // 位置模式
TMC4361A_SPI_WriteRegister(TMC4361A_BOW1, 1000); // 第一弯曲点
TMC4361A_SPI_WriteRegister(TMC4361A_BOW2, 1000); // 第二弯曲点
TMC4361A_SPI_WriteRegister(TMC4361A_BOW3, 1000); // 第三弯曲点
TMC4361A_SPI_WriteRegister(TMC4361A_BOW4, 1000); // 第四弯曲点

6. 参考开关处理 (Reference Switch Processing)

跳转到“6. 参考开关处理 (Reference Switch Processing)”
终端窗口
支持的开关类型:
- START: 启动开关
- NFREEZE: 冻结信号
- STOPL: 左限位开关
- HOME_REF: 原点开关
- STOPR: 右限位开关
安全功能:
- 立即冻结操作: NFREEZE信号
- 硬件限位保护
- 自动回零功能

7. 状态标志和中断控制器

跳转到“7. 状态标志和中断控制器”
终端窗口
监控功能:
- 运动完成检测
- 错误状态报告
- 限位触发通知
- 目标到达指示
输出信号:
- TARGET_REACHED: 目标到达信号
- INTR: 中断请求信号

8. 编码器接口 (Encoder - differential)

跳转到“8. 编码器接口 (Encoder - differential)”
终端窗口
支持的编码器类型:
📍 ABN增量编码器:
- A, B相正交信号
- N索引信号
- 差分输入支持
📍 SSI/SPI绝对编码器:
- 串行数据传输
- 高分辨率位置反馈
- 多圈计数支持
连接方式:
SCLK, NSCS, ANEG -> ABN编码器信号
SDI, SDO, NSDI, BNEG -> 串行编码器接口

9. 解码器单元 (Decoder Unit)

跳转到“9. 解码器单元 (Decoder Unit)”
主要功能:
- 编码器信号解码
- 位置计算和滤波
- 速度估算
- 方向判断
配置示例:
// ABN编码器配置
TMC4361A_SPI_WriteRegister(TMC4361A_ENC_IN_CONF, 0x1000);
TMC4361A_SPI_WriteRegister(TMC4361A_ENC_CONST, 4096); // 编码器分辨率

10. 闭环单元 (Closedloop Unit)

跳转到“10. 闭环单元 (Closedloop Unit)”
终端窗口
PID控制器:
- P: 比例控制
- I: 积分控制
- D: 微分控制
功能特性:
- 位置误差补偿
- 速度环控制
- 自适应参数调整
- 失步检测和恢复

11. 脉冲生成器 (PulseGen)

跳转到“11. 脉冲生成器 (PulseGen)”
终端窗口
输出模式:
🎯 Step/Dir模式:
- STPOUT: 步进脉冲输出
- DIROUT: 方向信号输出
🎯 dcStep信号:
- DCSTEP_STALL: 失速检测
- DC_OUT: 直流控制输出
特殊功能:
- ChopSync支持: 与TMC驱动器同步
- STEP_READY: 步进就绪信号
终端窗口
输出类型:
🔊 PWM输出:
- PWMA (正弦波)
- PWMB (余弦波)
📈 DAC输出:
- DACA (正弦波)
- DACB (余弦波)
应用场景:
- 伺服电机控制
- 音圈电机驱动
- 模拟量输出控制

13. 内部正弦查找表 (Internal CoSine LUT)

跳转到“13. 内部正弦查找表 (Internal CoSine LUT)”
功能:
- 高精度正弦/余弦波形生成
- 微步细分优化
- 平滑电流波形
配置:
TMC4361A_SPI_WriteRegister(TMC4361A_MSLUT_0, sine_table[0]);
TMC4361A_SPI_WriteRegister(TMC4361A_MSLUT_1, sine_table[1]);
// ... 配置完整的正弦查找表
终端窗口
节能功能:
- 自动时钟门控
- 唤醒机制
- 低功耗模式
寄存器:
- CLK_GATING_DELAY: 门控延时
- STDBY_CLK_FRQ: 待机时钟频率
终端窗口
测试功能:
- 芯片内部测试
- 生产测试支持
- 故障诊断
控制:
- TEST_MODE引脚控制
- 内部扫描链测试
// 1. 硬件复位
TMC4361A_Hardware_Reset();
// 2. 基础配置
TMC4361A_SPI_WriteRegister(TMC4361A_GCONF, 0x0000);
TMC4361A_SPI_WriteRegister(TMC4361A_REFERENCE_CONF, 0x0000);
// 3. S型斜坡参数
TMC4361A_SPI_WriteRegister(TMC4361A_RAMPMODE, 0); // 位置模式
TMC4361A_SPI_WriteRegister(TMC4361A_VMAX, 100000); // 最大速度
TMC4361A_SPI_WriteRegister(TMC4361A_AMAX, 50000); // 最大加速度
TMC4361A_SPI_WriteRegister(TMC4361A_DMAX, 50000); // 最大减速度

阶段3: 编码器配置(如果使用)

跳转到“阶段3: 编码器配置(如果使用)”
// 4. ABN编码器设置
TMC4361A_SPI_WriteRegister(TMC4361A_ENC_IN_CONF, 0x1000);
TMC4361A_SPI_WriteRegister(TMC4361A_ENC_CONST, 4096);
// 5. PID参数设置
TMC4361A_SPI_WriteRegister(TMC4361A_PID_P_WD, 500); // P参数
TMC4361A_SPI_WriteRegister(TMC4361A_PID_I_WD, 100); // I参数
TMC4361A_SPI_WriteRegister(TMC4361A_PID_D_WD, 50); // D参数
// 6. 启动运动
TMC4361A_SPI_WriteRegister(TMC4361A_XTARGET, 50000); // 目标位置
  • 利用S型斜坡确保平滑运动
  • 编码器闭环提供高精度
  • 多轴同步控制
  • 快速启停能力
  • 实时轨迹修改
  • 安全限位保护
  • 微步细分控制
  • 低振动运行
  • 重复定位精度

TMC4361A TARGET_REACHED 使用说明

跳转到“TMC4361A TARGET_REACHED 使用说明”

TARGET_REACHED 在 TMC4361A 中有多种使用方式,是运动控制中非常重要的状态指示和触发信号。


1. 作为状态标志(STATUS_FLAGS)

跳转到“1. 作为状态标志(STATUS_FLAGS)”
  • 寄存器: STATUS (0x0F)
  • 位: Bit 0 - TARGET_REACHED_F
  • 含义: 当 XACTUAL == XTARGET 时,该标志被置位
// 方法1: 读取状态标志
uint32_t flags;
TMC4361A_GetStatusFlags(&flags);
if (flags & TMC4361A_STATUS_TARGET_REACHED) {
// 目标已到达
}
// 方法2: 使用专用函数
bool reached;
TMC4361A_IsTargetReached(&reached);
if (reached) {
// 目标已到达
}
// 方法3: 读取完整状态
TMC4361A_MotorStatus_t status;
TMC4361A_GetStatus(&status);
if (status.target_reached) {
// 目标已到达
}

  • 寄存器: EVENTS (0x0E)
  • 位: Bit 0 - TARGET_REACHED
  • 特点:
    • 事件在状态从非活跃变为活跃时触发
    • 读取 EVENTS 寄存器后会自动清除(除非配置了保护)
    • 可以配置为触发中断
// 轮询事件
uint32_t events;
TMC4361A_PollEvents(&events);
if (events & (1 << 0)) { // TARGET_REACHED 事件
// 处理目标到达事件
}
// 配置事件清除保护(防止重要事件被自动清除)
TMC4361A_SetEventClearConfig(1 << 0); // 保护 TARGET_REACHED 事件
// 配置为中断源
uint32_t intr_config = (1 << 0); // TARGET_REACHED 触发中断
TMC4361A_SetInterruptConfig(intr_config);
// 手动清除事件(对于受保护的事件)
TMC4361A_ClearInterruptFlags(1 << 0);

3. 作为输出引脚(TARGET_REACHED Pin)

跳转到“3. 作为输出引脚(TARGET_REACHED Pin)”
  • 默认行为: 转发 TARGET_REACHED_Flag
  • 默认极性: 高有效(High Active)
  • 激活条件: 当 XACTUAL == XTARGET 时引脚变为有效
// 配置为低有效(Low Active)
// 通过 GENERAL_CONF 寄存器 bit 16: invert_pol_target_reached
uint32_t general_conf;
TMC4361A_ReadRegister(TMC4361A_GENERAL_CONF, &general_conf);
general_conf |= (1 << 16); // 设置 bit 16
TMC4361A_WriteRegister(TMC4361A_GENERAL_CONF, general_conf);

3.3 多引脚连接配置(Wired-OR / Wired-AND)

跳转到“3.3 多引脚连接配置(Wired-OR / Wired-AND)”

当多个 TMC4361A 芯片的 TARGET_REACHED 引脚需要连接到同一信号线时:

// Step 1: 使能上拉/下拉功能
uint32_t general_conf;
TMC4361A_ReadRegister(TMC4361A_GENERAL_CONF, &general_conf);
general_conf |= (1 << 29); // intr_tr_pu_pd_en = 1
// Step 2: 配置为 Wired-OR
general_conf &= ~(1 << 31); // tr_as_wired_and = 0
TMC4361A_WriteRegister(TMC4361A_GENERAL_CONF, general_conf);

行为: 只要有一个引脚激活,整条线就激活

// Step 1: 使能上拉/下拉功能
uint32_t general_conf;
TMC4361A_ReadRegister(TMC4361A_GENERAL_CONF, &general_conf);
general_conf |= (1 << 29); // intr_tr_pu_pd_en = 1
// Step 2: 配置为 Wired-AND
general_conf |= (1 << 31); // tr_as_wired_and = 1
TMC4361A_WriteRegister(TMC4361A_GENERAL_CONF, general_conf);

行为: 只有当所有引脚都激活时,整条线才激活

TARGET_REACHED 引脚可以配置为转发其他标志,通过 REFERENCE_CONF 寄存器 (0x01) 的 pos_comp_output 位 (bit 24:23):

// 配置选项:
// b'00: TARGET_REACHED_Flag (默认)
// b'01: VELOCITY_REACHED_Flag
// b'10: ENC_FAIL_Flag
// b'11: POS_COMP_REACHED_Flag
// 示例:配置为转发速度到达标志
uint32_t ref_conf;
TMC4361A_ReadRegister(TMC4361A_REFERENCE_CONF, &ref_conf);
ref_conf &= ~(3 << 23); // 清除 bit 24:23
ref_conf |= (1 << 23); // 设置为 b'01
TMC4361A_WriteRegister(TMC4361A_REFERENCE_CONF, ref_conf);

注意: 只能选择一个选项,不能同时选择多个。


4. 作为启动触发信号(START Trigger)

跳转到“4. 作为启动触发信号(START Trigger)”

TARGET_REACHED 事件可以作为斜坡启动的触发信号,用于实现连续运动控制。

通过 START_CONF 寄存器 (0x02) 的 trigger_events 位 (bit 8:5):

// 配置 TARGET_REACHED 作为启动触发
// trigger_events bit 8:5 = b'xx1x (bit 6 = 1)
uint32_t start_conf;
TMC4361A_ReadRegister(TMC4361A_START_CONF, &start_conf);
start_conf |= (1 << 6); // 设置 bit 6,使能 TARGET_REACHED 触发
TMC4361A_WriteRegister(TMC4361A_START_CONF, start_conf);

场景1: 连续定位运动

// 1. 设置第一个目标位置
TMC4361A_SetTargetPosition(1000);
// 2. 配置 TARGET_REACHED 触发下一个运动
// 当到达第一个目标后,自动启动到第二个目标
TMC4361A_SetTargetPosition(2000); // 在 TARGET_REACHED 后执行

场景2: 同步多个运动

// 配置 START_DELAY,在 TARGET_REACHED 后延时启动
// 这样可以实现精确的时序控制

5. 在闭环控制中的特殊处理

跳转到“5. 在闭环控制中的特殊处理”

在闭环控制模式下,TARGET_REACHED 的触发需要同时满足两个条件:

  1. 位置条件: XACTUAL == XTARGET
  2. 编码器偏差条件: |ENC_POS_DEV| ≤ CL_TR_TOLERANCE

其中:

  • ENC_POS_DEV = ENC_POS - XACTUAL - CL_OFFSET (闭环模式)
  • CL_TR_TOLERANCE 寄存器 (0x52) 定义允许的最大位置偏差
// 设置闭环目标到达容差
// CL_TR_TOLERANCE 寄存器地址为 0x52(写入)
uint32_t tolerance = 100; // 允许100个微步的偏差
TMC4361A_WriteRegister(0x52, tolerance);
// 读取编码器位置偏差
int32_t enc_pos_dev;
TMC4361A_ReadRegister(0x52, (uint32_t*)&enc_pos_dev); // 读取 ENC_POS_DEV

适用于需要高精度定位的应用,确保实际位置和编码器位置都在允许范围内。


示例1: 基本位置到达检测

跳转到“示例1: 基本位置到达检测”
// 设置目标位置
TMC4361A_SetTargetPosition(10000);
// 轮询检测
while (1) {
bool reached;
TMC4361A_IsTargetReached(&reached);
if (reached) {
printf("目标已到达!\n");
break;
}
HAL_Delay(10);
}
// 配置事件回调
void target_reached_callback(uint32_t events) {
if (events & (1 << 0)) { // TARGET_REACHED
printf("目标到达事件触发!\n");
}
}
TMC4361A_RegisterEventCallback(target_reached_callback);
// 配置为中断源
TMC4361A_SetInterruptConfig(1 << 0);
// 在主循环中处理事件
while (1) {
TMC4361A_ProcessEvents();
HAL_Delay(10);
}
// 配置 TARGET_REACHED 作为启动触发
uint32_t start_conf;
TMC4361A_ReadRegister(TMC4361A_START_CONF, &start_conf);
start_conf |= (1 << 6); // 使能 TARGET_REACHED 触发
TMC4361A_WriteRegister(TMC4361A_START_CONF, start_conf);
// 设置第一个目标
TMC4361A_SetTargetPosition(1000);
// 等待到达后,设置下一个目标(会自动启动)
HAL_Delay(100);
TMC4361A_SetTargetPosition(2000);
// 配置 TARGET_REACHED 引脚为低有效
uint32_t general_conf;
TMC4361A_ReadRegister(TMC4361A_GENERAL_CONF, &general_conf);
general_conf |= (1 << 16); // invert_pol_target_reached = 1
TMC4361A_WriteRegister(TMC4361A_GENERAL_CONF, general_conf);
// 配置引脚转发速度到达标志
uint32_t ref_conf;
TMC4361A_ReadRegister(TMC4361A_REFERENCE_CONF, &ref_conf);
ref_conf &= ~(3 << 23);
ref_conf |= (1 << 23); // pos_comp_output = b'01
TMC4361A_WriteRegister(TMC4361A_REFERENCE_CONF, ref_conf);

寄存器地址相关位功能
STATUS0x0FBit 0状态标志:TARGET_REACHED_F
EVENTS0x0EBit 0事件:TARGET_REACHED
GENERAL_CONF0x00Bit 16引脚极性:invert_pol_target_reached
GENERAL_CONF0x00Bit 29上拉/下拉使能:intr_tr_pu_pd_en
GENERAL_CONF0x00Bit 31Wired-AND配置:tr_as_wired_and
REFERENCE_CONF0x01Bit 24:23引脚功能选择:pos_comp_output
START_CONF0x02Bit 6启动触发:trigger_events[2]
INTR_CONF0x0DBit 0中断配置:TARGET_REACHED中断
EVENT_CLEAR_CONF0x0CBit 0事件清除保护
CL_TR_TOLERANCE0x52全部闭环目标到达容差

  1. 事件自动清除: 读取 EVENTS 寄存器会自动清除事件,除非在 EVENT_CLEAR_CONF 中配置了保护

  2. 闭环控制: 在闭环模式下,TARGET_REACHED 需要同时满足位置和编码器偏差条件

  3. 引脚功能切换: TARGET_REACHED 引脚只能转发一个标志,不能同时转发多个

  4. 多引脚连接: 使用 Wired-OR/Wired-AND 时,必须先使能 intr_tr_pu_pd_en

  5. 时序考虑: 使用 TARGET_REACHED 作为启动触发时,注意 START_DELAY 的配置

  6. 中断处理: 如果使用中断方式,需要配置 INTR_CONF 并连接硬件中断线


  1. 位置到达检测: 检测电机是否到达目标位置
  2. 连续运动控制: 实现多段连续运动
  3. 外部同步: 通过引脚输出同步外部设备
  4. 中断驱动: 使用中断方式提高响应速度
  5. 多轴协调: 通过 Wired-AND 实现多轴同时到达检测

建议在代码中添加以下辅助函数:

// 配置 TARGET_REACHED 引脚极性
TMC4361A_Status_t TMC4361A_SetTargetReachedPolarity(bool low_active);
// 配置 TARGET_REACHED 引脚功能
TMC4361A_Status_t TMC4361A_SetTargetReachedPinFunction(uint8_t function);
// 配置 TARGET_REACHED 作为启动触发
TMC4361A_Status_t TMC4361A_EnableTargetReachedTrigger(bool enable);

这些函数可以简化配置过程,提高代码可读性。


IDE、Example、Script, etc


来源:CSDN 原文,首次发布于 2025-06-27。