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

资讯详情

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

基于DRV8818与PIC24F的双极步进电机驱动方案:从硬件设计到固件调试

基于DRV8818与PIC24F的双极步进电机驱动方案:从硬件设计到固件调试 工业设备里最常见的一类执行器就是双极步进电机。最近我在一套小型机器人多轴运动平台上用 DRV8818PWPR 配合 PIC24F16KA102 做了一版双极步进电机驱动方案从画板、写固件到现场调通花了不少时间。今天把整套方案的选型思路、硬件参数、固件实现和调试笔记整理出来给正在做类似工控或机器人项目的朋友一个可直接参考的模板尤其是那些想把步进电机控制做得更稳、更省心、又不想动不动就上伺服方案的场景。这套组合最实际的定位是中低功率、24V左右供电、电流需求在 1A 上下的丝杠、皮带、转塔、分度盘等执行机构。它解决的问题很具体——MCU 只负责生成 STEP/DIR/ENBL 三线脉冲信号DRV8818PWPR 负责功率驱动、电流斩波和微步进细分两者配合之后电机运动噪声小、发热可控、堵转和过流有保护维护成本比自搭分立 H 桥低得多。下面按我实际落地的顺序来写先讲为什么选这套硬件再讲电路和参数计算然后是固件的几个关键点最后把调试时踩过的坑列出来。1. 项目整体设计为什么是“MCU 专用驱动芯片”的组合1.1 为什么不能直接用 MCU 的 IO 驱动步进电机很多人第一次做步进电机控制时第一反应是“IO 输出高低电平控制电机线圈通电顺序不就行了吗”。原理上确实如此但实际操作中很快会遇到几个坎。双极步进电机的一相绕组通常需要几百毫安到一两安的电流而 MCU 的 GPIO 输出能力普遍只有几毫安电机的线圈是感性负载关断瞬间会产生很大的反向尖峰电压直接打在 IO 上很容易把引脚烧掉。再加上电机额定电压和 MCU 的供电电压往往不是同一个电压域电平转换、吸收反峰、限制电流这些事情堆在一起电路复杂度就上去了。所以工程上更合理的做法是让 MCU 只干它擅长的事——产生脉冲和方向信号把功率放大的脏活累活交给专用的步进驱动芯片。DRV8818PWPR 内部集成两个 H 桥正好对应双极步进电机的 A、B 两相绕组内置电流检测和 PWM 电流斩波电路外部只需要一个采样电阻和一个参考电压就能设定电机电流。这样一来MCU 侧的代码不需要关心电流闭环只需要按目标位置和速度往 STEP 引脚上送脉冲驱动芯片自动把电流限制在设定值附近这对工业现场和机器人平台的稳定性来说非常关键。1.2 DRV8818PWPR 和 PIC24F16KA102 的角色分工DRV8818PWPR 是 TI 的双极步进电机驱动器工作电压上限可以到 50V峰值输出电流在 1.6A 这个级别。相比常见的 A4988、DRV8825 这类模块它最大的优势是支持更丰富的衰减模式和微步进配置而且在 24V 工业供电场景下不需要再降压直接吃 VM 电源就行。芯片内部还带一个小的稳压器可以用来给驱动芯片的逻辑侧供电省一组独立电源。PIC24F16KA102 是 Microchip 的 16 位超低功耗 MCU16KB 闪存、1KB RAM外设虽然不多但有一个很实用的输出比较模块OC和引脚重映射功能PPS。这意味着 STEP 脉冲不需要占用 CPU 去翻转 GPIO可以靠定时器和 OC 模块硬件生成CPU 余量留给加减速计算和逻辑处理。而且这颗芯片工作电压范围宽、工业温度范围内稳定很多老牌工控设备里都能看到影子供应链上比较稳妥。1.3 这套方案适合哪些现场从我实际做过的项目来看这套方案最适合下面几类场景一是轴数不多但要求可靠性高的中小型设备比如三轴点胶机、送料机构、小型机械臂的关节二是需要多级速度切换和加减速控制的场合因为 DRV8818 的微步进和衰减模式可以显著降低电机在低速段的振动三是供电环境是 24V 或 36V 的工业总线供电系统不需要为了驱动芯片单独做一路低压电源。它的短板也很明确1.6A 的峰值电流决定了它不适合大扭矩、大惯量的负载像重型机床进给轴或大型机器人关节还是得上带闭环的伺服或者更大电流的驱动器。另外DRV8818 的微步进最高到 1/8 步如果客户明确要求 1/16 或 1/32 细分来追求更平滑的运动那就得换 DRV8825 或者更高端的片子。所以选型时先量好负载扭矩和最高转速再回来选驱动芯片不要只盯着“能转”就上。2. 硬件连接与核心参数设计2.1 最小系统连接方案我用的驱动板接线可以简化成一张表方便后面照着连线信号从 PIC24F16KA102 引出到 DRV8818PWPR说明STEP任意可重映射 IO例如 RP0STEP 引脚上升沿触发一步DIR普通 IO例如 RA0DIR 引脚控制电机方向ENBL普通 IO例如 RA1ENBL 引脚使能/关闭输出VREF3.3V 经电位器分压VREF 引脚设定满量程电流ISENSE不接ISENSE 引脚对地接采样电阻电流检测VM24V 电源VM 引脚电机电源输入AOUT1/AOUT2、BOUT1/BOUT2不接对应接电机四根线电机绕组输出PIC24F16KA102 的 PPS 功能很实用STEP 信号不需要死磕某一个固定引脚在代码里把 OC 模块映射到任意支持 PPS 输出的引脚即可布线时方便很多。DRV8818 的逻辑侧电平兼容 3.3V和这颗 PIC 的 I/O 电平直接对接就行不需要电平转换电路。电源部分建议分两路处理MCU 用独立的 3.3V LDO 供电VM 直接用工业 24V 电源。DRV8818 的 VM 引脚旁边至少要放一个 100μF 电解电容和一个 100nF 陶瓷电容电解电容用来扛电机加减速时的电流冲击陶瓷电容滤高频噪声。两个电容都必须尽量靠近 VM 引脚如果放远了负载突变时可能会在 PCB 走线电感上产生尖峰严重的时候会触发芯片的过压保护。2.2 电机电流设定VREF 与采样电阻的计算双极步进电机是电流型器件力矩大小本质上取决于绕组电流不是电压。DRV8818 通过外部采样电阻感知 PWM 斩波周期内的实际电流再和目标电流比较决定功率管什么时候关断。满量程电流的设置公式如下IFS VREF / (8 × RSENSE)注意这里的系数 8 是 DRV8818 特有的不要拿其他驱动芯片的公式直接套。举个例子我用的是 0.1Ω 的采样电阻VREF 通过一个 10k 电位器从 3.3V 分压得到。想让电机满量程电流大约 1.25A 时VREF 就调到 1.0V1.0 / (8 × 0.1) 1.25A。实际调试时我一般不会一上来就按电机铭牌额定电流的 100% 设置而是先按 60%~70% 设并观察运行温度。步进电机长时间在额定电流下跑外壳温度到 60℃以上是常态如果外壳已经烫得不能碰说明电流设定偏大或者散热条件不够要降下来。VREF 引脚内部是高压采样网络频率响应不高所以滤波电容不要加太大否则会延长电流响应时间我用的是 10nF 左右基本够用。采样电阻的功率也要核算。电阻上的瞬时功耗约等于 I²R1.25A 电流在 0.1Ω 电阻上是 0.156W但 PWM 斩波时峰值电流更高留一倍余量选 0.5W 或 1W 的电阻比较稳妥。采样电阻建议选低电感类型比如金属箔电阻普通绕线电阻接近 1μH 的寄生电感会在斩波瞬间产生干扰影响电流检测精度。2.3 微步进模式M0、M1、M2 怎么配DRV8818 支持全步、半步、1/4 步和 1/8 步几种模式由 M0、M1、M2 三个引脚的电平组合决定。这三个引脚可以直接拉到 V3P3 或 GND也可以用 MCU 的 GPIO 控制方便在运行中切换粗细步。M2M1M0微步进模式000全步两相导通001半步0101/4 步0111/8 步我平时最常用的就是 1/8 步。全步模式下每拍电流从一相切换到另一相换向瞬间力矩突变电机在低速时的台阶感和振动非常明显切到 1/8 步之后绕组电流按正弦阶梯逼近电机运动的连续性大幅改善噪声至少降低一个级别。代价是同样转速下 MCU 要发出 8 倍的脉冲数对脉冲发生频率有要求好在 PIC24F16KA102 的定时器到 32MHz 没问题1/8 步下几千 Hz 的脉冲轻松覆盖。有一点要提醒微步进细分并不能提高步距角精度它只是让电流变化更平滑、减小低频振动。如果应用场景是要求很高定位精度的开环控制更可靠的办法是加编码器做闭环或者机械上装减速机构而不是无限加大细分。2.4 衰减模式的选择和影响步进驱动芯片的 PWM 电流斩波有几种衰减方式慢衰减、快衰减、混合衰减。这个参数在 DRV8818 上需要根据微步进档位和电机负载特性去选我第一次做时没太在意直接用默认配置结果电机在低速段有明显啸叫后来把衰减方式调成混合衰减噪声才落下去。简单理解慢衰减时电流下降路径长续流电流保持时间长电流纹波小但波形滞后快衰减时电流被迫快速换向响应快但纹波大电机容易发出刺耳的声音。混合衰减在前半段用快衰减、后半段用慢衰减兼顾了响应速度和纹波。实际经验是半步和 1/8 步配合混合衰减效果通常比较好全步时用慢衰减也能接受。有条件的话用手持示波器量 ISENSE 引脚电压观察斩波波形是否稳定判断衰减配置是否合适。3. 固件实现稳定脉冲、加减速与方向时序3.1 STEP/DIR/ENBL 三线控制的本质步进电机的三线控制本质上就是“数脉冲”。每一路脉冲对应电机走一个微步工程单位一般换算成距离或角度比如 1.8° 步距角电机在 1/8 细分下一个脉冲对应 0.225°。所以软件里要维护一个位置计数器目标位置和当前位置的差值就是待发送的脉冲总数。方向信号 DIR 的电平决定计数器是加还是减。很多初学者会忽略一个细节DIR 信号的建立时间必须要早于 STEP 脉冲的边沿。驱动芯片在 STEP 上升沿采样 DIR 电平如果 DIR 变化太晚芯片可能读到上一个状态电机朝错误方向跑或者原地抖动。我的做法是在每次改变方向之后先延时至少 5μs再开始发第一个 STEP 脉冲这个延时有足够的裕量几乎不会踩坑。ENBL 信号用来在电机不需要保持力矩时关闭输出可以省电、降低发热。注意 DRV8818 的使能引脚极性要看数据手册确认不要凭感觉接接反了会出现“明明代码发送脉冲了电机却一动不动”的情况这类问题排查起来很费时间。3.2 用 PIC24F16KA102 的 OC 模块生成 STEP 脉冲生成 STEP 脉冲有两种常见做法一种是在定时器中断服务程序里翻转 GPIO另一种是用输出比较模块 PWM 模式直接输出方波。前者灵活适合需要动态改频率的加减速场景后者更省 CPU 资源但改频率时要重新算周期和比较值。我最终的方案是折中用定时器中断维护运动状态计算当前速度对应的周期然后用 OC 模块输出 50% 占空比的方波作为 STEP。核心代码框架大致如下// PIC24F16KA102 使用 PPS 把 OC1 映射到 RP0 引脚 // 假设系统时钟 \( F_{CY} 16MHz \) void StepGen_Init(uint16_t freqHz) { // 设置 PPS RPINR0bits.OC1R 0x00; // 根据实际引脚选择 RPOR0bits.RP0R 0x0A; // RP0 映射到 OC1 // 定时器2作为 OC 时钟1分频 T2CONbits.TCKPS 0b00; TMR2 0; PR2 StepGen_GetPeriod(freqHz); // OC1 工作在 PWM 模式占空比50% OC1CON1 0x0006; OC1R PR2 / 2; OC1RS PR2 / 2; T2CONbits.TON 1; } uint16_t StepGen_GetPeriod(uint32_t freqHz) { return (uint16_t)(16000000UL / freqHz); }注意 PR2 的值实际上决定的是 PWM 频率也就是 STEP 脉冲频率很直观。改变速度时我先把 OC 输出关闭更新 PR2、OC1R、OC1RS再重新开启避免中间产生一个异常宽或窄的脉冲。这个异常脉冲如果被驱动芯片当成有效 STEP位置就会多跑一步或漏一步开环系统里这就是定位误差累积起来很难查。3.3 梯形加减速的实际调法步进电机直接从一个比较高的速度启动大概率失步甚至堵转因为电磁力矩在高速段会下降负载惯性又需要时间建立速度。解决办法是梯形加减速先从一个较低的速度起步按固定加速度升到目标速度到达减速点后再降回来本质上是让电机在力矩能力范围内完成速度变化。我在代码里维护一个状态机状态包括加速、匀速、减速、停止每个状态都对应一个目标 STEP 频率。加速过程的频率更新不需要每步都算一次可以放到一个 1ms 的周期任务里做每毫秒把当前频率加上一个固定增量 ( a \times 1ms )。假设起步频率 500Hz加速度 2000Hz/s那 1 秒后频率就是 2500Hz总共需要约 1000 步能到目标。减速点必须提前算好不能等到接近目标位置才减速。最简单的策略是每当位置计数器走到剩余距离等于减速距离一半的时候就开始进入减速状态。减速距离可以由当前频率和减速度估算出来。前期可以先按固定加速步数来近似后续再根据实测调整。这个环节最容易出现的问题是减速太晚电机冲过目标位置开环状态下只能听到“咔咔”的失步声严重时机构撞到限位。调试时我习惯先加一个软限位位置超过设定范围立即停止发脉冲。3.4 方向切换与堵转保护方向切换前面提过要加延时但还有一个更隐蔽的问题电机在静止保持力矩时如果直接改变方向绕组电流的相序变化会让电机有一个“反冲”动作带动负载反向跳一步。这个现象在带齿轮间隙的机构上尤其明显。解决办法是切换方向前先把 ENBL 短暂关闭几毫秒、让电机释放再切换 DIR、重新使能并开始发脉冲代价是损失一点点保持力换来的是方向切换动作干净利落。堵转保护在开环步进系统里主要靠驱动芯片的过流和过热保护兜底DRV8818 的 nFAULT 引脚是开漏输出故障时拉低接到 MCU 的外部中断引脚上可以快速响应。软件侧另一个简单有效的办法是位置跟踪如果控制器发出的脉冲数和编码器如果有反馈的位置偏差超过阈值就判定堵转。没有编码器时可以监控驱动芯片的温度和电源电压堵转时绕组电流一直维持在设定值芯片温度会快速上升配合热敏电阻算是穷人的堵转检测方案。4. 调试实录波形、发热与噪声排查4.1 电机不转从哪开始查电机完全不转是最常见的首发问题我的排查顺序很固定。先看 ENBL 极性用手头万用表量 ENBL 引脚和 GND 之间的电压对照数据手册确认逻辑是否激活再量 VM 电压是否在正常范围内DRV8818 对欠压有保护压差太大时输出不动作接着用示波器量 STEP 引脚确认 MCU 确实发出了方波如果波形是直流电平多半是定时器没启动或者 PPS 映射错误。还有一个容易被忽略的坑VREF 电压为 0 会导致电流设定为 0电机自然不转。如果 VREF 引脚悬空或者电位器开路芯片也会输出无力。调试时先用万用表量 VREF 对地电压确认有一个稳定电压再去看波形。这种从供电到设定电压再到信号的顺序可以快速缩小范围避免在代码里反复试却找不到问题。4.2 芯片和电机异常发热电流和斩波参数的原因发热问题几乎都和电流设定过大有关。比如我测试过一台 42 步进电机额定电流 1.2A用 0.1Ω 采样电阻VREF 调到 1.0V 时满量程 1.25A跑十分钟后电机外壳接近 70℃驱动芯片的 PowerPAD 也有明显热感。把 VREF 降到 0.72V、满量程约 0.9A 之后电机稳定在 50℃左右力矩下降到约 80%但对这台设备足够用。DRV8818 的散热设计值得多说一句。芯片底部的 PowerPAD 必须焊到 PCB 的铜箔上并且通过过孔阵列把热量导到背面的铺铜区。我见过有人用转接板飞线驱动芯片不焊 PowerPAD结果芯片空载几分钟就进入过热保护。如果 PCB 空间不允许大面积铺铜至少要在芯片附近多放几个过孔增大热传导路径。电流纹波过大也会导致芯片和电机额外发热因为无效电流在绕组和功率管上转圈。用示波器看 ISENSE 引脚的电压波形正常情况下是接近三角波的电流斩波波形。如果纹波幅度超过设定值的 20%考虑换衰减模式或者加大 PWM 斩波频率相关的滤波电容。这里不必追求理想波形纹波和噪声本身就是一对矛盾调到一个现场听感可接受的程度就行。4.3 低频振动和啸叫微步进与衰减的配合电机在几十到几百 Hz 的低频段出现剧烈振动原因很多时候是“全步模式 负载共振”。小幅度的啸叫则通常是 PWM 斩波频率落在人耳可听范围内通过扬声器效应从电机壳体传出来。前者的解决思路是提高微步进档位或者调整速度绕过共振区后者需要调整衰减模式或者适当改变 PWM 频率。我在一台小型转塔机构上遇到一个具体案例全步运行时 300Hz 附近振动大得连带底板都在抖切到 1/8 步后振动明显减小但 800Hz 左右又出现新的啸叫。反复试了几种衰减组合最后用 1/8 步 混合衰减把微步频率控制在 6000Hz 以上现场噪声水平才达到验收要求。这类问题最怕不加分析地乱加细分细分虽然能改善低速平稳性但脉冲频率也随之抬高如果机械结构在高频段有共振点啸叫反而更严重。4.4 用示波器检查 ISENSE 波形来判断电流环路ISENSE 引脚量到的电压实际上就是采样电阻上的电压除以电阻值就是当前绕组电流。正常工作时应该能看到一个带有斩波毛刺的近似三角波幅值和设定值一致。如果波形幅值明显偏低说明电流没有建立起来可能是 VREF 设置偏低或电机线圈开路如果波形出现削顶说明电流已经打到满量程并触发斩波但电机可能处于堵转状态。示波器探头的地线夹要尽量短直接夹在采样电阻的 GND 端不要夹到电源地远端否则测量本身会引入噪声。测量时我习惯用交流耦合看纹波细节用直流耦合看幅值两者结合判断。这个波形也是判断衰减模式是否合适的最直观依据波形平滑稳定说明电流环路工作健康毛刺乱跳说明斩波配置可能有问题。4.5 排查速查表现象可能性按概率排序处理手段电机完全不转ENBL 极性反、VM 欠压、VREF0、STEP 无脉冲按电压、信号顺序排查电机发热严重电流设定过大、散热焊盘没焊好、堵转降低 VREF、补散热过孔低速振动微步进档位低、负载共振提高细分、远离共振频率高频啸叫斩波频率在可听范围、衰减不合适换衰减模式、调整 PWM方向反了DIR 建立时间不足、接线相序有误加 DIR 延时、交换绕组接线定位误差累计脉冲丢步、加减速太晚或太快调整加速度、加软限位5. 工业与机器人场景的工程化落地隔离、散热与固件可靠性5.1 信号隔离与地线处理在工业现场电机和驱动器之间靠长线传输容易拾取干扰。常见的做法是 STEP、DIR、ENBL 三路控制信号通过高速光耦或数字隔离器再进入驱动芯片避免电机电源侧的噪声倒灌到 MCU 侧。我用 ROHM 的普通高速光耦做过一版信号频率在几十 kHz 时基本够用如果脉冲频率超过 100kHz建议换数字隔离器光耦的传输延迟和上升沿劣化会影响脉冲准确性。地线处理上有两个要点一是 MCU 逻辑地和驱动电源地必须在驱动板上一点连接避免形成地环路二是驱动板回到 MCU 的信号地线不要和电机电源线平行走长距离否则开机启停的电流冲击会感应到信号回路上严重时 MCU 会复位。布线条件受限时可以用双绞的排线来走 STEP/DIR 信号再把屏蔽层单端接地。5.2 PCB 布局PowerPAD 和大电流回路DRV8818 的 HTSSOP 封装焊盘很小手工焊接时容易出现虚焊尤其是 PowerPAD热量不够就会浮起来。我的经验是先用回流焊或加热台把芯片焊好再手工补其他引脚。如果只能手工焊接选用带大面积接地焊盘的加热台实测比电烙铁直接怼可靠得多。大电流回路的走线要短和粗VM 到芯片、芯片到电机端子、采样电阻到地网这三段走线宽度至少 2mm 以上最好不要走细线拐角。采样电阻的走线要单独引到芯片的 ISENSE 引脚不要和其他地线共用否则地上的压降会被检测电路当成电机电流的一部分引起实际电流偏差。过孔向下导热时注意不要在 PowerPAD 正下方放过孔到内层电源层否则可能短路。5.3 固件层安全与可靠性工业现场的设备最怕的不是功能不够而是异常情况下的行为不可控。固件里我至少会处理四件事一是上电初始化时把所有使能关闭防止上电瞬间输出二是运行过程中每毫秒检测一次 nFAULT一旦触发立即停止发脉冲并记录异常码三是设置位置软限位和脉冲计数溢出保护防止位置变量回绕后电机朝错误方向跑四是固件支持运行时动态修改加减速参数方便现场调试不用重新编译。还有一个小技巧在掉电或急停之后电机位置会丢失。我的做法是保留一个绝对零点标定流程上电后先自动回原点先用低速发脉冲直到限位开关触发再反向回退到限位开关离开的位置把这个位置记为零点。这套逻辑在转塔和丝杠设备上很有效也能弥补开环步进系统没有绝对位置反馈的短板。5.4 后续扩展闭环和总线化如果这个方案跑稳之后还想继续升级有两个方向比较自然。一是给电机加编码器把位置反馈引入控制器做成硬件闭环。步进电机闭环的主要优势并不是提高绝对精度而是能实时发现失步并及时补偿这对负载波动较大的机器人关节很有价值。二是把控制接口从脉冲方向改成总线式比如接到 CANopen 网关或 EtherCAT 从站远程下发速度和位置指令。PIC24F16KA102 的资源做双轴三轴运动控制足够但再往上加轴或者复杂的轨迹插补就该换更强的 MCU 了。我在实际调试中最大的感受是这套 DRV8818 加 PIC24 的方案本身并不复杂真正花时间的都是那些数据手册不会写的东西——VREF 的滤波电容大小、衰减模式和微步进的搭配、STEP 异常脉冲对定位误差的影响、PowerPAD 的焊接工艺。只要把这些点提前在原理图阶段想清楚后面调试会非常顺。最后一个小建议每一版改板子之后记得留出 ISENSE 测试点和 STEP/DIR 的测试点一个示波器探头就能看所有关键信号工程调试效率能提升一个档次。
返回列表