SeanLib系列函数库-TMC5160

发布时间:2026/9/6 21:51:36

SeanLib系列函数库-TMC5160
查看其它库函数说明请点击此处跳转到SeanLib主页1. 本篇内容本篇介绍TMC5160步进电机驱动芯片的操作函数库TMC5160用于驱动两相四线制步进电机支持脉冲、SPI方式控制。2. 使用说明要使用本库请将TMC5160.lib和TMC5160.h添加到工程中。本库依赖两个外部函数 Sean_Send、Sean_Recv请在SeanLib.c中实现。2.1 头文件介绍头文件中定义了TMC5160芯片的所有寄存器/******** 通用配置寄存器 *************************************************************/#defineTMC_GCONF_ADDR0x00//GCONF 全局配置标志#defineTMC_TEST_MODE(0x0000000117)//使能Test Mode使能引脚ENCN _ DCO上的模拟测试输出#defineTMC_DIRECT_MODE(0x0000000116)//使能direct_mode,电机线圈电流和极性通过串行接口直接编程#defineTMC_STOP_ENABLE(0x0000000115)//紧急停止: ENCA_DCIN在高电平时停止定序器#defineTMC_HYSTERESIS(0x0000000114)//步进step频率的比较磁滞是1/32设置0是1/16#defineTMC_DIAG1_MODE(0x0000000113)//SWP_DIAG1推挽输出(高电平有效),默认集电级开路输出#defineTMC_DIAG0_MODE(0x0000000112)//SWN_DIAG0推挽输出(高电平有效),默认集电级开路输出#defineTMC_DIAG1_STEPS_SKIPPED(0x0000000111)//使能DIAG1在dcStep模式下失步时翻转输出信号(LOST_STEPS增加)#defineTMC_DIAG1_ONSTATE(0x0000000110)//使能DIAG1输出斩波器导通阶段指示信号#defineTMC_DIAG1_INDEX(0x000000019)//使能DIAG1输出 索引位置信号#defineTMC_DIAG1_STALL_DIR(0x000000018)//SD_MODE1时输出电机堵转信号SD_MODE0时输出方向信号#defineTMC_DIAG0_STALL_STEP(0x000000017)//SD_MODE1时输出电机堵转有效信号SD_MODE0时输出步进STEP信号#defineTMC_DIAG0_OTPW(0x000000016)//使能DIAG0输出驱动器过热预警( otpw )指示信号,仅 SD_MODE1#defineTMC_DIAG0_ERROR(0x000000015)//使能DIAG0输出故障指示信号:过温、对地短路、电荷泵欠压#defineTMC_SHAFT(0x000000014)//电机反向#defineTMC_STEP_FILTER(0x000000013)//使用外部步进STEP输入源时候使能步进STEP输入滤波器#defineTMC_PWM_MODE(0x000000012)//使能stealthChop电压PWM模式#defineTMC_FASTSANDSTILL(0x000000011)//使用较短的步进信号的超时时长超过该时间输出静止标志#defineTMC_RECALIBRATE(0x000000010)//驱动器禁用期间的过零重新校准(通过ENN或TOFF设置)#defineTMC_GSTAT_ADDR0x01//全局状态标志寄存器地址#defineTMC_IS_RESET(reg)(((reg)0x00000001)0)//芯片已复位#defineTMC_IS_ERROR(reg)(((reg)0x00000002)0)//发生错误#defineTMC_IS_UNDERVOL(reg)(((reg)0x00000004)0)//欠压#defineTMC_IFCNT_ADDR0x02//接口传输计数器#defineTMC_SLAVE_CONF_ADDR0x03//设置UART接口的单元地址和SENDDELAY#defineTMC_IOIN_ADDR0x04//高8位芯片版本低8位所有可用输入引脚的状态#defineTMC_DRV_CONF_ADDR0x0A//MOSFET的驱动配置//bit 0 -4 BBMTIME 导通前的延时时间以时间为单位//bit 8 -11 BBMCLKS 导通前的延时时间以时钟周期数为单位//bit 16-17 OTSELECT 选择桥关断的过温级别冷却至120°C / OTPW后恢复//bit 18-19 DRVSTRENGTH 栅极驱动器电流的选择。根据外部MOSFETs的栅极电荷选择栅极驱动电流//bit 20-21 FILT_ISENSE 采样运放的滤波时间常数以减小另一线圈的振铃和耦合#defineTMC_GLOBAL_SCALER_ADDR0x0B//电机电流的全局缩放[8bits]/********** 速度相关的驱动特性控制寄存器 **********************************************/#defineTMC_CURRENT_ADDR0x10//驱动电流控制寄存器地址#defineTMC_DELAY_HOLD6#defineTMC_CURRENT(run,hold)((TMC_DELAY_HOLD16)|((run)8)|(hold))//计算方法(DELAY 16) | (I_RUN 8) | I_HOLD//I_HOLD:静止状态电机电流, I_RUN:运行电流, DELAY:降电流时钟周期//IHOLD 12 //0-32//IRUN 24 //0-32 建议大于16//HOLDDELAY 6 //进入保持状态的延时时间#defineTMC_TPOWER_DOWN_ADDR0x11//设置电机静止后到电机开始降电流的之间的延时时间#defineTMC_TPWMTHRS_ADDR0x13//stealthChop 电压PWM 模式的上限速度/********** 斜坡发生器运动寄存器 *****************************************************/#defineTMC_MODE_ADDR0x20//模式寄存器地址#defineTMC_MODE_POSITION0x00000000//位置模式(使用所有A、D和V参数)#defineTMC_MODE_ACCEL0x00000001//速度模式到正VMAX (使用AMAX加速度)#defineTMC_MODE_DCCEL0x00000002//速度模式至负VMAX (使用AMAX加速度)#defineTMC_MODE_HOLD0x00000003//保持模式(除非发生停止事件否则速度保持不变)#defineTMC_XACTUAL_ADDR0x21//实际电机位置,在位置模式下修改内容将启动一个运动[32bits]#defineTMC_VACTUAL_ADDR0x22//斜坡发生器产生的实际电机速度[24bits]#defineTMC_VSTART_ADDR0x23//电机起动速度寄存器地址[18bits]#defineTMC_A1_ADDR0x24//VSTART和V1之间的加速度[16bits]#defineTMC_V1_ADDR0x25//第一加速/减速阶段阈值速度[20bits]#defineTMC_NOT_A10x00000000//写0仅使用AMAX和DMAX#defineTMC_AMAX_ADDR0x26//V1和VMAX之间的加速度这是速度模式的加速度和减速值[16bits]#defineTMC_VMAX_ADDR0x27//运动斜坡目标速度寄存器地址[23bits]#defineTMC_DMAX_ADDR0x28//VMAX和V1之间的减速度[16bits]#defineTMC_D1_ADDR0x2A//V1和VSTOP之间的减速度[16bits]#defineTMC_VSTOP_ADDR0x2B//电机停止速度寄存器地址[18]#defineTMC_TZEROWAIT_ADDR0x2C//下一次移动或方向反转开始前下降到零速度后的等待时间。时间范围约为0至2秒[16bits]/********** 斜坡发生器驱动特性控制寄存器组 ******************************************/#defineTMC_SW_MODE_ADDR0x34//开关模式配置#defineTMC_SOFT_STOP0x00000800//使能软停默认硬停#defineTMC_POL_STOP_R0x00000008//反转右参考开关低电平有效默认高电平有效#defineTMC_POL_STOP_L0x00000004//反转左参考开关低电平有效默认高电平有效#defineTMC_STOP_R_EN0x00000002//使能右参考开关有效时电机停止恢复时电机启动#defineTMC_STOP_L_EN0x00000001//使能左参考开关有效时电机停止恢复时电机启动#defineTMC_RAMP_STAT_ADDR0x35//RAMP_STAT 斜坡和参考开关状态寄存器//#define TMC_IS_STOP(reg) (((reg) 0x0400) 0) //电机实际速度为0#defineTMC_XLATCH0x36//斜坡发生器锁存位置在可编程开关事件时锁存XACTUAL/********** 电机驱动寄存器 *********************************************************/#defineTMC_CHOPCONF_ADDR0x6C//斩波器配置寄存器#defineTMC_DIS_SHORT_TO_VS(0x000000131)//禁用对电源的短路保护#defineTMC_DIS_SHORT_TO_GND(0x000000130)//禁用对地的短路保护#defineTMC_DOUBLE_EDGE(0x000000129)//使能每个STEP脉冲边缘采样以降低步进STEP信号的频率要求#defineTMC_INT_POL256(0x000000128)//使能256微步插值实际微步分辨率( MRES )被插值至256微步#defineTMC_MRES(mres)(((mres)0x0000000F)24)//降低微步分辨率,0-8分别表示细分256、128、64...1#defineTMC_TPFD(tpfd)(((tpfd)0x0000000F)20)//降低电机的中程共振被动快速衰减时间设置控制电桥极性变化后插入的快速衰减阶段的持续时间#defineTMC_VHIGHCHM(0x000000119)//高速斩波模式#defineTMC_VHIGHFS(0x000000118)//高速全步选择#defineTMC_TBL(tbl)(((tbl)0x000000003)15)//消影时间选择#defineTMC_CHM(0x000000114)//斩波方式具有快速衰减时间的恒定关闭时间#defineTMC_DIS_FDCC(0x000000112)//禁用快速衰减模式仅chm为1时有效#defineTMC_HEND_OFFSET(v)(((v)0x0000000F)7)//chm1时为正弦波偏移量chm0时为磁滞低值#defineTMC_HSTRT(hstrt)(((hstrt)0x0000007)4)//chm0时有效磁滞起始值累加到HEND#defineTMC_TFD(tfd)((((tfd)0x00000008)7)|(((tfd)0x00000007)4))//chm1时有效快衰减时间设置#defineTMC_TOFF(toff)((toff)0x0000000F)//关断时间和驱动器使能#defineTMC_COOLCONF_ADDR0x6D//coolStep 智能电流控制寄存器和stallGuard 2配置#defineTMC_DCCTRL_ADDR0x6E//dcStep ( DC )自动换向配置寄存器#defineTMC_DRV_STAT_ADDR0x6F//stallGuard2值和驱动错误标志寄存器#defineTMC_IS_STOP(reg)(((reg)0x80000000)0)//停止指示#defineTMC_IS_AOC(reg)(((reg)0x40000000)0)//A相开路仅低速时有效#defineTMC_IS_BOC(reg)(((reg)0x20000000)0)//B相开路仅低速时有效#defineTMC_IS_BESC(reg)(((reg)0x10000000)0)//B相对地短路#defineTMC_IS_AESC(reg)(((reg)0x08000000)0)//A相对地短路#defineTMC_IS_OT(reg)(((reg)0x04000000)0)//过温预警#defineTMC_IS_LR(reg)(((reg)0x01000000)0)//堵转容易误报#defineTMC_IS_BPSC(reg)(((reg)0x00002000)0)//B相对电源短路#defineTMC_IS_APSC(reg)(((reg)0x00001000)0)//A相对电源短路#defineTMC_HAS_ERROR(reg)(((reg)0x1A003000)0)//除堵转之外的报警#defineTMC_PWMCONF_ADDR0x70//电压脉宽调制模式寄存器另外定义一个设备结构体以及两个外部函数的声明//定义一个TMC5160芯片的对象结构体typedefstruct{unsignedintCS_Pin;//CS信号的位带区地址void(*Write)(unsignedchar,unsignedint);//写寄存器函数指针unsignedint(*Read)(unsignedchar);//读寄存器函数指针}TMC5160_t;/* 外部函数声明根据需要在SeanLib.c中实现 *************************************///数据发送函数externvoidSean_Send(void*Dev,unsignedchar*Data,unsignedshortLen);//数据接收函数unsignedshortSean_Recv(void*Dev,unsignedchar*Data,unsignedshortMaxLen);2.2 创建芯片设备使用下面的函数创建芯片设备指针/******************************************************************************* * 功 能: 创建一个TMC5160芯片控制的马达对象 * 参 数: * PinAddr_CS : 片选引脚如 BITBAND_ADDR(GPIOD-ODR, 5) * 返回值: 创建成功返回马达设备指针否则返回空指针NULL *******************************************************************************/externTMC5160_t*NewTMC5160(unsignedintPinAddr_CS);示例TMC5160_t*Motor;MotorNewTMC5160(BITBAND_ADDR(GPIOA-ODR,4));//创建一个马达if(MotorNULL){Error_Handle(0,Creat motor failed!);}//芯片初始化Motor-Write(TMC_CHOPCONF_ADDR,TMC_CHOPCONF);//CHOPCONF: TOFF3, HSTRT4, HEND1, TBL2, CHM0 (spreadCycle)Motor-Write(TMC_TPOWER_DOWN_ADDR,TMC_TPOWERDOWN);//TPOWERDOWN10: 电机静止到电流减小之间的延时Motor-Write(TMC_GCONF_ADDR,TMC_GCONF);//EN_PWM_MODE1 enables stealthChop (缺省 PWM_CONF 值)Motor-Write(TMC_TPWMTHRS_ADDR,TMC_TPWMTHRS);//TPWM_THRS500 对应切换速度 35000 ca. 30RPMMotor-Write(TMC_V1_ADDR,TMC_NOT_A1);//不使用二段加减速#ifONLY_USE_REF_PIN//如果仅使用参考引脚控制电机运行则需要更新TMC的速度寄存器{Motor-Write(TMC_VMAX_ADDR,Config.Speed*Config.PEL);//设置运行速度Motor-Write(TMC_SW_MODE_ADDR,TMC_SOFT_STOP|TMC_STOP_L_EN);//设置软停、使能左参考开关}#else//不使用参考引脚控制电机运行时仅设置软停{Motor-Write(TMC_SW_MODE_ADDR,TMC_SOFT_STOP);//设置软停}#endifMotor-Write(TMC_VSTART_ADDR,Config.VStart*TMC_SPEED_MUL);//设置启动速度Motor-Write(TMC_VSTOP_ADDR,Config.VStop*TMC_SPEED_MUL);//设置停止速度Motor-Write(TMC_AMAX_ADDR,Config.Accel*TMC_SPEED_MUL);//设置加速度Motor-Write(TMC_DMAX_ADDR,Config.Dccel*TMC_SPEED_MUL);//设置减速度Motor-Write(TMC_CURRENT_ADDR,TMC_CURRENT(Config.IRun,Config.IHold));//设置电流控制寄存器Motor-Write(TMC_MODE_ADDR,TMC_MODE_ACCEL);//加速运动模式初始化完成就可以控制马达运动了。3. 其它速度计算#defineFCLK12000000//时钟频率内部时钟12MHz#definePERIOD((0x0000000124)/FCLK)//速度控制的时钟周期2^24/FLCK#defineSUBDIVIDE256//细分数#defineSTEP_ANGLE1.8f//步距角#defineREDUCTION_RATIO10//齿轮减速比#defineTMC_SPEED_MUL11930//速度比值//计算公式PERIOD * SUBDIVIDE * (360 / STEP_ANGLE) * REDUCTION_RATIO / 60(rpm-rps)//速度(uStep/s)目标速度(rpm)*TMC_SPEED_MUL关于马达的运动控制方法请查阅TMC5160的数据手册本库仅提供了寄存器地址的定义和读写方法。

