SeanLib系列函数库-TMC5160

发布时间:2026/8/1 5:05:53

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/7/19 7:21:26

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

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

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

2026/7/24 12:06:03

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

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

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

2026/7/21 4:40:26

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

C语言 函数

C语言 函数

2026/8/1 5:03:33

1. 函数作用降低程序耦合性(代码关联度),消除重复代码;程序模块化,提高代码复用性。2. 函数定义语法:返回值类型 函数名(形参列表) { 函数体; }返回值:int/char/float 等基础类型、构造类型、vo…

大模型知识库构建与LLM Wiki实践指南

大模型知识库构建与LLM Wiki实践指南

2026/8/1 5:03:33

1. 大模型知识库构建的核心价值Karpathy的LLM Wiki已经成为大模型领域从业者的必读资料,这份由特斯拉前AI总监精心整理的百科全书式文档,系统性地覆盖了大模型从理论基础到工程实践的完整知识体系。不同于碎片化的技术博客,这份Wiki以严谨的学…

专利名称撰写核心原则与技巧:法律、技术与检索的三重奏

专利名称撰写核心原则与技巧:法律、技术与检索的三重奏

2026/8/1 5:03:33

1. 项目概述:为什么专利名称是“第一道防线”干了这么多年技术研发和专利代理,我见过太多好技术因为一个糟糕的专利名称而吃大亏。很多人,尤其是技术出身的发明人,觉得专利名称不就是个“代号”吗?把核心技术关键词堆上…

WebGPU实时MMD渲染:Reze Design网页端材质编辑与性能优化

WebGPU实时MMD渲染:Reze Design网页端材质编辑与性能优化

2026/8/1 5:03:33

如果你还在为 MMD 渲染需要本地安装笨重软件、依赖特定显卡驱动、无法实时预览材质效果而头疼,那么今天要介绍的这个开源项目可能会让你眼前一亮。Reze Design是一个基于 WebGPU 的网页端 MMD 实时渲染工具,它直接在浏览器中实现了 PMX 模型加载、VMD 动…

嵌入式系统开发实战:从51单片机到RTOS应用

嵌入式系统开发实战:从51单片机到RTOS应用

2026/8/1 5:03:32

1. 嵌入式系统入门:从零开始的学习路径作为一名在嵌入式领域摸爬滚打多年的工程师,我经常被问到"如何系统学习嵌入式开发"这个问题。与常见的速成教程不同,我想分享一条经过实战验证的渐进式学习路线。嵌入式开发不同于纯软件开发&…

ARM内核DMIPS/MHz深度解析:从架构效率到嵌入式选型实战

ARM内核DMIPS/MHz深度解析:从架构效率到嵌入式选型实战

2026/8/1 4:53:32

1. 项目概述:为什么我们需要关注ARM内核的DMIPS/MHz在嵌入式开发、物联网设备选型,甚至是现在火热的边缘计算和移动端芯片设计领域,选对处理器内核是项目成功的基石。你肯定遇到过这样的场景:老板要求设计一款低功耗、高性能的智能…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/30 9:53:22

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/8/1 0:15:49

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/8/1 4:47:48

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/1 0:03:03

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/1 0:03:03

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/1 0:03:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/1 0:03:03

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/1 0:03:03

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/1 0:03:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…