ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

五相步进电机精密定位:TB67S569FTG+R7KA8D2KFLCAC驱动方案

五相步进电机精密定位:TB67S569FTG+R7KA8D2KFLCAC驱动方案 前段时间接了一个小型精密定位机构的活儿一台五相步进电机要求运行平稳、定位准确还得在有限的BOM成本内把驱动电路做小。试了几种方案之后我最终用东芝的TB67S569FTG驱动芯片加瑞萨的R7KA8D2KFLCAC这颗MCU把这套东西串了起来。整个链路并不复杂MCU只负责输出时钟脉冲和方向电平剩下的电流斩波、换相逻辑全部交给驱动IC。这个组合对于做运动控制的朋友来说属于典型的“上层只管发指令、下层包办功率”的架构。你不需要自己去填五相电机那套复杂的换相表也不用为了电流环调PID调到怀疑人生。我写下这篇记录把选型理由、硬件接线、软件写法和调试过程里踩过的坑都摊开讲希望能给正在玩TB67S569FTG、R7KA8D2KFLCAC或者五相步进电机的朋友一个能直接“抄作业”的参考。1. 为什么是“五相驱动IC 高性能MCU”这个组合——选型思路与适用场景1.1 五相电机与两相电机的本质区别传统的小设备里两相步进电机最常见步距角一般是1.8°也就是一圈200个整步。而五相步进电机的整步步距角是0.72°一圈500个整步。这是什么概念同样是整步驱动五相电机的角度分辨率是两相的2.5倍如果进一步用五相十状态的半步驱动每个脉冲只有0.36°一圈就是1000个脉冲。角度分辨率高之外五相电机的转矩脉动也更小低速下的共振和噪声明显低于两相电机。做精密定位的人应该都有体会两相电机跑到低速区间时那种嗡嗡的震动常常让定位平台跟着颤五相电机在这方面的表现就好得多。所以很多光学平台、精密滑台、高端3D打印和医疗设备里宁愿多花点成本也要用五相电机。但代价也明显五相电机绕组多、引线多驱动器不能像两相四线那样用一块DRV8825加几个MOS就完事。两相驱动只需要两路H桥五相需要五路功率输出通电顺序是五相轮换而不是AB相轮换。这也是为什么网上常见的DRV8825驱动42步进电机可以做得很好但拿它去驱动五相电机基本没法直接用——不是效果差多少的问题是桥路结构和换相表根本不匹配。1.2 TB67S569FTG在驱动链路里的定位TB67S569FTG是东芝面向五相步进电机推出的驱动IC。我把它放在功率侧主要图三点。第一内置功率级。芯片内部把五相绕组需要的驱动器和续流管都集成了外部只需要给它电源、参考电流、控制信号和电机线不需要再设计半桥或全桥。以前自己用分立MOS搭驱动光是死区控制、过流保护、栅极驱动供电这几个环节就够折腾几个星期现在这些全被封装进了芯片。第二电流斩波和故障保护自动完成。步进电机是电流驱动器件绕组里的电流需要以某个PWM频率斩波稳定在目标值附近。TB67S569FTG内部有恒流控制逻辑还会处理过流、过热这些异常情况。我只需要在外部把电流目标设定好剩下的事情基本不用管。第三控制接口是时钟脉冲式。CLK引脚每来一个脉冲内部译码逻辑就让电机走一个微步DIR引脚决定方向。这意味着MCU完全不用管换相表也不用跑PID电流环只要把脉冲频率和个数控制对位置就能对上。这种“把复杂性关在芯片里面”的设计是驱动电路快速落地的关键。1.3 R7KA8D2KFLCAC的任务边界与扩展空间R7KA8D2KFLCAC是瑞萨RA8D2系列的高性能MCU基于Arm Cortex-M85内核。在这套方案里它实际干的事看起来特别简单初始化GPIO、配置定时器、按运动规划更新定时器周期、计数已发脉冲。但别小看这几件事脉冲输出的质量和灵活性直接决定电机跑起来顺不顺。为什么没有用一颗8位单片机硬延时翻转IO因为精密运动控制里有两个硬指标。一是CLK频率要能平滑变化如果靠循环翻转IO产生脉冲加速曲线很难做得连续电机容易在共振区丢步二是频率稍微高一点的场景比如CLK跑到几十kHz甚至更高对定时器精度和中断响应有要求。RA8D2主频很高定时器外设也丰富发脉冲根本占不满CPU剩下的算力可以用来做通信、状态机、传感器采集甚至后期接编码器做闭环。这个扩展空间是低端单片机给不了的。从系统设计的角度看这个组合把项目切成两个层次MCU管“走多少步、多快走、往哪走”驱动IC管“怎么励磁、怎么限流、怎么保护”。两边各干各的调试时能快速定位问题。如果你的应用是小型五相步进电机或者其它对平稳性和定位精度有要求的电机这个架构可以直接原样参考。2. 从CLK脉冲到电机旋转控制链路逐级拆解2.1 时钟输入式驱动的核心逻辑TB67S569FTG这类芯片的控制思想和很多带“脉冲/方向”接口的伺服驱动器是同一个路子。CLK信号在芯片内部被当作“步进请求”每检测到一个有效边沿内部状态机就切换到下一组通电状态。DIR电平决定状态切换是加一还是减一。ENABLE则控制功率输出是开启还是全部关断。所以从MCU的角度看整个控制任务退化成用定时器生成一串频率可变的方波。这个设计最大的好处是抗干扰能力集中在了芯片内部。换相表、死区时间、续流路径都是厂家预设好的外部用户很难改坏。我见过很多自己搭栅极驱动电路翻车的案例开关瞬间的振铃直接把MOS打穿换成这种一体驱动IC之后功率级可靠性高了一个量级。要注意CLK信号不是随便一条方波就能直接喂给驱动器的它有电平阈值和最小脉宽要求数据手册里会写得很清楚。如果你的MCU是3.3V IO而驱动IC逻辑部分工作在5V电平可能不够需要加电平转换或者确认芯片输入是否兼容3.3V。我在项目里让逻辑电源和MCU的IO电平保持一致直接省掉了转换电路。这也是个小决策不要照搬别人的电路先看输入阈值。2.2 转速计算先分清你的每个脉冲代表多少度这一步很多人第一次接触时钟输入式驱动器时容易搞混。对于TB67S569FTG一个CLK脉冲对应一个步进状态。如果把芯片配置成五相十状态半步工作每脉冲对应0.36°如果是五相五状态整步每脉冲对应0.72°。转速公式是转速r/min CLK频率Hz× 步距角度× 60 ÷ 360举个例子。使用0.36°半步模式想跑120 r/min需要的CLK频率就是f 120 × 360 ÷ (0.36 × 60) 2000 Hz也就是每秒2000个脉冲。如果直接套1 kHz的CLK转速只有60 r/min。这个换算关系建议写到需求文档里后面所有加减速表都围绕它计算。凡是脉冲频率与步距角不匹配就会出现“我明明给的是1000步每秒为什么转速和手册对不上”的困惑。还要注意有些时钟输入驱动器内部会有分频或者倍频逻辑不一定是一个CLK对应一转矩状态。所以拿到芯片后第一件事就是把数据手册里的“步进分辨率”和“输入时钟关系”那张表看清楚。我习惯在代码里用一个常量把“CLK频率转转速”的系数定义好后期换电机或者换细分模式只改这个常量就行。2.3 内部通电时序为什么说五相驱动“不止多一根线”五相电机有五个绕组常见接法是星形公共端接电源五个相线分别接驱动IC的五路输出。通电时序不再像两相那样简单的AB相正反交替而是按五相五状态或五相十状态循环。以五相十状态为例每一步只会有一个相断电其它四个相通电形成更平滑的旋转磁场。这种激励方式让五相电机的步距角细分很均匀转矩脉动小。TB67S569FTG把这张换相表做进了内部逻辑看到CLK就按表切换。这也是为什么我可以完全不关心“现在该通哪几相”只关心方向和脉冲数。如果你自己用逻辑阵列搭这套换相表五相十状态有十种状态组合每种还要考虑电流方向工作量大得吓人。而且一旦逻辑出错轻则电机噪音大重则烧驱动管。从控制链路的角度看MCU和驱动IC的接口简单但“接口简单”不等于“原理简单”。了解内部换相过程对你判断故障还是有帮助的。比如电机运行时突然噪音变大你能想到可能是其中一相线接触不良而不是去改MCU代码。3. 硬件搭建要点供电、电流设定与信号配线3.1 电源架构与去耦电容布局功率侧和逻辑侧最好分开供电。功率侧VM接电机电源电压按驱动IC允许范围来选不一定要等于电机标签上的额定电压因为恒流驱动限制的是电流而不是电压。很多小型五相电机标签写的是3V或6V但驱动IC允许VM到十几伏甚至更高只要把电流限制在电机额定值以内电机照样安全而且高速性能反而会好一些。这是因为更高的供电电压能让电流斩波的上升沿更快绕组电流更容易跟上目标值。逻辑侧VCC我直接用了3.3V和R7KA8D2KFLCAC电平匹配。实际做的时候最好在逻辑电源输出端加一个小磁珠或小电阻把逻辑地和功率地隔开一点避免功率侧的开关噪声窜到逻辑电源里。去耦电容上最有价值的经验是大电解电容贴近VM和GND放同时再并联几个100nF陶瓷电容。步进电机是强感性负载每一步换向时电流突变会在电源线上产生很高的dv/dt如果去耦不够轻则CLK波形一团糟重则驱动IC过压保护误触发。我第一次调试时就因为只放了一个小电容上电还没跑几步驱动IC就报故障了。后面在VM引脚附近补上大电解和小陶瓷的组合问题立刻消失。电容容值怎么选我的习惯是每安培输出电流至少配1000μF电解电容再并三五个100nF陶瓷放在芯片供电脚的5mm以内。3.2 电流检测电阻与电机额定电流的匹配步进电机本质上是电流器件发热主要取决于电流而不是电压。驱动IC内部通过检测电阻上的压降来感知相电流检测电阻的阻值和功率选择很关键。数据手册里一般会给出输出电流与检测电阻的对应表或公式照着算即可。我的经验是第一版先把目标电流设定到电机额定电流的70%左右让系统先跑起来确认电机不丢步、温升可以接受后再逐步往上调。这样既保护电机也避免一开始就把电流调满导致驱动IC过热。测量电流的方式很简单用示波器探头测检测电阻两端的电压波形除以电阻值就是相电流。检测电阻一定选低电感、高精度的型号比如合金电阻。绕线电阻电感大在高频斩波下会引入额外压降让电流反馈失真电机噪音明显变大。阻值误差尽量控制在1%以内因为相电流精度直接依赖它。另外检测电阻的功率要留足余量不要只看封装标称功率还要算一下在峰值电流下的实际温升。我踩过一次用1206封装电阻跑1.5A电流的坑抬手一摸烫出水泡后来换成2512封装温度才正常。3.3 五相电机接线分组与信号抗干扰第一次拿五相电机时看到十根线不要慌。先用万用表通断档把每相绕组分组。星形接法的电机通常能找到公共端或五组线两两有通路。把公共端统一接到电源正确位置五个相线按顺序接到驱动IC输出。顺序错了电机要么不转要么反着转。转向反了交换任意两相就能纠正不用拆线重接。信号线方面CLK、DIR这类线如果很短比如都在同一块PCB上直接连没问题。如果MCU板和驱动板之间有几十厘米飞线最好在MCU侧加强驱动或者在驱动IC输入端串联一个小电阻并加电容到地做简单RC滤波。我遇到过一次电机抖动的怪故障排查了很久最后发现是CLK线太长步进信号边沿有振铃驱动IC把一个脉冲识别成了两个。加了一个100Ω串联电阻后波形干净了问题消失。这个问题用示波器看波形时很清楚没示波器的话就会排查半天。3.4 关键器件清单下表是我这套方案的器件清单仅供参考。功能器件说明驱动ICTB67S569FTG五相步进电机驱动时钟输入控制主控R7KA8D2KFLCACCortex-M85内核MCU负责脉冲和逻辑功率电源DC-DC或稳压源电压按驱动IC允许范围电流余量按电机峰值电流2倍以上考虑逻辑电源3.3V LDO给MCU和驱动IC逻辑部分供电去耦电容1000μF电解 100nF陶瓷靠近驱动IC放置检测电阻合金电阻1%精度按数据手册计算阻值和功率五相电机小型五相步进电机确认是星形还是十线引出器件清单看起来平平无奇但每一颗的选型都有讲究。最容易忽略的就是检测电阻和去耦电容这两项不达标后续所有软件优化都白搭。4. R7KA8D2KFLCAC端软件设计定时器脉冲与加减速控制4.1 用FSP建工程和配置GPIO瑞萨RA系列的开发可以用e² studio加FSP图形化配置引脚和外设。我的第一件事是把CLK输出引脚配置为定时器GPT的输出通道而不是普通GPIO。这样硬件会自动翻转引脚不占用CPU。DIR、ENABLE这类低频信号用普通GPIO即可。配置时要注意引脚复用冲突。RA8D2引脚功能很丰富但同一个引脚通常只能映射一个外设配置错了编译能过实际不出波形排查起来比较费劲。检查方法是在FSP的引脚视图里看是否有冲突提示或者直接看数据手册的Alternate Function表。GPIO初始化有一个隐蔽的小问题上电时所有引脚默认可能是高阻或固定电平。如果你把控制信号接到驱动IC之前没有先在代码里把方向、使能引脚拉到安全电平驱动IC可能在MCU启动期间处于不受控状态。我的做法是先初始化所有控制GPIO为输出并拉到关断电平再初始化定时器最后才使能驱动IC。顺序反了电机会在上电瞬间抖一下这在光学平台这种敏感场合是不能接受的。4.2 脉冲生成的两种方式PWM模式与单脉冲计数我最终用的是GPT定时器的PWM模式。因为CLK只需要固定频率的方波PWM周期决定频率占空比设为50%即可。改变频率就是改变定时器周期寄存器的值。FSP里可以用R_GPT_PeriodSet更新周期。参考代码大概是这样void motor_set_clk_freq(uint32_t freq_hz) { /* 示意代码实际周期计算要结合定时器时钟频率 */ uint32_t period_ticks timer_src_clock_hz / freq_hz; R_GPT_PeriodSet(g_timer0_ctrl, period_ticks); }另一种方式是单脉冲计数。每次定时器比较匹配就产生一个脉冲中断服务函数里计数到达目标步数后停止。这种方式对位置控制更直接但加减速处理稍复杂因为每次更新周期都要在中断里重新设置。我实际采用的是PWM加定时器溢出中断的混合方案PWM负责持续产生稳频脉冲溢出中断里把已发脉冲数加一和期望位置比较到达后停止定时器。这样CPU负担很轻位置计数也准确。中断服务函数里尽量不要做耗时操作只做计数和标志位设置剩下的逻辑放在主循环里处理。4.3 梯形加减速电机不丢步的关键步进电机有一个反直觉的特性启动频率不能太高。你直接把CLK频率设成目标速度电机大概率原地抖动不动这就是典型的丢步。电机的转速必须从较低值开始再平滑加速到目标速度减速时也一样。最简单的加减速曲线是梯形先线性加速到目标速度匀速接近目标位置前线性减速。要求更高可以用S曲线但很多应用梯形就够了。我实现的梯形加减速核心是维护一个当前周期值。每次定时器更新中断里根据剩余步数决定下一步频率是升、保持还是降。伪代码如下int32_t remaining target_pos - current_pos; if (abs(remaining) decel_steps) { /* 进入减速区周期变大频率下降 */ period accel_delta; } else if (clk_freq max_freq) { /* 加速阶段周期变小频率上升 */ period - accel_delta; }梯形加减速要调的参数就两个启动频率和加速斜率。启动频率要低于电机能立刻启动的频率我一般从800 Hz开始。启动频率太高第一步就丢后续再多补偿都补不回来。加速斜率要根据负载转动惯量调调到高速不丢步、电机不啸叫即可。实测中加减速参数调得越平滑机械噪音和发热越小。加减速参数怎么调我的做法是让电机跑一段固定距离故意把加速斜率调快直到出现丢步然后退回来留20%余量。这个临界点是负载相关的换机械结构后要重新标定。4.4 方向切换与使能时序的状态机很多丢步问题不是发生在匀速段而是换向时。方向切换切记不要边发脉冲边拉DIR。正确顺序是停止CLK等待至少几个脉冲周期让电流稳定拉DIR再重新开始发CLK。反过来停止时也不要一边停脉冲一边立刻禁能驱动IC否则绕组电流突然切断电机会因为反电动势产生抖动下次再启动时位置可能偏。我习惯把运动控制写成一个小状态机空闲、加速、匀速、减速、停车。ENABLE在空闲状态统一拉回关断其它状态保持开启。这套状态机的代码量不大但让所有运动请求都有明确时序。实际调的时候你只要把几个时间点用逻辑分析仪抓出来一眼就能看出时序是否合理。状态机之外位置计算也要谨慎。我用一个int32_t变量保存已经发出的脉冲数目标位置也存成同样的单位。每次定时器中断把脉冲计数加一主循环里比较当前脉冲数和目标值相等就停止。只要加减速过程没有丢步这个开环位置就是准的。如果实在担心丢步可以后续加编码器做半闭环校验但那是另一个话题了。5. 实测调试与踩坑记录5.1 示波器观察CLK输出与电流波形软件写完后先不要直接接电机。把CLK引脚配置成固定1 kHz用示波器量R7KA8D2KFLCAC的CLK引脚确认频率、脉宽、边沿干净。没有示波器的话也可以用逻辑分析仪。CLK波形确认无误后再接电机。接着把示波器探头放在检测电阻两端观察电流波形是否接近目标恒流值。如果你看到的是严重畸变的尖峰而不是相对平缓的电流平台大概率是检测电阻选型、去耦或者PWM斩波频率设置有问题。斩波频率一般可以在数据手册里通过外部引脚或寄存器配置我习惯选20kHz到40kHz之间太高会增大开关损耗太低会有音频噪声。5.2 发热、噪声和噪音的实际处理电机轻微发热是正常的但如果驱动IC烫到手不能摸先怀疑电流设定是否过高其次检查PWM斩波频率和死区配置。TB67S569FTG这种封装热阻有限必要时可以给芯片底下加散热焊盘和过孔把它连接到PCB的地平面帮助散热。如果PCB空间允许在驱动IC附近留一些铜皮也有助于散热。电机本身的噪音很大程度来自运动曲线。同样速度下直接把CLK频率从0跳到目标值电机会明显啸叫把加减速曲线调缓之后噪音立刻小很多。所以软件加减速不只是防丢步也是降噪的利器。如果你发现电机运行时有规律的高频啸叫还要检查是不是CLK频率和机械结构的共振频率碰上了适当偏移工作频率区间就能避开。5.3 常见故障排查表故障现象可能原因处理方式电机不转CLK有波形使能引脚没有拉高/拉低确认ENABLE逻辑极性电机不转CLK无波形定时器没启动或引脚复用冲突检查GPIO和GPT配置电机只抖动不转CLK频率太高或电流不足降低启动频率调大目标电流电机转向反了相序接反或DIR逻辑反交换任意两相或翻转DIR运行中随机丢步电源去耦不足、电流上限太低加大电解电容提高电流设定上电瞬间电机抖一下MCU启动期间控制脚未初始化先初始化GPIO安全电平再使能驱动半速以下正常高速丢步供电电压偏低电流上升率不够提高VM电压或降低目标转速这张表是我排查问题时的参考路径实际上很多故障是几个原因叠加的要按顺序排除而不是一次猜中。比如电机高速丢步先把电源电压提上去试试再检查加减速斜率最后才查机械卡滞顺序搞反了容易做很多无用功。5.4 三个我反复栽过的坑第一个坑是公共端接法。五相电机如果是星形接法公共端不是随便接GND的要看驱动IC手册。接错公共端后电机转动时电流波形全是尖峰而且噪声奇大。我重新用万用表确认了公共端接入正确位置后一切正常。有些电机的标签画得很含糊最好向供应商要接线定义别靠颜色硬猜。第二个坑是电源地和逻辑地的处理。MCU板的地和驱动板的地必须是完整回路但返回路径上不能串入大电流的功率地噪声。我后来用单点连接的方式让功率地电流不流经MCU的模拟地CLK才稳定下来。这个在原理图阶段就要想好等板子做回来靠飞线救火就很痛苦。如果你的设计里还有ADC采样这个问题会更明显。第三个坑是软件里用了delay函数发脉冲。一开始图省事用循环翻转IO加delay产生CLK结果加速曲线一改脉冲数就不准了。后来全部改成硬件定时器从根上解决了问题。想告诉所有做运动控制的人发步进脉冲这件事一定要交给硬件定时器否则后面做的所有加减速算法都是空中楼阁。硬件定时器虽然配置起来多花一点时间但换来的稳定性和CPU空闲时间非常值得。这套TB67S569FTG加R7KA8D2KFLCAC的方案前前后后调了两周。硬件定型之后软件上的事情其实很少大部分时间花在加减速参数的标定和排查那些“看起来像软件问题”的硬件缺陷上。如果你也正准备用类似的组合做小型步进电机控制建议从一块集成驱动IC的测试板加一颗带硬件定时器的MCU开始先把整个链路跑通再逐步优化细节。这样即使遇到问题也更容易定位是硬件还是软件的锅。
返回列表