相关新闻

LSTM 自编码器原理详解:从三门结构到 STM32 端侧异常检测落地

LSTM 自编码器原理详解:从三门结构到 STM32 端侧异常检测落地

2026/8/23 0:40:45

LSTM 自编码器原理详解:从三门结构到 STM32 端侧异常检测落地产线上几十台电机日夜转着。某天一台轴承开始磨损,振动波形悄悄变了样,变化很细微,人眼盯示波器根本看不过来。等它彻底抱轴停机,一小时停产损失就是几万块…

整洁代码不只是写给人看,AI编码助手同样依赖高可读性代码

整洁代码不只是写给人看,AI编码助手同样依赖高可读性代码

2026/9/6 15:59:31

开篇:当AI接管代码修改,我们差点忽略代码整洁度的价值 近一年来,基于大模型的自主编码智能体已经渗透到全球大量开源项目的开发流程里,2026年一份覆盖128018个GitHub仓库的调研显示,有22%至29%的项目中都能找到AI编码工…

如何实现Node DDD项目的持续集成与语义化版本发布:Travis CI实战指南

如何实现Node DDD项目的持续集成与语义化版本发布:Travis CI实战指南

2026/8/23 0:40:45

如何实现Node DDD项目的持续集成与语义化版本发布:Travis CI实战指南 【免费下载链接】node-ddd-boilerplate Node DDD Boilerplate 项目地址: https://gitcode.com/gh_mirrors/no/node-ddd-boilerplate Node DDD Boilerplate是一个基于领域驱动设计&#xf…

