跳转到内容
新建笔记

TMC4361A:START 同步与影子斜坡寄存器

本文讨论 TMC4361A 的启动同步与影子斜坡参数,依据 ADI 发布的 TMC4361A 数据手册 V1.26,2020-08-03第 9 章、19.3 节和 19.22 节核对。芯片修订和手册版本必须对应,不能把 TMC4361、TMC4361A 或其他控制器的位定义混用。

这里整理寄存器关系和配置过程,没有提供已经在具体电机、驱动器和机械机构上验证的运动参数。

一条启动链路中有三个不同概念

跳转到“一条启动链路中有三个不同概念”
  1. 触发来源:外部 START 引脚,或 TARGET_REACHED、VELOCITY_REACHED、POSCOMP_REACHED 等内部事件。
  2. 内部启动信号:触发来源经过所配置的延迟和处理后,形成实际用于同步的信号。
  3. 信号要执行的动作:使延后写入的目标或速度生效、转移影子参数,或者推动目标/参数流水线。

因此,选择触发源不等于启用影子寄存器,启用影子寄存器也不等于已经产生了一次触发。还要分清影子斜坡参数 SH_REGx 和目标/参数流水线 X_PIPEx。

原始截图涉及的寄存器整理如下:

寄存器地址含义
START_CONF0x02启动来源、使能、极性与流水线配置
START_OUT_ADD0x11START 输出有效时间的附加时钟数
START_DELAY0x13触发到内部启动信号之间的延迟时钟数
X_PIPE0…70x38…0x3F目标位置或其他已选择参数的流水线
SH_REG0…130x40…0x4D共 14 个可用影子寄存器,具体使用方式取决于选项

原图和手册概览表写到 SH_REG0…12,但 V1.26 的 19.22 节完整寄存器表还列出 SH_REG13=0x4D。单级完整参数选项用 13 个寄存器;双级选项用两组各 7 个,共 14 个。两种数量不能混为一谈。

历史资料截图:START引脚可作输入或输出,列出同步相关寄存器;影子寄存器概览范围未列出0x4D

以下位号均指 START_CONF 的实际位位置。start_en(4) 表示 start_en 字段中的第 4 位,此字段从 bit 0 开始,因此对应整个寄存器的 bit 4,不是把整个 start_en 字段写成数值 4。

位字段用途
0start_en(0)XTARGET 的改变等待内部启动信号
1start_en(1)VMAX 的改变等待内部启动信号
2start_en(2)RAMPMODE 的改变等待内部启动信号
3start_en(3)GEAR_RATIO 的改变等待内部启动信号
4start_en(4)启用影子参数转移
5trigger_events(0)启用外部 START 输入;为 0 时引脚按内部启动输出用途配置
6trigger_events(1)选择 TARGET_REACHED 触发
7trigger_events(2)选择 VELOCITY_REACHED 触发
8trigger_events(3)选择 POSCOMP_REACHED 触发
9pol_start_signal0 为低有效,1 为高有效
10immediate_start_in外部 START 是否绕过配置的延迟立即执行
11busy_state_enSTART 忙状态同步机制;需配合引脚方向和板级电气设计
15:12pipeline_en位序依次选择 XTARGET、POSCOMP、GEAR_RATIO、GENERAL_CONF 流水线
17:16shadow_option选择下文四种影子映射
18cyclic_shadow_regs将当前工作参数写回相应影子级
19保留写 0
23:20SHADOW_MISS_CNT两次影子转移之间跳过的内部启动信号数
31:24XPIPE_REWRITE_REG控制已选择流水线参数写回哪些 X_PIPEx

四个 trigger_events 位全为 0 时,不生成或继续处理启动信号。外部 START 输入还受输入滤波影响;不能仅根据 GPIO 波形就假定内部已产生有效启动。

截图中的 XPIPE_REWRITE_REG 示例也可转成文字:pipeline_en=0011 选择 XTARGET 和 POSCOMP,XPIPE_REWRITE_REG=01000010 选择写回位置,示例把二者分别写回 X_PIPE1 与 X_PIPE6。这是参数流水线功能,不是双级影子参数的索引。

历史START_CONF字段截图,主要内容已转录为上表;对应完整英文手册V1.26的19.3节

单级完整参数:shadow_option = 00

跳转到“单级完整参数:shadow_option = 00”

每次有效影子转移把一组参数加载到工作寄存器。该选项使用 13 项,不是原稿所写的 14 项。

影子寄存器地址工作寄存器地址
SH_REG00x40VMAX0x24
SH_REG10x41AMAX0x28
SH_REG20x42DMAX0x29
SH_REG30x43ASTART0x2A
SH_REG40x44DFINAL0x2B
SH_REG50x45VBREAK0x27
SH_REG60x46VSTART0x25
SH_REG70x47VSTOP0x26
SH_REG80x48BOW10x2D
SH_REG90x49BOW20x2E
SH_REG100x4ABOW30x2F
SH_REG110x4BBOW40x30
SH_REG120x4CRAMPMODE0x20

cyclic_shadow_regs=1 时,转移前的工作参数同时写回这组影子寄存器,可以在两组配置之间交换。

双级映射:shadow_option = 01、10、11

跳转到“双级映射:shadow_option = 01、10、11”

三种双级选项使用相同的两级组织形式,但第一组对应的工作参数不同:

