发布时间:2026/8/26 10:22:49
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的数据手册本库仅提供了寄存器地址的定义和读写方法。

相关新闻

2026/8/25 7:17:48

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

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

2026/8/25 18:22:26

CANN基础设施用户指南

3.1 Environment Lifecycle Management 【免费下载链接】infrastructure 本仓库用于托管CANN社区基础设施团队的公开信息,包括不限于:会议日程,成员信息,服务文档和配置等信息 项目地址: https://gitcode.com/cann/infrastructu…

2026/8/26 10:21:51

舰船辐射噪声机理分析:从三大噪声源到工程降噪策略

1. 项目概述:从“听音辨船”到噪声机理的深度探索在海洋这个广阔而深邃的舞台上,声音是当之无愧的主角。对于水下航行器而言,其自身发出的声音,尤其是辐射噪声,就像一张无法隐藏的“声学名片”。这张名片不仅关乎其自身…

2026/8/26 10:21:51

舰船辐射噪声机理分析:从源头建模到实测验证的工程实践

1. 项目概述:从“听音辨船”到噪声机理的深度探索在海洋这个广阔而深邃的舞台上,声音是传递信息最有效的媒介。对于水下探测、目标识别乃至海洋环境保护而言,舰船辐射噪声就像一张独特的“声学指纹”,蕴含着关于船舶身份、状态和行…

2026/8/26 10:21:51

中小企业低成本内容合规实战:三层防御架构与SaaS工具应用

1. 项目概述:当合规成为生存线,中小企业的低成本破局之道最近,关于“清朗”行动下平台被约谈的消息,在不少中小企业主和运营负责人的圈子里引发了不小的讨论。大家关心的核心,已经从“要不要做内容合规”变成了“怎么做…

2026/8/26 10:21:51

中小企业内容合规实战:低成本构建内容安全防线的四步策略

1. 项目概述:当合规成为生存线最近和几个做内容平台和社区的朋友聊天,话题总绕不开一个词:“合规”。尤其是看到一些平台因为内容问题被约谈、下架甚至罚款,大家心里都绷着一根弦。对于资源雄厚的大厂,组建几十上百人的…

2026/8/26 10:21:51

企业级AI智能体WorkBuddy:打通系统壁垒,重塑数字协作新范式

1. 项目概述:当“数字员工”成为新同事最近,腾讯云一口气发布了三款AI原生应用,被网友们戏称为“三只龙虾”。这个比喻挺有意思,大概是想说它们都挺“生猛”,是面向未来工作场景的“硬菜”。这三款应用分别是&#xff…

2026/8/26 10:16:50

ComfyUI视频转绘与人物一致性:z-image+Wan2.2工作流详解

ComfyUI 社区最近讨论度最高的两个方向,一个是视频转绘,一个是人物一致性。以往图生视频最大的痛点是:第一帧看着还可以,越往后面越“放飞”,人脸开始漂移、服装细节变形、背景反复跳动。要解决这类问题,单…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 0:04:32

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 1:19:35

JSON总结

JSON概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、C#、Java、JavaScr…

2026/8/26 1:19:35

保存连接sse 是什么原理,为什么不会一直请求

“保持连接”用的是 SSE(Server-Sent Events),本质是一个没有马上结束的 HTTP 请求。 过程是: 拷贝机发送一次请求: GET /api/code-sync/events服务器返回: Content-Type: text/event-stream但不关闭响应&…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

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

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

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

2026/8/25 1:08:14

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

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