UL 840-2016绝缘配合标准详解:电气间隙与爬电距离设计要点

UL 840-2016绝缘配合标准详解:电气间隙与爬电距离设计要点

2026/9/6 21:51:18

简介:UL 840-2016由美国保险商实验室发布,是针对电气设备绝缘协调的权威安全标准,业内广泛应用,适用对象涵盖产品设计工程师、安规测试人员及质量管理人士,核心解决绝缘系统中间隙与爬电距离如何确定和管控的问题。标准…

默认打印机总是自动变或把任务发错机器?手动固定默认打印机并检查打印链路

默认打印机总是自动变或把任务发错机器?手动固定默认打印机并检查打印链路

2026/9/6 21:51:18

很多用户的电脑里并不只有一台打印机。办公桌上可能有一台常用机,网络里还有部门共享机,回到家里又连接了另一台;而 Windows 只会把打印任务交给其中一台“默认打印机”。默认设备没有选对时,在 Word、Excel、浏览器里点“打印”常…

PLC毕业设计选题全攻略:从交通灯到伺服控制,避开四个坑

PLC毕业设计选题全攻略:从交通灯到伺服控制,避开四个坑

2026/9/6 21:51:18

简介:面向可编程逻辑控制器相关专业与自动化方向毕业生的论文选题资料集,聚焦PLC技术在工业自动化中的实际应用。内容以175个毕业论文题目为主体,涵盖物料运输线控制、数控机床、全自动注塑机、药品包装机、电梯与自动门、面粉厂设计、电气控…

