尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于TMC9660的伺服驱动快速开发:三环调参与硬件设计实战

基于TMC9660的伺服驱动快速开发:三环调参与硬件设计实战 做了这么多年电机驱动我最深的体会是伺服项目能不能快速落地往往不取决于算法水平而取决于你愿不愿意把底层那些已经成熟的东西交给专用芯片。TMC9660就是冲着这个痛点来的它把运动控制器、伺服控制器、三相栅极驱动器集成到一颗芯片里让我在两周内就从零搭出了一套性能不错的小型伺服系统。这篇就把我实际调通这套方案的过程、参数配置逻辑和踩过的坑完整写出来给准备用TMC9660做伺服的朋友做个参考。1. 为什么我用TMC9660做伺服而不是“MCU驱动板”传统做小型伺服驱动的路子基本就是选一颗高性能MCU自己写FOC算法再配栅极驱动器、采样电路、编码器差分接收电路最后还得写一套运动控制协议栈。这一套下来熟悉的人也要一两个月不熟悉的光调电流环就能折腾好几周。TMC9660这颗芯片的思路完全不一样它把伺服项目里最费时间的部分直接集成掉了。1.1 TMC9660是把伺服驱动做成了“三合一芯片”TMC9660是ADI Trinamic推出的一颗面向三相BLDC/永磁同步伺服电机的智能栅极驱动器。拆开看芯片内部集成了三块关键功能运动控制器负责产生位置曲线支持梯形波和S形加减速。上位机只需要告诉它“去哪里”剩下的加速、匀速、减速它自己算完。伺服控制器内部的FOC引擎把电流环、速度环、位置环全部闭环在芯片内部不需要外部MCU参与实时控制。三相栅极驱动器内部集成栅极驱动电路配合外部MOSFET构成完整功率级同时集成了电流采样和编码器接口。用这颗芯片做项目你不需要自己写FOC、SVPWM也不需要自己写梯形曲线生成器。你要做的是配置参数然后发运动命令。这就是“快速开发”的核心含义把精力从底层算法转移到系统应用上。1.2 传统方案和TMC9660方案的差异放一个直观的对比表大家感受会更直接对比维度传统MCU驱动板方案TMC9660方案电机控制算法自己写FOC、SVPWM或移植开源库芯片内部已集成FOC电流环/速度环/位置环手写调参靠自己内置配置参数即可运动曲线生成自己写梯形/S曲线代码内置运动控制器栅极驱动与MOSFET另选驱动芯片和MOSFET集成栅极驱动只需外接MOSFET编码器接口需要独立的差分接收/整相电路芯片内置ABN接口调试工具要自己搭示波器、状态监控TMCL-IDE内置完整调试工具上位机控制自己定协议UART/SPI TMCL命令开发周期1~3个月正常2周出样用MCU方案不是不行如果你追求高度定制化的东西比如超高速、弱磁控制、特殊死区处理或者产能大需要极致优化BOM那自己做算法依然有意义。但如果你要的是“快速搞出一个性能还不错的伺服”又不想在算法上浪费时间TMC9660目前是少有的能让你专注应用层的选择。1.3 这颗芯片适合谁TMC9660做伺服“高性能”的体现是电流环带宽足够速度环刚性好位置环定位准确并且有完善的滤波和前馈参数可以调。它非常适合这几类场景48V以内的小型伺服驱动器、机器人关节模组、AGV驱动轮医疗设备、协作机械臂关节、自动化产线设备从步进电机升级到闭环大扭矩的场合学生项目、创客项目、机器人竞赛需要短时间出效果它和汇川、安川这类完整伺服驱动器定位不同TMC9660更像是一个高度集成的“伺服控制核心”你可以把它做成自己的驱动器再通过串口或SPI和PLC、运动控制卡集成。这也是我在这篇文章里反复强调的一个思路——不要把它当成品驱动器而是当一颗可以嵌入你自己产品的“控制心脏”。2. 硬件方案从芯片到电机的接线与板卡选型买芯片来做项目不建议一上来就自己画板。TMC9660有对应的评估板比如TMC9660-EVAL和TMC9660-BOB两者定位不同。先选对板子才能少走弯路。2.1 板卡怎么选BOB和EVAL的区别TMC9660-BOB板子尺寸小相当于芯片的最小系统把供电、晶振、调试接口都做好了方便你直接把它集成到自己的原型里功率级需要自己搭。TMC9660-EVAL完整评估套件板上已经把MOSFET桥、电流采样全部做好插上电机和电源就能跑适合第一次接触这颗芯片的人。我的建议是如果之前没用过TMC9660直接买EVAL因为功率级已经配好你只需要关心电机参数和运动控制配置。等确认了性能和参数之后再基于BOB或自己画PCB做最终产品。我自己的流程也是这样先用EVAL验证电机再画板集成。2.2 电源和功率级设计的三个关键点TMC9660的逻辑供电和电机供电是分开的。电机电压一般控制在8~60V范围内具体取决于你选的功率板和外部MOSFET的耐压。这里有三件事是我实际踩过坑的第一电机电源的滤波电容要足。电机启动瞬间电流很大如果电源线细、电容小母线上电压会跌落栅极驱动器可能欠压复位表现就是电机走走停停。我的经验是按每10A峰值电流配2200μF以上的母线电容并且尽量靠近MOSFET桥。第二栅极驱动电流和MOSFET的匹配。TMC9660内部栅极驱动器输出能力是固定的你需要根据MOSFET的栅极电荷Qg来调整栅极电阻。电阻调小了开关振铃严重可能损坏MOSFET电阻调大了开关损耗高驱动发热。常规做法是先放10Ω看栅极波形再增减。第三分流电阻的取值。电流采样电阻阻值越大小电流时采样越准但功耗更大、保护点更早触发。如果伺服电机需要高速大电流不建议用过大的采样电阻。举个例子0.02Ω采样电阻10A峰值电流时损耗就是2W必须选择足够功率的电阻。阻值上限以不超过芯片采样满量程、且能在目标电流下获得足够信噪比为准。2.3 编码器接线与倍频逻辑伺服闭环需要位置反馈TMC9660支持ABN增量编码器和数字霍尔传感器。接线时要注意编码器如果是5V TTL差分输出A/A-、B/B-要接成差分输入如果是单端输出就接到对应的单端输入脚。ABN中A、B相位差90°N是每转一个的零脉冲一般接在芯片的Z轴相关引脚。倍频逻辑是很多新手容易忽略的点芯片会对AB信号做4倍频处理。比如你的电机编码器是2500线内部看到的反馈计数就是2500×410000计数/转。位置和速度的计算都以“计数”为单位。所以配置编码线数时直接填物理线数2500但你在速度环里看速度时要注意单位换算是按计数算的。2.4 电机相序和极对数两个最容易出错的地方正式上电前电机模型参数有三个必填额定相电流、极对数、编码器线数。其中极对数直接决定了FOC电角度换算。极对数怎么找看电机铭牌。比如写着“8极电机”极对数就是4如果写“4极”极对数就是2。极对数填错常见表现是电机启动时抖动、异响或者感觉没劲拖不动。相序不对表现是电机正转反馈却显示反转或者电流很大但电机不动。验证方法先给一个很慢的力矩或位置指令观察编码器方向与命令方向是否一致。不一致就把任意两相电机线对调或者改编码器方向。这里额外补一句如果用霍尔做换向霍尔安装角度与电机电角度需要匹配。没匹配好的话用手盘一下电机看TMCL-IDE里读到的角度是否连续变化。如果不连续要么霍尔接线有问题要么霍尔偏移参数没设对。3. 半个小时让电机转起来环境搭建与基础参数配置硬件接好之后接下来就是把开发环境跑起来让电机转第一圈。这个阶段的目标不是调性能而是确认“芯片、电机、编码器、上位机”这条链路全部打通。3.1 装上TMCL-IDE把板子连到电脑TMCL-IDE是ADI Trinamic的官方调参软件跨平台支持Windows/Linux/macOS免费。安装之后用USB线把TMC9660-EVAL连到电脑板载调试接口会枚举出一个串口设备。打开TMCL-IDE选择对应板卡型号和串口号点击连接。连接成功后左侧能看到Motor、Driver、Misc等寄存器分类右侧是实时曲线和状态窗口。连接不上时先看设备管理器里端口是否识别装好驱动再看板子上电顺序。我一般先上逻辑电再上电机电源避免芯片在悬浮状态下状态异常。这个顺序有时候比参数本身还关键因为栅极驱动器如果在上电瞬间没有稳定的逻辑供电输出脚状态不确定电机可能会闯动一下。3.2 电机参数配置以常见57伺服电机为例一台常见的57步进伺服电机参数大概是额定电流3A、额定电压36V、极对数4、编码器2500线。在TMCL-IDE里怎么填电流设置先把运行电流设成额定电流3A。峰值电流先别急着设太大设成额定电流的1.5倍即可等验证散热之后再按实际需求上调。PWM频率设置成20kHz人耳基本听不到电流纹波和控制带宽比较平衡。如果电机高速时噪声大可以提高到30kHz但栅极驱动和MOSFET的开关损耗也会相应增加。编码器选ABN模式填2500线。极对数填4。配置完成后保存到EEPROM这样芯片重启后参数还在。这个保存动作很容易忘我见过好几回参数调了一上午没存断电重启全没了。3.3 第一次运动TMCL命令怎么发TMCL-IDE里最方便的试机方式是直接模式在命令行输入TMCL指令。比如我想让电机走到绝对位置5000个计数# 设置轴0目标位置为5000编码器计数 SAP 4 0 5000 # 绝对移动到位置5000 MVP 1 0 5000MVP就是Move to Position。TMCL里MVP的类型有几种1表示绝对位置2表示相对位置。比如相对当前位置往前走1000个计数# 相对移动向前走1000个计数 MVP 2 0 1000如果想看电机能不能连续转用速度模式# 轴0以速度100内部单位正转 ROR 0 100 # 轴0以速度50反转 ROL 0 50 # 立即停止轴0 MST 0第一次转动时速度一定要设低一点观察电机是否顺畅、电流是否稳定。如果电机抖动或者剧烈发热马上MST停车回头查极对数、相序、编码器方向。3.4 编码器方向正反的判断与修改判断编码器方向的方法很简单把目标位置设成正方向比如MVP 1 0 1000看电机是正转还是反转再对比TMCL-IDE里读到的编码器计数值变化方向。如果命令正转但编码器计数在减小有两种改法硬件上把A、B两相接线互换。软件上配置编码器方向取反。软件改更省事但这里有一个非常容易踩的坑如果换了相序或改了编码器方向FOC电角度也会跟着变所以修改后必须重新做一次低速验证。不改验证直接上高速大概率过流报警。我自己就因为这个吃了好几次亏。4. 面向高性能伺服的环路调优增益、滤波、前馈怎么配合电机能转只是第一步真正让伺服“好用”的关键在于三环调参。TMC9660把这些参数全部暴露在寄存器里你可以清晰地看到每一级环路的状态。这里讲讲我实际用的调参顺序和逻辑。4.1 伺服三环的本质先内后外伺服控制是一个典型的三环结构电流环最内层控制电机相电流跟随给定带宽最高一般做到1kHz以上。速度环中间层根据速度误差给出电流指令带宽几百Hz。位置环最外层根据位置误差给出速度指令带宽相对低几十到一两百Hz。调参顺序一定是先内后外先把电流环调稳再调速度环最后调位置环。如果直接调位置环位置误差的来源你分不清是位置环软还是速度环抖问题定位会很困难。这一步没什么捷径顺序错了后面全是坑。4.2 电流环调参目标是无过冲电流环里的PI参数我习惯从小到大试。先把比例项调到电流波形跟随良好、不振荡再加积分项消除稳态误差。用TMCL-IDE里的示波器功能观察相电流波形如果出现高频振荡说明P太大如果响应慢、稳态误差大说明I太小。一个朴素的判断标准给定一个阶跃电流指令实际电流上升时间在0.5~1ms左右超调量不超过5%基本就算可以。盲目把P调到最大不是好事电流环振荡会直接传导到速度环听起来就是持续的高频嗡嗡声。4.3 速度环调参刚性和噪音的平衡速度环的P决定刚性I决定消除稳态误差的能力。如果速度响应慢电机感觉“软”加大P。如果速度有稳态偏差加大I。如果电机在某个速度区间出现啸叫或共振往往是速度环增益过高优先调低P而不是去硬顶。TMC9660的速度环还支持速度前馈。前馈的作用是提前补偿运动控制指令带来的速度变化让位置环配合更顺滑。我一般先把前馈系数从0开始慢慢往上加观察位置追踪误差是否变小直到误差不再明显变化就停下。前馈不是越大越好过大的前馈在加速度突变时会引起震荡。4.4 位置环调参定位不振荡就行位置环一般用P就够了追求无静差时再加一点I但要非常小心位置环的I积分很容易引起定位终点的小幅振荡。目标是定位过程不振荡、到位后位置保持稳定。位置环P调大的效果是“跟得快”但太大时到位附近会有明显的来回动作看起来就是来回小幅抖动。一个实用技巧先给一个目标位置观察实际位置的阶跃响应。如果到位时冲过头再回来说明位置环P过大如果响应慢悠悠则P过小。找到临界值后再回退一些留出稳定裕量。4.5 滤波和陷波对付机械共振伺服系统里最头疼的是机械共振比如同步带传动、联轴器、结构臂架都可能在某一个频率上激发共振。TMC9660提供低通滤波和陷波滤波器低通滤波减小反馈信号的噪声但会降低相位裕度截止频率太低会让系统变迟钝。陷波滤波专门衰减某个特定频率。操作方法是先用示波器或频谱看出共振频率比如800Hz然后把陷波中心频率设在800Hz带宽设50~100Hz。我调共振的思路是先不急着上陷波先把速度环增益稍微降低看是否稳定如果必须保留高速性能再上陷波。陷波是“手术刀”只切那个频率不能乱用。用不好可能把一个共振变成两个新的不稳定点。4.6 一个完整的调参顺序清单确认编码器方向和极对数正确。电流环设小P试阶跃调到无大超调。速度环逐级加P观察速度波形再调I补偿稳态误差。位置环加P检测定位是否振荡必要时加一点前馈。全行程往复运动听噪音、看温升、看波形做微调。这套流程下来大多数系统在两三天内能收敛到比较理想的状态。难的不是某个参数怎么调而是你能不能克制住“一次改好几个参数”的冲动。5. 用TMCL-IDE的示波器功能咬出问题波形“伺服波形”这个词在调试里出现频率极高也确实是最直观的调试手段。TMC9660的好处是内部状态能实时上传TMCL-IDE里集成了示波器功能不用外接物理探头就能看到控制环路的内部量。5.1 示波器能看到什么TMCL-IDE的示波器不是物理探头而是把内部寄存器里的数值以曲线形式画出来。你可以配置观察目标比如实际位置与目标位置实际速度与目标速度相电流A/B/C母线电压编码器计数调参时我至少同时开“目标位置、实际位置、实际速度”三条曲线。让电机走一个往复运动一眼就能看出位置追踪误差和速度波动。5.2 常见波形问题与原因对照我整理一个自己常遇到的排查表直接照着查就行现象波形表现最可能原因处理方向定位后小幅振荡位置曲线到位后仍有正弦波动位置环或速度环增益过高降位置环P、降速度环P高速啸叫电流波形高频毛刺多电流环P过大或PWM频率不当降电流环P、提高PWM频率跟随误差大目标位置与实际位置曲线明显拉开速度环刚性或前馈不足加速度环P、加前馈启动抖动起步阶段速度来回跳电角度错误或编码器配置错误检查极对数、编码器配置电机嗡嗡但不动电流大、位置无变化相序错误或机械抱死换相线或查机械5.3 一个排查实例电机高速时过流报警我自己遇到过一个典型案例低速一切正常一旦目标速度超过2000rpm驱动器就过流报警。我在示波器里观察相电流发现在高速段电流波形出现明显削底失真不是标准的正弦。深挖之后发现是母线电压偏低反电动势加上电流降落在电压裕量之外FOC算法已经输出饱和。这是典型的“电压极限”问题。解决方法有两种一是提高电机电源电压二是降低目标峰值电流或者减小速度环P值减缓加速过程的电流需求。这类问题如果没有内部波形光靠排查参数会非常痛苦。所以看到过流报警第一反应不要只是降增益先看母线电压和电流波形是否饱和。5.4 一条保命原则改一个参数动一下调伺服最容易犯的错是同时改好几个参数结果振荡了不知道是哪个参数引起的。我自己的习惯是每次只改一个参数观察一组波形记录结果再改下一个。前期慢后面反而更快。很多所谓“玄学”问题最后都是参数叠加造成的。6. 从单机到产线串口/SPI协议交互与上位机集成当你用TMC9660调好一台电机之后下一步就是把它交给上位机或者统一由PLC、运动控制卡调度。这一章说说我自己集成过程中用到的协议和设计思路这也是从“能转”到“能用”最关键的一步。6.1 用TMCL命令构建上位机控制协议TMC9660支持UART和SPI两种物理接口上位机通过TMCL协议发送命令。TMCL报文格式很固定地址、命令号、类型、轴号、数据值、校验和。上游有现成的TMCL库可以调用也可以自己按协议文档写。一个最简单的UART指令示例控制轴0移动到绝对位置10000# 发送帧FF 04 01 00 00 00 27 10 3B # 字段分解 # FF - 模块地址广播/默认 # 04 - 命令号MVP移动位置 # 01 - 类型绝对定位 # 00 - 轴号轴0 # 00 00 27 10 - 目标位置0x2710 10000 # 3B - 校验和所有字节累加取低8位校验和算法通常是除帧头外所有字节求和后取低8位具体以协议文档为准。集成上位机时我建议不要让上位机去算每一段运动曲线而是用TMC9660的运动控制器产生S曲线轨迹上位机只发最终目标位置和期望速度实时状态通过轮询读取即可。这样上位机的实时性压力小很多也不会因为上位机所在系统偶发卡顿而让运动曲线变形。6.2 与PLC/运动控制卡的对接思路工厂场景里上位机往往是三菱、西门子这类PLC。TMC9660本身不是总线从站它没有EtherCAT或Profinet这样的总线接口但可以通过两种方式对接PLC通过Modbus或串口网关连接一块小MCUMCU将指令翻译成TMCL命令下发给TMC9660。直接用一个带总线从站功能的MCU与TMC9660通过SPI通信这样PLC看到的就是一个标准伺服驱动器。我实际做过类似的方案PLC通过Modbus RTU下发目标位置给一块STM32STM32用UART把TMCL命令发给TMC9660同时把TMC9660的状态返回给PLC。整体稳定性和PLC直接控制专用伺服没有本质区别主要看通讯周期和数据刷新率是否满足。如果你用的PLC是三菱FX5U这类带CC-Link IE Basic的也可以用支持该总线的网关芯片实现类似效果思路是一样的。6.3 独立运行模式完全摆脱上位机如果你不想每次上电都用电脑发命令TMC9660还支持独立运行模式把程序烧录到板载Flash里上电后自动按预置流程执行。适合某些需要开机回零、自动定位的设备。比如回零逻辑上电后以低速寻找原点传感器找到后清零位置再运动到工作位置。这些在TMCL-IDE里可以用脚本或流程功能编写。测试好之后烧录进去整机只需要给电就能跑。这种方式最大的好处是生产现场少了一个可能出问题的上位机环节缺点是每次改动作都得重新烧录。所以实际设备里我一般还是保留一个可改参数的UART口方便现场调整运动参数。6.4 多轴同步要注意的坑两三个TMC9660做多轴联动时不少人直接用UART分别发位置命令结果发现同步性不好。原因是每个轴的通信时刻和内部指令处理时刻不完全一致轴与轴之间会有相位差。如果多轴有同步需求有两个方向用同一片MCU的SPI总线挂多个TMC9660在同一个SPI周期内统一发送目标位置同步误差会小很多。让每个轴独立走S曲线上位机在主站层做时间和位置上的规划分配保证各轴同一时刻到达目标点。如果要求更高比如龙门双驱这类强耦合场景虽然TMC9660本身没有主从同步逻辑但可以用上位机做交叉耦合控制统筹各轴的误差补偿。我这边是用MCU主站来实现的整体误差在允许范围内。在通讯协议层面如果只是单轴UART很够用只有在多轴同步或高频读写状态时SPI才更有优势。建议在项目早期就决定好接口后期换接口要改硬件和协议成本不小。回过头来总结一下我自己这两周的实际节奏第一天熟悉TMCL-IDE和板卡第二天把电机转起来剩下十几天全部花在环路调优和整机联调上。和我以前从零写FOC相比这个速度已经是质的飞跃。给第一次接触TMC9660的朋友一个实用建议别急着追求“高性能”先跑通最简单的定位循环然后再一步步加增益、加前馈。你手上如果正好有一套电机和驱动器完全可以从TMCL-IDE开始先让它转起来剩余时间都用来打磨系统的稳定性和动态响应。按这个节奏走两周完成一个性能可用的伺服方案是完全可行的。
返回列表