ARTICLE DETAIL

资讯详情

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

双极步进电机驱动实战:DRV8818与PIC18LF45K80方案全解析

双极步进电机驱动实战:DRV8818与PIC18LF45K80方案全解析 在产线设备和机器人关节里双极步进电机到现在依然是最实在的运动执行元件之一结构简单、扭矩大、不开环也能定位配合合适的驱动芯片就能做到非常稳定的控制。最近在做一个输送分拣设备的横轴模组时我搭了一套 DRV8818PWPR 加 PIC18LF45K80 的方案前者是一颗 45V/2.5A 的双 H 桥步进驱动 IC内置电流检测和最高 1/32 微步进后者是带 ECAN 模块的 PIC18 单片机负责发 STEP/DIR 脉冲、跑加减速曲线顺带通过 CAN 总线跟主 PLC 通信。这套组合从打样到小批量跑了半年中间踩了不少坑这篇把硬件设计、固件实现和调试过程完整梳理一遍给准备在工业或机器人项目里用这两颗芯片的人一份可以直接参考的资料。1. 先想清楚选型逻辑这套方案到底解决了什么问题1.1 工业现场的步进驱动到底难在哪很多人习惯从 Arduino 套件里拿一块现成的步进驱动模块直接插在面包板上用。但工业设备完全不是这个玩法母线电压常见是 24V、36V 甚至 48V电机线动辄两三米现场还有变频器、接触器、伺服驱动器在旁边高频开关电磁环境相当恶劣。在这种场景下驱动方案要满足几个硬指标供电宽压且有足够余量、电流可调节以适应不同规格电机、支持微步进以降低低速振动和噪音、具备过流/过温/欠压保护、能跟 PLC 或上位机组网。双极步进电机本身是四线两相结构每一相都需要一个 H 桥来切换电流方向两个 H 桥至少八个功率管还要处理死区、续流、电流采样用分立器件搭这套东西的工作量非常大。所以结论很直接集成驱动芯片是唯一理性的选择。DRV8818 这类器件把双 H 桥、电流斩波、微步进细分、保护逻辑全部装进一颗芯片MCU 只需要提供 STEP 脉冲和 DIR 电平软件负担被压到最低。1.2 DRV8818 和 PIC18LF45K80 各自的定位先说 DRV8818PWPR这是 TI 的步进驱动芯片HTSSOP-28 封装PWP 后缀就是 PowerPAD 版本。核心参数我列一下供电电压 8.2V 到 45V覆盖 24V/36V 工业母线峰值输出电流 2.5A对大多数 42/57 步进电机够用内置电流检测不需要外部分流采样电阻BOM 上直接省掉两个大功率电阻固定关断时间 PWM 斩波恒流电流阈值由 VREF 引脚设定微步进最高 1/32由 AD0/AD1/AD2 三个引脚选择带 nFAULT 故障输出、过流保护、热关断、欠压锁定STEP/DIR 接口MCU 端极其友好再说 PIC18LF45K80。它是 Microchip 的增强型 PIC1840 引脚32KB Flash、3.6KB RAM、1KB 数据 EEPROM最高能跑到 64MHz。这颗芯片最大的亮点是内置 ECAN 模块支持 CAN 2.0B对于把每个运动轴变成工业总线节点这件事来说非常合适。LF 后缀代表低电压版本1.8V 到 3.6V 供电正好和 DRV8818 的数字接口做 3.3V 逻辑对接。这两颗芯片天然互补MCU 做规划和通信驱动芯片做功率和电流控制分工清楚。用低电压 MCU 的好处是数字电路部分和功率电路部分的电源域容易分隔抗干扰设计会好做很多。1.3 系统分工与数据流整个系统的数据流是这样的PLC/上位机 --CAN-- PIC18LF45K80 --STEP/DIR-- DRV8818 --A/A-/B/B-- 双极步进电机PIC 侧负责四件事运动规划目标位置、速度、加减速曲线、STEP 脉冲生成、电流档位与状态管理读 nFAULT、急停、限位开关、CAN 协议解析与回复。DRV8818 负责电流斩波、微步进电流分配、功率输出和自身保护。PIC 完全不碰功率电流环这是刻意的。如果把电流采样和斩波控制做进 MCU 中断里电源噪声会直接干扰模拟部分而且 MCU 的中断负载会爆炸。驱动芯片内置的模拟恒流环是实时的比用软件模拟强了一个数量级。2. DRV8818 功率级硬件设计把 45V/2.5A 做得稳2.1 电源与去耦母线电容和陶瓷电容到底放多少DRV8818 的 VM 引脚必须看到一个低阻抗的电源。步进换相时母线电流是脉冲状的频率等于斩波频率如果 VM 引脚旁边没有足够的储能电容电源电压会被瞬间拉出很大的纹波电流波形跟着畸变丢步和噪音都会来。我的做法是驱动板靠近 VM 输入的位置放一颗 100µF/50V 电解电容另外每个 VM 引脚旁边放一颗 100nF、耐压 50V 的 X7R 陶瓷电容。陶瓷电容负责吸收高频毛刺电解电容负责提供瞬态电荷。实测在 24V 母线、峰值电流 2.0A 的情况下没有大电解时 VM 纹波能到 1V 以上换成 100µF 之后纹波压到 200mV 左右。还有一处非常容易栽跟头电荷泵电容。DRV8818 需要给高侧栅极驱动做升压CP1 和 CP2 引脚之间要接一颗电荷泵电容典型值是 0.22µF。这颗电容必须紧贴芯片引脚走线越短越好。如果电机出现嗡嗡叫但轴不转或者高侧波形缺失的现象第一个怀疑对象就是它。2.2 电流调节VREF 怎么接怎么算DRV8818 的斩波恒流原理一句话就能说清芯片内部实时比较 VREF 电压和桥臂电流的检测量电流达到阈值就关断高侧等待一段固定关断时间后再重新导通如此反复把相电流斩在一个平均值附近。VREF 的来源我推荐两种方案。简单方案是电位器分压适合固定电流的场合。灵活方案是用 PIC 的 PWM 输出加 RC 滤波得到一个可变的模拟电压PWM 频率取 20kHz 左右滤波用 10kΩ 电阻加 10µF 电容时间常数大约 47ms电机电流是热惯性系统这个响应速度完全够用。这样固件就可以在运行中动态切换电流档位。电流值怎么定第一参考是电机铭牌上的额定电流峰值电流设在额定值的 100% 到 120% 比较稳妥。注意一个常识芯片额定 2.5A 不代表你可以一直在 2.5A 跑还要看散热条件。VREF 电压和实际峰值电流之间的对应关系最靠谱的做法是上电后用电流探头夹住相线实测标定不要只看理论换算。动态电流策略我是这样处理的上电自检阶段 50% 电流运行时 100% 电流到位保持阶段降到 60%。保持阶段不需要大扭矩降流能显著减少发热和电机噪音这是工业设备长时间待机场景里的必备操作。2.3 微步进档位与衰减模式的选择DRV8818 的 AD0/AD1/AD2 三根引脚组合出六七个档位从全步进到 1/32 微步进。我在 1.8° 步距角的 57 电机上总结了一张对照表步进模式单步角度每圈步数典型用途全步进1.8°200高速大扭矩、对振动不敏感半步进0.9°400早期低速应用1/4 微步进0.45°800兼顾速度与平滑度1/8 微步进0.225°1600多数设备常用档1/16 微步进0.1125°3200低噪音、高精度定位1/32 微步进0.05625°6400极致平滑、MCU 负担高微步进为什么能降振因为步进电机在整步激励时转子从一个平衡点跳到下一个平衡点惯性会引发振荡细分之后每步转子只需要转过很小的角度激励电流又是正弦阶梯逼近机械冲击小得多。1/16 微步进在我做的输送设备上已经足够安静1/32 更多用在精密定位场合。衰减模式这里要重点说。固定关断时间斩波里关断期间电流通过续流回路衰减衰减速度由 DECAY 引脚选择。慢衰减模式电流纹波小、电机和芯片发热少适合中低速但因为电流衰减太慢高速时相电流可能跟不上反电动势导致转矩暴跌。混合衰减模式在关断初期先快衰减再转慢衰减高速性能好得多。我的经验是低速应用优先慢衰减转速超过电机额定转速的 60% 就切混合衰减。怎么判断示波器看相电流波形电流锯齿的峰值是否还能稳定顶在设定值附近顶不住就是衰减模式选错了。2.4 热设计PowerPAD 焊接与 PCB 布局DRV8818 的 PWP 封装底面有一个大焊盘它同时承担电气接地和散热两个职责。这颗芯片能不能稳定输出 2A 连续电流几乎完全取决于 PowerPAD 有没有焊好。PCB 上必须在芯片底部的铜皮开窗把 PowerPAD 焊接到大面积的接地铜皮上并且在地铜皮上打一排散热过孔把热量导到背面和中间层。我实测过24V、2A 连续运行 30 分钟散热良好的板子芯片外壳温升能控制在 60℃ 左右PowerPAD 虚焊的板子同样的工况温升会高出十几度甚至直接触发热关断。布局上记住一条功率回路原则VM 输入接插件到电解电容到芯片 VM 引脚到输出接插件这条路径上的走线要短、宽、直功率电流不要绕圈。STEP/DIR 这些数字信号线远离输出走线别跟 A/A- 平行跑太长距离。MCU 和驱动芯片之间如果空间够我建议在两者之间的地铜皮上留一道隔离带必要时还可以用磁珠把数字电源和功率逻辑电源分开。3. PIC18LF45K80 固件脉冲生成和梯形加减速的实现3.1 三种生成 STEP 脉冲的做法PIC 要干的最核心一件事就是产生精确的 STEP 脉冲。有三种常见做法。第一种是 GPIO 加软件延时翻转只在转速很低、一个轴都嫌多的时候用。转速一高CPU 全耗在空转延时上其他任务全被拖死。第二种是定时器中断翻转这是我最常用的方案。定时器计满一次就进中断在中断里翻转 STEP 引脚再装载下一个周期的定时值。PIC18LF45K80 的 16 位 Timer1 在 64MHz 系统时钟下指令周期 16MHz定时分辨率 62.5ns产生几赫兹到几十千赫兹的步进脉冲都绰绰有余。第三种是 ECCP 模块的 PWM 输出固定频率方波。这个方案适合匀速运动频率不需要变化的时候非常省心但一旦要加减速PWM 周期寄存器需要不断改写反而没有定时器中断灵活。我在实际代码里直接用定时器中断核心逻辑大概是这个样子// XC8 编译器PIC18LF45K80 void Timer1_Init(void) { T1CON 0b00000001; // 16位定时器1:1 预分频内部指令时钟 TMR1 MOTION_INIT_PERIOD; // 初始周期 PIE1bits.TMR1IE 1; // 使能 Timer1 中断 INTCONbits.PEIE 1; INTCONbits.GIE 1; STEP_TRIS 0; // STEP 引脚方向设为输出 DIR_TRIS 0; } void __interrupt() T1_ISR(void) { STEP_PIN ~STEP_PIN; // 翻转 STEP if (motion.remaining_steps 0) { motion.remaining_steps--; if (motion.remaining_steps 0) { STEP_PIN 0; // 到位停止脉冲 motion.state MOTION_IDLE; } else { TMR1 motion.next_period; // 装载下一周期 } } PIR1bits.TMR1IF 0; // 清中断标志 }注意 PIC18 的 16 位定时器装载顺序先写高字节再写低字节XC8 编译器会把对 TMR1 的 16 位赋值自动处理成正确顺序但如果你手工分字节写别搞反了否则会多跳一个错误周期。3.2 梯形加减速丢步的克星步进电机有一个天生的毛病启动频率有限。你直接给它一个高频脉冲串转子根本反应不过来第一拍就丢步然后整个位置全错。所以运动控制里几乎必须做加减速。最实用的是梯形曲线加速段、匀速段、减速段。电机从低速启动逐步加速到目标速度快到目标位置之前逐步减速最后稳稳停在目标点。减速点必须在运动开始前就算好不能等到撞线了才想起来。实现上我推荐查表法把加速过程切成若干档每一档对应一个脉冲周期每走固定步数升一档。比如从 200Hz 升到 4000Hz分成 50 档每走 5 步换一档速度就是近似线性上升。查表比递推公式更容易理解和调试代码出现问题的概率也低。加速段的档位表和减速段的档位表是同一个表只是顺序反过来。PID 不用上梯形曲线加合适的电流就能覆盖绝大多数步进应用。加速度设置多少合适要靠实测跑一次最大负载下的启停听不到咔咔打齿声、位置计数不丢就是合适的。标定完之后我习惯在固件里留 20% 的速度余量毕竟现场负载和实验室不完全一样。3.3 方向切换、使能和 nFAULT 联动DIR 电平决定旋转方向看起来简单但有个细节DIR 信号最好在 STEP 的低电平期间切换。如果 DIR 刚好在 STEP 上升沿附近变化驱动芯片内部有可能采到不确定值表现为偶发走反一步。稳妥做法是先改 DIR延时 1 到 2 微秒再发 STEP 脉冲。nFAULT 是开漏输出正常是高电平故障时拉低。这颗信号必须接 PIC 的外部中断引脚比如 INT0。故障中断里要做三件事立即停止脉冲生成、把当前状态锁存到错误标志、通过 CAN 上报。注意 nFAULT 拉低后要先清除故障源再重新使能不能盲目恢复。限位开关和急停的处理优先级更高。硬件急停信号直接接到 PIC 的另一个中断引脚同时建议用继电器硬切 EN 引脚或 VM 电源软件只管上报状态。急停之后必须重新回原点这个逻辑要在固件里锁死防止操作人员误以为当前位置仍然有效。3.4 通过 ECAN 把每个轴变成总线节点PIC18LF45K80 的 ECAN 模块是这颗 MCU 的杀手锏。工业设备里每个轴如果都拉一堆并行信号线到 PLC布线成本和故障率都很高。CAN 两条线就把所有轴串起来每个轴一个节点 ID命令和数据都走总线。ECAN 配置不复杂选好波特率我常用 500kbps配置收发器使能设置接收滤波器和屏蔽寄存器再开中断。3.3V 的 PIC 需要配一颗 CAN 收发器比如 Microchip 的 MCP2562它和 3.3V 逻辑直接兼容。总线两端各放一个 120Ω 终端电阻线用双绞屏蔽线。协议可以做得非常轻量主站和从站的报文就几种报文 ID方向内容0x201主站→从站目标位置0x202主站→从站速度/加速度档位0x203主站→从站电流档位/急停0x281从站→主站当前位置/状态0x282从站→主站故障代码一个重要的设计原则CAN 报文解析放在主循环STEP 脉冲生成放在中断里。中断里只消费运动参数绝不做协议解析和字符串处理否则脉冲时序会被拖累。4. 现场的坑从现象到根因的完整排查4.1 电机嗡嗡叫、轴纹丝不动打样回来后第一次上电就遇到24V 供上程序跑起来STEP 引脚有波形但电机只是嗡嗡响转子一点都不动。排查链路是这样走的先示波器量 STEP 引脚脉冲正常量 DIR电平正常量 VM24V 稳定最后量电机相线发现 A 相几乎没有电流。那时候我怀疑对象集中到电荷泵上——因为 DRV8818 的高侧栅极驱动要靠电荷泵抬压电荷泵没工作高侧 MOS 管根本打不开电机当然动不了。再查 CP1 和 CP2发现电荷泵电容的位置放得太远走线绕了小半块板子而且焊盘上电容有点翘。把电容挪到紧贴芯片的位置重新焊接后电机立刻正常转动。这个坑的教训是电荷泵电容不是随便接个电容就行它的位置和引脚走线长度直接影响驱动芯片能不能正常输出。4.2 高速丢步、咔咔响设备调试到高速段时电机转速超过某个阈值就开始咔咔响位置计数也在丢。用示波器看相电流波形发现高速时电流锯齿的峰值明显顶不上去三角波变成了细小的锯齿这说明斩波恒流环喂不饱电机。这里有两个根因。一个是衰减模式不对慢衰减模式下关断期电流衰减太慢高速时一个斩波周期内的平均电流跟不上切到混合衰减后明显好转。另一个是母线电压不够高速时电机反电动势增大加在绕组上的有效电压 VM 减去反电动势电压余量小了电流上升率就低。解决方法是把 VM 从 24V 提到 36V同样的电流设定下高速扭矩明显回升。记住这个规律高速丢步时提 VM 电压往往比加大电流更有效。4.3 静止时偶发位移STEP 信号抗干扰问题设备停在那边不动隔几分钟位置偶发偏移一两步。这种偶发问题是最讨厌的。用示波器长时间抓 STEP 引脚终于抓到一次没有任何驱动的情况下STEP 线上出现了一个毛刺幅度刚好超过驱动芯片的高电平阈值。追查走线发现 STEP 信号在 PCB 上和电机 A 相输出线平行跑了差不多十厘米功率线上的开关噪声耦合过来了。处理办法三步走STEP 串一颗 220Ω 电阻靠近 DRV8818 引脚处加一颗 1nF 对地电容组成低通滤波把 STEP/DIR 走线换层和功率输出线垂直交叉电机线换成双绞线并缩短路径屏蔽层单端接机壳。改完之后毛刺彻底消失。STEP 这类信号线看着是低速数字信号但在强干扰环境下它和有源传感器信号一样需要认真对待。4.4 单片机偶发复位与看门狗误报第二个偶发问题更玄PIC 偶尔复位错误计数刷新。查了一圈最后用示波器量 MCU 的电源引脚发现电机启动瞬间有一个几百微秒的跌落刚好跌破了 LF 版本的复位阈值。问题的根源是功率电路和 MCU 共用电源入口电机一拉大电流母线电压瞬态跌落传导到了 MCU 电源轨。解决方法是把 PIC 的电源用一个磁珠加 LC 滤波独立出来同时把 MCU 旁边的储能电容从 10µF 加到 47µF。如果负载电流再大就得考虑独立的 DC-DC 单独给 MCU 供电。工业设备里单片机莫名复位很大比例都是电源瞬态问题别急着怀疑看门狗配置。4.5 热关断提前触发PowerPAD 虚焊小批量焊了二十块板子有三块跑 2A 电流二十分钟左右 nFAULT 就拉低芯片热关断。拆下来看三块都有一个共同点底面散热焊盘没有完全焊接到位。PowerPAD 封装对回流焊的要求比普通封装高钢网开窗、焊膏量、回流曲线都会影响焊接质量。解决措施PCB 底部焊盘开窗尺寸按芯片手册的建议做钢网开窗多开几个小窗而不是一个整窗保证排气贴装压机压力要够回流后用 X-ray 抽检。处理好之后同样的工况芯片温度下降了十几度热关断再没出现过。5. 实测数据与下一步扩展5.1 实测对照微步进、电流、温度与噪音我把这套方案在一台 57 步进电机上做了完整的实测环境温度 25℃VM 24V样机为输送线横轴模组负载约 2kg。数据大致如下微步进档位步进速率等效转速运行电流芯片壳温噪音感受全步进1kHz约 300rpm1.5A52℃明显振动低频嗡嗡声1/44kHz约 300rpm1.5A50℃振动明显减小1/88kHz约 300rpm1.5A49℃可接受1/1616kHz约 300rpm1.5A48℃安静适合多数场景1/1630kHz约 560rpm1.8A66℃电机噪音为主同一转速下微步进档位越高、振动越小这是细分电流逼近正弦的功劳。但要看到另一面1/16 微步进跑 300rpm 时步进频率已经到 16kHz占用的定时器中断频率不低所以档位不是越高越好够用就好。壳温的变化趋势说明微步进对芯片发热影响不大真正决定温度的是电流和转速。5.2 这套方案还能怎么扩展往多轴方向扩展时CAN 的优势就完全体现出来了。每个轴一张驱动板一个 CAN 节点 ID主站广播一条同步启动命令各轴本地执行自己的轨迹多轴联动不需要额外的同步线。如果项目从开环升级到闭环可以在电机尾部加编码器用 PIC 的 SPI 或定时器接口读取在固件里做简单的位置修正比如发现丢步就补偿一步。PIC18LF45K80 的引脚和定时器资源是够的但要注意闭环算法别塞进 STEP 中断里会让脉冲时序抖动。再进一步可以把电流规划做得更细用 PIC 的 12 位 ADC 实时采样母线电压和温度动态调整 VREF 的 PWM 占空比。这样母线电压跌落时自动降流避让芯片温度偏高时自动限流设备的鲁棒性会有明显提升。5.3 给准备上这套方案的人几个实操建议最后说几个自己反复受益的小习惯。第一PCB 丝印层上把 AD0/AD1/AD2 的跳线组合和对应的微步进档位直接印出来现场改档位时不用翻图纸。第二VREF 测试点一定要留调试电流环时示波器探头直接勾不用找地方下针。第三出厂前把电流档位、微步进档位、加速度参数写进 PIC 的数据 EEPROM现场换电机或者改工况时通过 CAN 配置就能调整不用重新烧录。这套 DRV8818PWPR 加 PIC18LF45K80 的架构我已经在多个项目里复用从单轴模组到多轴输送线都能稳定跑希望这篇记录能让你少走几趟弯路。
返回列表