CDGA备考:用100道模拟真题吃透DMBOK数据管理知识体系

CDGA备考:用100道模拟真题吃透DMBOK数据管理知识体系

2026/9/6 21:51:18

简介:面向数据治理工程师(CDGA)认证备考人群及数据治理从业者,这份模拟真题合集收录100道单选题并融合历年真题考点,覆盖数据治理角色与职责、数据生命周期、数据处理伦理、DAMA-DMBOK框架、GDPR准则、数据治理项目与活…

Wand-Enhancer:WeMod Pro 免费解锁,5 分钟配置完整

Wand-Enhancer:WeMod Pro 免费解锁,5 分钟配置完整

2026/9/6 21:51:18

Wand-Enhancer:WeMod Pro 免费解锁,5 分钟配置完整 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer 是一款免…

Caveman Agent Profile 贡献指南:从一份 JSON 到 `caveman wrap` 可用的完整注册与校验流程

Caveman Agent Profile 贡献指南:从一份 JSON 到 `caveman wrap` 可用的完整注册与校验流程

2026/9/6 21:41:18

Caveman Agent Profile 贡献指南:从一份 JSON 到 caveman wrap 可用的完整注册与校验流程 【免费下载链接】caveman 🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman 项目地址:…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/6 1:19:56

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/6 1:19:56

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/6 1:19:56

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/6 1:19:56

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/6 1:19:56

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/6 1:19:56

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

远程协作的工作台整理

远程协作的工作台整理

2026/9/3 6:56:24

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/4 7:42:10

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/5 23:14:13

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…