第一影子级第二影子级01:S 形10:梯形含 VSTART11:梯形含 VSTOP
SH_REG0SH_REG7VMAXVMAXVMAX
SH_REG1SH_REG8AMAXAMAXAMAX
SH_REG2SH_REG9DMAXDMAXDMAX
SH_REG3SH_REG10BOW1ASTARTASTART
SH_REG4SH_REG11BOW2DFINALDFINAL
SH_REG5SH_REG12BOW3VBREAKVBREAK
SH_REG6SH_REG13BOW4VSTARTVSTOP

把工作组记为 WW,第一影子级记为 S1S_1,第二级记为 S2S_2。一次转移按转移前的值同时更新:

Wnew=S1,old,S1,new=S2,oldW_{new}=S_{1,old},\qquad S_{1,new}=S_{2,old}
  • 非循环时,S2,new=S2,oldS_{2,new}=S_{2,old},最后一级保留,直至软件通过 SPI 重写。
  • 循环时,S2,new=WoldS_{2,new}=W_{old},三组参数循环,而不是把工作组写回第一影子级。

没有列入当前映射的工作参数保持原值。例如 S 形双级选项不会顺带更新 RAMPMODE、ASTART 或 DFINAL。

配置顺序与原数值示例

跳转到“配置顺序与原数值示例”

原文希望依次使用较小的速度、加减速度和 BOW 参数。其数值整理如下,保留为原草案的寄存器数值示例:

参数当前工作组第一影子级第二影子级
VMAX1000005000025000
AMAX500030002000
DMAX50003000原稿未给出
BOW1…4 各项1000500原稿未给出
ASTART、DFINAL0不由 S 形双级映射更新不由该映射更新

这些数值没有给出完整的时钟、单位模式、定点格式、细分和机械参数,不能直接解释为 RPM、物理加速度或已经可用的减速方案。第二级也没有填全,不能把未给出的值默认为 0。

建议按下面顺序组织驱动逻辑:

阻止配置过程中发生影子转移
→ 确认时钟、单位模式、斜坡类型和运动模式
→ 写入完整工作参数
→ 按选定映射写入第一、第二影子级的全部必需字段
→ 等待 BOW 内部换算完成
→ 应用 START_CONF 的来源、极性、延迟、跳过次数和循环配置
→ 在受控条件下产生一次触发并验证转移结果

选择 S 形斜坡应修改 RAMPMODE(1:0)=10;定位或速度模式另受相应位控制。原稿把整个 RAMPMODE 写成 10,会同时固定其他模式位,不能作为所有场景的通用写法。

修改位字段要保留其他已确认的配置并保持保留位为 0。尤其 START_CONF(23:20) 的读回还涉及当前跳过计数,不能把任意实时读回值无条件当成原始配置再写回;驱动应清楚地区分配置镜像和运行状态。

时间等待:START_DELAY 控制触发到内部启动的时钟延迟。按手册定义:

tdelay=START_DELAYfCLKt_{delay}=\frac{START\_DELAY}{f_{CLK}}

START 作为输出时,有效时间为 (START_OUT_ADD+1)/fCLK(START\_OUT\_ADD+1)/f_{CLK}。immediate_start_in=1 会让外部 START 不按普通延迟路径等待。

跳过触发次数:SHADOW_MISS_CNT 是 4 位字段,可设置 0~15。值为 5 时,每次影子转移之间跳过 5 次内部启动,在第 6 次执行下一次转移;它不是 5 ms 延时,也不只是上电后跳过一次。

另外,写入影子 BOW 参数后还需要给内部换算留出时间。按 V1.26 的说明,在完成有关写入后,至少确保接下来 320/fCLK320/f_{CLK} 秒内不发生影子转移。例如 fCLK=16 MHzf_{CLK}=16\,\mathrm{MHz} 时:

32016×106=20 μs\frac{320}{16\times10^6}=20\,\mu\mathrm{s}

单纯在主机上“延时一下”并不一定阻止已启用的内部事件触发;必须控制触发或转移使能,保证等待窗口真实成立。

文档不一致与验证边界

跳转到“文档不一致与验证边界”

V1.26 的说明正文有几处与其寄存器定义不一致:第 79 页 VSTOP 选项步骤写成 10,但第 182 页字段表将其定义为 11;第 80 页一处前置条件写 start_en(1),而使能说明及字段表均指向 bit 4;第 71 页一个输出条件也与 START 输入/输出位表不一致。本页按字段表和对应映射整理,并把差异明确留下,涉及实际运动前应结合芯片版本、厂家确认和受控试验处理。

手册第 76 页还对单级完整参数选项中,S 形斜坡从速度模式切到定位模式提出 SH_REG10 与当前 BOW3 不相等的条件。不能把它误套到所有双级选项,因为不同选项下 SH_REG10 的含义不同。

验证时至少检查:无触发不提前转移;一次触发的寄存器映射正确;循环顺序符合三组状态推导;未映射字段保持;跳过次数和 BOW 等待有效。寄存器数值正确仍不足以证明真实机构运动安全、方向和限位正确。

原文:TMC4361A 启动配置。本页保留四种映射、循环、触发次数、BOW 等待、模式切换注意事项、原数值草案和两张资料图,转录主要图表并说明不完整字段;删除对话式结尾和伪装成可编译 C 的中文伪代码。