ARTICLE DETAIL

资讯详情

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

DRV8818与K60控制双极步进电机:选型、硬件设计到调试全解析

DRV8818与K60控制双极步进电机:选型、硬件设计到调试全解析 工业机器人控制柜里最不起眼却最常被拉出来干活的往往是步进电机。视觉引导平台的升降台、协作机器人旁边的外部轴、分度转台、辅助给料机构到处都有它的身影。只要功率没大到必须上伺服又不想为一套几百瓦的电机投入整套伺服方案步进电机加驱动器就是最务实的选择。我这几年在自动化项目里反复用过 DRV8818PWPR 做主驱动、MK60DN512VLQ10 做主控的组合来控制双极步进电机从选型、画板、写程序到上电调试都摸过一遍。这篇文章就按我做项目的顺序把这个组合里值得抠的细节完整讲一遍给正在搭类似平台的工程师做个参考。1. 项目选型拆解这个“主控 驱动”组合为什么能打1.1 双极步进电机控制的本质电流方向、续流和换相先别急着看芯片手册。要理解 DRV8818 在这个系统里到底干了什么得先明白双极步进电机为什么不能只靠 MCU 的 GPIO 来驱动。双极步进电机一般引出四根线两个绕组各两根分别是 A/A- 和 B/B-。想让转子往前转一步本质上就是控制这两个绕组中电流的方向和大小按顺序给绕组通电换相。全步进是每次励磁一相或者两相半步进是每次在单相和双相之间切换微步进则更进一步把相电流按正弦台阶去拟合让磁场在空间里慢慢旋转。这些动作的载体是两套 H 桥。H 桥本身不难四个开关管而已但实际工程里麻烦的是电流。绕组是一个电感电感电流不能突变换向瞬间必须给续流回路PWM 斩波时还需要检测电流、比较、关断控制电流峰值。如果这些逻辑全放进 MCU等于你一边要跑运动算法一边还要在微秒级响应电流事件完全不划算。驱动芯片的价值就在这里DRV8818 内部已经把这些脏活做完了芯片外只需要一个采样电阻和几个电容MCU 侧只需要送 STEP 脉冲和 DIR 电平。1.2 DRV8818PWPR参数不豪华但每一样都打在需求上DRV8818PWPR 的 PWPR 后缀指的是 HTSSOP-16 封装带 PowerPad 散热焊盘。芯片支持 VMOT 8.2V 到 45V最大输出电流 2.5A 左右适合 NEMA17、NEMA23 这类机器人里常见的两相步进电机。接口是很朴素的 STEP/DIRSTEP 引脚来一个脉冲电机走一步DIR 决定方向主控这边几乎零负担。微步进从全步、半步到 1/16 都有由 MODE0/MODE1/MODE2 三个引脚的电平组合决定。还有 DECAY 引脚可以切换衰减模式这在中高速段对电流波形影响很明显后面调试部分会细讲。很多朋友第一眼会拿它和 DRV8825 比。两者电压电流级别接近DRV8825 支持到 1/32 微步DRV8818 到 1/16但 DRV8818 的低速运行特性在某些场合反而更平顺而且它保留了独立的 VMM 逻辑电源对 3.3V 主控更友好。如果项目对静音、自动降流有更高要求可以考虑 DRV8880 这类带电流自适应和静音优化的芯片但引脚和寄存器习惯要重新适应。我选 DRV8818 的原因很简单电流段够用、接口简单、保护齐全而且它在 TI 的长期供货清单上做产品和做项目都不用太担心停产折腾。1.3 MK60DN512VLQ10主控侧的选择逻辑主控这边MK60DN512VLQ10 是 Kinetis K60 系列里很典型的一颗。Cortex-M4F 内核主频 100MHz带单精度浮点512KB Flash 和 128KB RAM 在这个量级的运动控制项目里非常宽裕。真正的关键在外设K60 的 FTM 模块是 FlexTimer既能输出多路 PWM也能做编码器正交解码。步进电机控制里一个 FTM 通道出脉冲另一个 FTM 通道读编码器正好组成最简单的闭环骨架。网口、CAN、串口、SPI、I2C、USB 也都有跟视觉模块、PLC、上位机对接基本不会缺接口。K60 的 IO 大部分是 3.3V 逻辑而 DRV8818 的 VMM 可以接 3.3V逻辑电平天然匹配不用额外加电平转换芯片。有人会问为什么不用 STM32。说实话STM32 完全能做但项目里既有 K60 的成熟代码库又有团队多年攒下的外设封装换主控的成本远大于收益。芯片选择这件事很多时候团队最熟的那颗就是最优的那颗。2. 硬件设计详解从引脚连接到 PCB 布局的落地经验2.1 DRV8818 的最小系统供电、电流设定与状态引脚DRV8818 的电源分两路。VMOT 是电机电源我习惯按电机额定电压接 24V 或 36VVMM 是逻辑电源接 3.3V 或 5V。两路电源的去耦都要做好VMOT 侧我一般放一颗 10µF 电解电容加一颗 100nF 陶瓷电容位置尽量靠近芯片引脚VCP 是内部电荷泵外接电容的引脚这颗电容不能省按手册在 VCP 和 VMOT 之间放 100nF 到 470nF。电流设定是这板子上最重要的活儿。DRV8818 的相电流峰值由 VREF 引脚电压和 ISEN 引脚的采样电阻共同决定典型公式是 IPEAK VREF / (8 × R_SENSE)。举个例子想要 1.5A 的相电流采样电阻取 0.1Ω那么 VREF 就是 1.5 × 8 × 0.1 1.2V。从 3.3V 分压得到 1.2V 很简单两个固定电阻分压就行。我强烈不建议在机柜里用电位器调电流振动会让阻值漂移低速力矩忽大忽小这类问题现场排查起来非常隐蔽。提示VREF 引脚电压不能超过 VMM上电后先用万用表量一下 VREF 再点电机别靠感觉设电流。状态引脚方面nSLEEP 接一个 GPIO高电平工作时把它拉高需要休眠或复位时拉低再拉高nFAULT 是开漏输出必须通过上拉电阻接到 3.3V再连到 MCU 的中断引脚。MODE0/1/2 和 DECAY 这几个配置引脚不要悬空用跳线、拨码开关或者直接由 MCU 的 GPIO 驱动。悬空引脚内部虽然有默认状态但在工业现场做配置却很容易因为干扰读错电平。2.2 K60 侧接口规划GPIO、FTM 与上电时序K60 这侧STEP 脉冲我放在 FTM 的某一路 PWM 通道上这样脉冲频率由硬件定时器精确控制不受中断负载影响。DIR、nSLEEP 用普通 GPIOnFAULT 接到带外部中断的引脚。分配引脚之前一定要查 K60 参考手册的 AF 复用表确认所选引脚确实有这个 FTM 通道功能而不是看着丝印随便挑一个否则后面只能飞线补救。上电时序也是容易翻车的地方。我一般让 3.3V 逻辑电源先上nSLEEP 在上电初期保持低电平等 VMM 稳定后再拉高唤醒驱动。VMOT 电机电源可以后上也可以同时上关键是不要在 nSLEEP 为低时立刻给 STEP 高频脉冲。芯片从睡眠被唤醒到内部状态就绪需要一点时间唤醒后先等几百微秒到 1ms再从低速开始发脉冲能省掉很多上电卡死的麻烦。STEP/DIR 信号线从 K60 到 DRV8818中间我习惯串一颗 100Ω 电阻作用不是限流而是抑制走线和接口处的反射振铃。驱动器输入端的走线通常有寄生电容过长的线缆还会引入干扰串联电阻加在信号源端可以明显改善波形。小信号线上的地不要和电机电流的地混在一起尽量单点接地。2.3 PCB 布局与散热PowerPad、去耦和走线HTSSOP 封装中间那块散热焊盘焊接质量决定了芯片能扛多大电流。很多板子上的 DRV8818 一上电就过热关断十有八九就是 PowerPad 虚焊。正确做法是把散热焊盘接到 PCB 的地铜皮焊盘下面打一排过孔过孔连接到背面大面积的铜皮有条件的话再把铜皮和机箱地一起做散热路径。过孔孔径别太小焊接时能够让锡充分渗透进去的那种最好。电流路径上VMOT 进、ISEN 采样电阻出这两段铜皮要按电流余量加宽。1.5A 到 2A 的相电流即使在 1oz 铜厚上也别低于 1.5mm采样电阻两端的走线最好从电阻引脚直接连到芯片 ISEN 脚不要在中间打过孔绕路不然采样电阻上的压降会被走线电阻污染电流反馈就不准了。布局顺序我习惯是芯片离电机连接器尽量近VMOT 的去耦电容紧贴芯片引脚控制信号接插件在板子另一侧。STEP/DIR 这类敏感信号下方不要走 VMOT 和 B 之类的大电流线否则板内串扰会让你误以为驱动器坏了。3. 固件与算法实践从输出步进脉冲到加减速曲线3.1 FTM 输出步进脉冲转速换算与最小工程先把最基础的问题解决怎么让电机以指定转速转起来。步进电机每转所需脉冲数 电机固有步数 × 微步数。1.8° 的电机整圈 200 步1/16 微步下就是 3200 步/圈。如果你想让电机每秒转 1 圈STEP 脉冲频率就是 3200Hz想要 60rpm换算下来同样是 3200Hz也就是 1rps。这里的 rpm 和 rps 特别容易看错电机速度差了 60 倍编程时一定要把单位写清楚。K60 的 FTM 产生 PWM 时通道输出频率由计数器的 MOD 值和时钟预分频决定。改变 MOD 值就能改输出频率这正好用来改变步进速度。要注意的是如果 PWM 的高电平宽度由 CnV 决定修改 MOD 时必须同步修改 CnV否则占空比会随频率飘动。对于步进脉冲保持 50% 占空比就够了。下面是一段简化示意代码重点是思路寄存器位定义以你的工程头文件为准// 使能 FTM0 模块时钟具体寄存器位见所用 K60 参考手册 SIM-SCGC6 | SIM_SCGC6_FTM0_MASK; // 进入 FTM 模式关闭寄存器写保护 FTM0-MODE FTM_MODE_FTMEN_MASK | FTM_MODE_WPDIS_MASK; // 通道 0 配置成 PWM 输出 FTM0-CONTROLS[0].CnSC FTM_CnSC_MSB_MASK | FTM_CnSC_ELSB_MASK; // 初始MOD3125CnV1562按 50MHz 时钟、1 分频输出约 16kHz FTM0-MOD 3125; FTM0-CONTROLS[0].CnV 1562; FTM0-SC FTM_SC_CLKS(1) | FTM_SC_PS(0); // 运行中改变速度改写 MOD 和 CnV驱动会按新频率继续输出 void set_step_freq(uint32_t freq_hz) { uint32_t mod (bus_clock_hz / freq_hz) - 1; FTM0-MOD mod; FTM0-CONTROLS[0].CnV mod / 2; }这段代码我会配合一个 1ms 的调度中断来用每隔 1ms 根据当前位置和目标位置计算下一段速度调用 set_step_freq()。方向切换通过另一个 GPIO 完成切换时确保当前脉冲周期内不再有 STEP 上升沿。工程上我会先停脉冲、再切 DIR、再恢复脉冲三步走避免方向竞争。3.2 梯形与 S 形加减速为什么直接拉频率会丢步步进电机本质上是一个同步电机。输入脉冲频率突然从 0 跳到 2000Hz转子根本来不及跟上定子磁场就会丢步甚至完全堵转。丢步不像伺服那样有反馈除了位置错你还未必能立刻发现。所以在工业应用里步进电机必须配加减速曲线。最常见的梯形加减速加速阶段频率线性上升匀速阶段保持最大速度减速阶段线性下降刚好在目标位置把速度降到 0。工程实现上我倾向于在初始化时预计算一张查找表表里存的是每个控制周期该用的频率值或者定时器重载值。运动过程中中断里只做查表和更新不现场算浮点。100MHz 的 Cortex-M4F 算这点东西当然没问题但查表法更容易控制时序抖动而且调参时只需要改表的内容。S 形曲线对机器人的意义更大。梯形曲线的加加速度是无限大起点和终点会有加速度突变机械上表现为启停瞬间的冲击和共振。S 形曲线把加加速度也做了平滑低速启停的过程会柔和很多。对于视觉引导平台这种需要稳停拍照的场景S 形曲线带来的图像抖动改善是肉眼可见的。没有现成库的话可以先做梯形再把每一段的加速度边界用正弦斜坡过渡一下效果就很接近 S 形了。这块我给个很简单的示意// 伪代码示意定时器中断里按当前加减速阶段更新步频 // accel_table[] 为预计算的速度表例如保存每个周期的步频 void step_scheduler_isr(void) { switch (motion.phase) { case ACCEL: if (motion.table_idx motion.accel_len) { set_step_freq(accel_table[motion.table_idx]); } else { motion.phase CRUISE; } break; case CRUISE: if (--motion.remain_cruise_ticks 0) { motion.phase DECEL; motion.table_idx motion.decel_start_idx; } break; case DECEL: if (motion.table_idx 0) { set_step_freq(decel_table[--motion.table_idx]); } else { set_step_freq(0); motion.completed 1; } break; } }最后提醒一句减速段必须在步数上预留准确。常见错误是加速表很长减速距离算少了电机冲过目标位置又反向找补机械上非常难看。我习惯在规划阶段先算减速距离不够就提前进入减速确保位置一到位就停稳。3.3 微步进、电流与衰减模式没写在手册里的取舍微步进档位不是越高越好。1/16 微步下位置分辨率变成 0.1125°听起来很好但微步只是把电流按台阶细分单步产生的电磁转矩其实比全步小很多。如果机械负载偏重过高的微步档会表现为定位不稳、丢步这时候降回 1/8 反而更可靠。我的习惯是需要平稳运动又带负载时用 1/16追求定位可靠和输出扭矩时用 1/8。再说电流设定。电机绕组的额定电流是最重要的参考设定电流超过额定值电机铁损和铜损都会上升发热明显外壳摸上去烫手时内部温度往往已经远超你想象设定电流过低力矩不足一到加减速就丢步。我一般把电流设在额定值的 90% 到 100%然后配合温度测试调整。如果一台步进电机长期工作在静止锁相状态相电流一直开着发热是最大的敌人。DRV8818 没有内置的自动降流功能但可以做一个很简单的硬件配合VREF 引脚用两路分压电阻正常运转时接入较高电压静止超时后用 GPIO 切换到 1/2 甚至更低的分压让电流降下来。切记降流会降低保持力矩机器被外力推动时是否可接受要结合应用场景判断。衰减模式呢DECAY 引脚选择慢衰减或混合衰减影响的是 PWM 斩波时电流下降的方式。简单说慢衰减在中低速时电流纹波小、运行更安静但高速大电感时电流跟踪不上混合衰减在高速时更跟手但噪音会明显一点。具体哪个好和电机电感、供电电压、转速都有关系我不太相信只看手册选出来的结论一般会在示波器里看 ISEN 电流波形再定。调完之后噪音小、温升可接受、连续跑一两个小时不丢步就说明这个组合算调出来了。4. 现场调试实录常见故障、保护机制与干扰排查4.1 电机不转、抖动、卡死的排查顺序上电调试阶段最容易碰到的问题无非这几种完全不转、原地抖动、转几圈卡死、有转速没力矩。先说完全不转。这时候先用示波器量 STEP 引脚看有没有方波再看 DIR 电平是否稳定、nSLEEP 是不是高电平、VMOT 电压有没有掉下去。很多所谓不转的板子其实是 nSLEEP 一直被 GPIO 拉低或者 VMM 没上电。原地抖动是最经典的接线错误。A 相绕组和 B 相绕组没接错但 A 和 A- 反了或者 B 和 B- 对调电机就会在每个整步上前后拉锯看起来就是高频抖动。另一个常见原因是电流设得太小VREF 电压偏低电机力矩不足以推动负载。先不看驱动配置直接把负载拆下来空载测试如果空载能转、带载就抖基本就是电流问题。转几圈卡死往往和加减速有关。频率起点太高或者加速度太快转子失步后停在某个位置再继续发脉冲只会振动。你可以把目标速度降一半试试如果转得更多基本可以断定是加减速规划太激进。另外电源也会有影响VMOT 电压在启动瞬间被拉垮驱动芯片检测到欠压会停止输出。这时候用示波器看 VMOT 波形能看到明显跌落。这里给一个通用排查顺序先量电压再量波形先空载再带载先低速再高速。不要一上来就怀疑芯片大部分情况下问题都在前级。4.2 读懂 nFAULT过流、欠压和热关断的区分DRV8818 的 nFAULT 引脚一拉低说明芯片检测到了异常。异常有三种过流 OCP、欠压 UVLO、过热 TSD。区分方法靠观察和测量。过流多数发生在堵转、绕组短路、或者电流设定电阻莫名其妙变大之后nFAULT 会周期性拉低再恢复伴随电机电流波形突变。欠压则要看 VMOT 和 VMM 两路电压用示波器触发在 nFAULT 下降沿上往回找几百毫秒通常能看到 VMOT 掉到阈值以下。过热最直观用手摸或者用热成像看芯片中央比周围明显高出一截。工程上我会在 nFAULT 中断里做一件事先把运动状态机停下不再发新的 STEP 脉冲同时记下故障类型和故障时刻的时间戳。如果是欠压等待电源恢复后自动恢复如果是过流降低目标电流上限再重启如果是过热必须等芯片温度降回来再工作否则反复热关断对封装内部应力也不友好。这里有个很容易被误解的地方堵转时看到 nFAULT 拉低其实是保护在工作不是芯片坏了。测试阶段故意堵住电机验证保护逻辑是好事但不要在一次堵转后立刻反复触发芯片温度会累积。恢复流程我一般这么写拉低 nSLEEP 让芯片进入睡眠复位内部状态等待几十毫秒再拉高完成唤醒重新配置 MODE 和 DECAY然后从低速开始恢复运动。4.3 工业现场的干扰、线缆与散热设备进到现场之后问题从功能故障变成了稳定性和干扰。步进线缆一长寄生电容会让 STEP 信号的边沿变圆严重时驱动芯片数不到上升沿出现一个脉冲走两格或者丢脉冲的现象。办法就是在驱动器入口处加 RC 滤波100Ω 串联电阻加 1nF 对地电容是比较常见的组合如果线缆超过两米信号源端的串联电阻可以适当加大到 220Ω。电源和地是另一个大坑。电机驱动瞬间电流变化快会在公共地线上砸出噪声这个噪声一旦耦合进 STEP/DIR 信号位置就会随机漂移。我做的板子上信号地和功率地是单点连接的电机电缆和信号电缆分开走线屏蔽层的处理也讲究两端都有接地电位差时双端接地会形成地环路反而更糟现场一般单端接地就够了。散热问题在机柜里会被放大。步进电机本身是发热大户驱动芯片贴着电机电缆机柜风道不合理时热量会堆积在控制板附近。有条件就提前做个热设计检查用热成像测芯片温度长时间运行不超过 85°C 比较稳。如果温度超标优先看电流有没有设得过高、静止锁相有没有降流、散热焊盘是否虚焊而不是盲目加风扇。5. 工程复盘几个让我加班的细节和后续扩展方向5.1 我踩过的两个硬件坑这节不写技术总结写几个真实翻车现场。第一个坑是 VREF 用电位器。当时图方便在板上放了一颗多圈电位器调电流产线上跑了一阵之后客户反馈低速运动时力矩时大时小。排查了半天最后发现是机柜振动让电位器触点阻值漂了。后来我把电位器去掉改成固定比例电阻分压这个问题再也没有出现过。第二个坑是 PowerPad 虚焊。有一块板子一上电就热保护芯片表面测到 100°C 以上但电路连接看起来都正常。后来用热成像仪一看热点集中在芯片正中央典型散热焊盘没焊上的表情。把板子重新过炉、补焊散热焊盘之后恢复正常。从那以后我在投产之前都会把样板放到烘箱或者负载下跑半小时专门验证散热。第三个坑关于信号完整性也一起说了。STEP 线走了两米多机上抖动导致偶发多脉冲位置误差随机出现。一开始以为是算法问题后来用示波器在驱动器端看到严重的振铃在源端加 220Ω 电阻搞定。这件事给我的教训是先看波形再改软件别一上来就怀疑定时器精度。5.2 还能往哪走闭环、多轴与静音方案这套组合继续往下走有几个很现实的方向。闭环化是第一步K60 的 FTM 正交解码模块可以直接接增量编码器在原来开环位置控制的基础上加一个简单的比例积分位置环把丢步检测出来并纠正。机器人外部轴这类对定位一致性要求高的应用闭环比盲目提高电流更有效。多轴化也很自然。K60 有多组 FTM每组多个通道带两三个 DRV8818 完全可行。分度转台加直线轴的组合用一片 K60 就能完成总成本比每轴一个运动控制器低不少。要注意的是多轴同时加减速时电源余量要重新核算两个电机同一时刻拉电流24V 电源很容易被拖垮。如果对静音有要求或者电机长时间低速运行DRV8818 的 PWM 噪音就可能暴露出来。这时候可以考虑换成带自动电流调节和静音优化的驱动芯片比如 DRV8880 或者 TMC 系列逻辑上仍然是 STEP/DIR软件改动不大。但换芯片之前建议先试衰减模式和微步进组合很多时候不需要换硬件把电流波形调顺了噪音就下去了。最后再说一个我个人觉得比较实用的小习惯在工程里把每台电机的额定电流、绕组电感、微步进档、目标速度这些参数做成结构体和硬件版本号一起存起来。现场出了问题先看版本再查代码而不是凭记忆调参。这样一套组合用下来稳定性和可维护性都会提升不少。
返回列表