ARTICLE DETAIL

资讯详情

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

基于PIC18LF45K80与DRV8818的步进电机运动控制方案设计与实践

基于PIC18LF45K80与DRV8818的步进电机运动控制方案设计与实践 从去年开始我一直在折腾一套用于轻量级机器人关节和工业设备的小型运动控制方案。手里刚好有 Microchip 的 PIC18LF45K80 和 TI 的 DRV8818PWPR这两颗芯片搭在一起控制双极步进电机实测下来非常稳尤其适合对实时性和可靠性要求比较高的工业与机器人场景。这篇文章就把这套组合从选型思路、电路设计到固件实现和避坑经验完整梳理一遍给正在做类似项目的朋友一个可直接参考的路线。这套方案能解决的问题很明确MCU 负责运动逻辑和加减速规划DRV8818 负责电流斩波和功率放大两者分工清晰把“控制”和“驱动”彻底解耦。对于做步进电机控制的新手它可以帮你避开最难调的那部分——电流环和 H 桥驱动对于有经验的工程师这套芯片组合在抗干扰、保护逻辑和低功耗方面又有不少值得深挖的余地。1. 硬件选型与整体设计思路1.1 为什么选 DRV8818PWPR 而不是更常见的 A4988 或 DRV8825先说 DRV8818。这颗芯片在项目里的定位是“把电流控制的事全部包圆”。它是双极步进电机专用的 PWM 电流驱动芯片内部集成了两个 H 桥和固定关断时间的电流斩波电路能支持最高约 2.3A 的峰值电流、宽至 8.2V~45V 的电机供电电压VM。这个电压范围很关键工业上常见的 12V、24V、36V 电机总线都能直接怼上去不用额外做复杂的电平转换。很多国内工程师会优先想到 A4988 或者 DRV8825毕竟模块便宜、资料多。但 DRV8818 和它们的定位有本质差别。A4988/DRV8825 更多是面向桌面级 3D 打印机这类对 EMC 不敏感的场景逻辑电源和模拟电路的抗干扰设计做得比较基础DRV8818 的引脚间距和热阻设计则偏工业级内部还带有过流保护OCP、欠压锁定UVLO和过热关断TSD在机器人这种电机频繁启停、母线电压容易波动的环境下保护动作更果断不容易“莫名其妙烧模块”。另外 DRV8818 的接口很简单只需要 STEP、DIR、ENABLE 三个控制信号就能跑起来片内自带电流调节MCU 完全不需要参与高频 PWM 斩波这就给后续固件设计省了很大一块实时性压力。注意DRV8818 的电流斩波是“固定关断时间”架构衰减模式由 MODE0/MODE1 引脚决定。实际项目里我建议直接用混合衰减Mixed Decay电机噪音和电流过冲的平衡度最好。1.2 PIC18LF45K80 在运动控制中的定位与分工PIC18LF45K80 的核心任务是出脉冲和算加减速。这颗 MCU 的一大优势是内部带 ECAN 模块可以直接挂 CAN 总线非常适合作为工业现场从站节点其次是它有增强型 CCPCapture/Compare/PWM模块能输出高分辨率的 PWM 信号配合硬件定时器可以产生非常稳定的 STEP 脉冲序列。LF 后缀还意味着低功耗——3.3V 供电时运行电流不到 1mA做电池供电的管道机器人或者便携设备非常合适。在整套控制器里我用它实现四个功能模块第一个是速度曲线生成。通过定时器中断每隔固定间隔更新一次目标脉冲频率实现梯形或S形加减速。第二个是状态机管理。包括空闲、启动、加速、匀速、减速、停止六个状态每个状态切换时都会顺手更新 DRV8818 的使能和方向引脚。第三个是故障响应。DRV8818 的 nFAULT 引脚接 MCU 的外部中断脚一旦过流、过温或者欠压MCU 能在微秒级把 STEP 停掉避免电机继续硬顶。第四个是通信。预留的 UART 与 RS485 口可以和上位机通信方便实时调整目标位置或速度。你可能觉得用 PIC18 这种 8 位机做运动控制会不会性能不够。实际测下来只要不跑特别复杂的插补算法单轴步进控制在 40MIPS 级别的 8 位机上完全没问题。而且 8 位机的确定性很好中断延迟固定这在需要精确控制 STEP 脉冲时序的场景里反而是优点。1.3 组合后的系统框图与信号流整个系统的信号流可以概括成一条线上位机指令 → CAN 收发器 → PIC18LF45K80 解释指令并生成加减速路径 → STEP/DIR/ENABLE 信号 → DRV8818 的 H 桥功率放大 → 双极步进电机旋转 → 位置反馈可选的编码器→ 回到 MCU 做闭环判断。这里重点说一下 STEP 信号的质量。DRV8818 的 STEP 输入需要稳定的上升沿触发最小脉冲宽度大概在 1μs 级别具体见数据手册。如果用 GPIO 软件翻转的方式产生脉冲很容易因为中断嵌套导致脉冲间隔抖动电机就会声音发闷、发热增大。我的做法是用 PIC18 的 CCP 模块工作在 PWM 模式或者用定时器比较输出直接翻转 IO彻底摆脱软件延时。后面固件部分会给出具体寄存器配置。2. 电路原理与关键参数设计2.1 电源树设计VM、V3P3 与控制逻辑电平这套系统的电源树可以分为两路。一路是主功率部分VM 直接接电机电源我通常建议在 VM 和 GND 之间放一个 100μF 的电解电容加上一个 0.1μF 的陶瓷电容共同构成低阻抗储能网络。工业现场的电源线往往很长感性很大如果电容容量不足Step 脉冲引起的瞬时电流抽吸会把母线电压拉出很大的纹波严重时甚至触发欠压保护。另一路是逻辑部分。PIC18LF45K80 是 3.3V 器件而 DRV8818 的数字逻辑电源 AVLS 可以接受 3.3V 或 5V。为了简化设计我用一颗 3.3V LDO 从 VM 取电同时给 MCU、CAN 收发器和 DRV8818 的 AVLS 供电。这里有个容易被忽略的细节DRV8818 的 AVLS 如果使用 3.3V那 STEP 和 DIR 引脚的高电平阈值最高也在 3.3V 左右3.3V 单片机可以直接驱动但如果未来换成了 5V MCU需要检查是否超过 VIH 上限。注意VM 和 AVLS 之间要留一个 10Ω 左右的隔离电阻或者在 AVLS 引脚加一个 1kΩ 串联电阻。原因是 VM 的噪声会顺着电源走线串到逻辑电路可能导致误触发。实测下来加了隔离电阻后EMC 表现会好很多。2.2 电流设定电阻 Rsense 的计算方法与选型DRV8818 的电流斩波阈值由两个外接检流电阻Rsense决定公式很简单峰值电流 I VREF / (8 × Rsense)或者直接利用内部基准I 0.22V / Rsense使用内部 VREF 时举个例子如果计划把电机额定电流设为 2A内部 VREF 模式下 Rsense 0.22V / 2A 0.11Ω。实际取标准阻值 0.1Ω得到的峰值电流大约是 2.2A留了一点点余量。选 Rsense 有几个坑要特别注意。第一是功率规格不要只看阻值稳态功耗 P I² × R2A 的电流在 0.1Ω 上就是 0.4W至少要选 1W 以上的封装否则电阻会发热阻值漂移之后电流设定就跑偏了。第二是寄生电感要优先选低感抗的合金电阻或大封装贴片电阻寄生电感过大会在斩波时产生尖峰影响电流检测的准确度。第三是焊接和布线Rsense 和芯片的 ISEN 脚走线一定要短粗开尔文接法更好不要把小信号线走成高阻天线。2.3 保护电路与 PCB 布局要点DRV8818 自带了 OCP、UVLO 和 TSD但这不代表外围可以裸奔。我给这套方案加了两个外部保护一个是在 VM 入口放一个 TVS 管用 SMBJ 系列或者 SMAJ 系列钳位电压选电机电压的 1.2 倍左右另一个是在电机两相输出线上并联两个小电容到地比如 1nF 左右用来吸收换相尖峰但要注意电容值别太大否则会影响电流检测和衰减模式。PCB 布局上最核心的原则是“功率回路要小、控制回路要远离”。具体操作是把 DRV8818 放在板子的边缘靠近电机连接器Rsense 紧贴芯片VM 电容尽量靠近 VM 引脚MCU、CAN 收发器等数字电路放在另一侧。AGND 和 PGND 通过单点汇流最后连接不要大面积铺铜直接把模拟地和功率地糊在一起。这个细节决定了 EMC 测试能不能过。3. 固件实现与加减速控制3.1 PIC18LF45K80 引脚规划与核心寄存器配置我这里以 24V VM、3.3V 逻辑、1.5A 电机电流的场景为例给出关键引脚分配RC2/CCP2STEP 脉冲输出使用硬件比较输出模式RC1DIR 方向控制RA2ENABLE 使能控制低电平有效RB0/INT0DRV8818 nFAULT 外部中断输入RC6/RC7UART 通信配置命令ECAN 引脚连接 CAN 收发器关键寄存器配置里CCP2 的配置比较典型把 CCP2CON 设为比较模式比较匹配时强制引脚翻转PR2TMR2 周期寄存器决定脉冲周期Duty cycle 设置成 50%。这样 MCU 完全不需要在中断里翻转 IO只要改 PR2就能得到精确的 STEP 脉冲频率。有人可能会问为什么不用 TMR0 中断里翻转引脚因为中断里翻转引脚存在最小中断延迟和抖动频率高一点就容易丢脉冲。硬件比较输出是“CPU 写寄存器外设自己翻转”实时性完全由硬件保证这在工业设备里属于基本功。3.2 梯形加减速曲线与整数定点数实现步进电机在启动瞬间如果频率很高转子和磁场同步会丢失也就是“堵转”。所以必须做加减速。最基础也最通用的办法是梯形加减速加速阶段脉冲频率线性增加到目标速度匀速阶段保持减速阶段线性降低。实现上我用了一个 32 位定点数来管理时间间隔。核心思路是这样设定一个基准时钟比如 TMR2 从 80MHz 外设时钟分频后得到 1MHz。PR2 外设时钟频率 / 目标脉冲频率。在加速阶段每隔 N 个脉冲把 PR2 减小一个步长步长通过加速度值换算。举个例子要从 200Hz 加速到 2000Hz加速时间 200ms。那么平均每步增加 10Hz/ms也就是每 1ms 增加 10Hz。实现时我维护一个 32 位累加器每次 TMR2 中断每个脉冲产生一次累加一次累加到设定的阈值就更新 PR2。这种“按脉冲数调整速度”的方式比“按时间调整”更容易保证平滑性因为位置和速度是严格耦合的。经验整型运算里最麻烦的是除法和取余。建议把所有速度量纲统一成“每秒步数”的整数把加速度统一成“每毫秒步数”然后用查找表或者乘移位来替代除法。用浮点数当然省事但在 8 位机上浮点运算会拖慢中断响应实际工程里不推荐。3.3 S 形加减速的简化实现如果负载比较重或者机器对运动平滑度有要求梯形加减速在切换时刻会产生加速度跳变表现为电机“顿挫”。这时候可以加上 S 形加减速。S 形曲线本质是让加速度线性变化所以实现上和梯形不同的是你要同时维护三个变量——速度、加速度、加加速度jerk。在 8 位机上做完整的 S 形计算有点吃力我的简化方案是“分段查表”把加速过程分成 16 段每段预先把速度增量算好存成 const 数组。运行时每段只做一次加法完全不需要实时计算三角函数或三次曲线。以 0 到 2000Hz 加速 200ms 为例分成 16 段后每段 12.5ms每段末的目标频率预先算好运行时只要在每个时间点把 PR2 跳到对应值。这样 CPU 开销极小曲线平滑度虽不如逐点计算的 S 曲线但已经比梯形好很多而且运行非常稳定。3.4 状态机与故障处理逻辑固件里我用一个简单的状态机管理整个运动过程状态切换的触发条件如下IDLE空闲等待上位机使能。START收到运动指令后设置 ENABLE 拉低等待 5ms 让 DRV8818 内部电流建立然后进入 ACCEL。ACCEL按加减速曲线升频。如果达到目标频率切换 CONST。CONST以当前频率持续输出脉冲。如果剩余步数小于减速距离切换 DECEL。DECEL按曲线降频。脉冲数走完进入 STOP。STOP释放 ENABLE把 STEP 置为低电平回到 IDLE。故障处理上我把 nFAULT 的外部中断优先级设成最高。中断回调里只做四件事关掉 ENABLE、记录故障状态到 RAM、向上位机发一条报警帧、把状态机强制重置到 IDLE。注意不要在中断里做复杂操作比如打印或者递归计算那会让中断响应时间拉长。还有一个小技巧STEP 脉冲计数我用了一个 32 位变量在 TMR2 中断里自增。配合限位开关或者编码器反馈可以做一个简单的软限位防止机械结构撞坏。4. 工业与机器人场景下的调试与抗干扰实践4.1 现场调试的工具链与上位机协议调试这套系统我习惯用一个简单的串口命令行配合逻辑分析仪。上位机只需要发三种指令设置目标位置和速度P启动G查询状态S。PIC18 把当前位置、速度、故障状态通过 UART 回传。协议帧格式设计得很简单固定 8 字节例如0xAA 0x01 [目标速度高8位] [目标速度低8位] [目标位置高8位] [目标位置低8位] [校验和] [0x55]。现场调参的时候逻辑分析仪抓 STEP 引脚波形重点看加速阶段脉冲间隔是不是单调递减、有没有毛刺。如果发现间隔不是平滑变化的多半是定时器配置或者中断优先级出了问题也可能是 STEP 引脚被 EMI 干扰了这时候先查布局再查代码。4.2 工业现场的抗干扰处理隔离与滤波工业现场最典型的干扰源是变频器和接触器它们会在电源线上产生毫秒级的电压跌落和纳秒级的尖峰。我的做法是MCU 和驱动板之间用光耦或数字隔离器隔开。比如 ISO7741 之类的容隔芯片把 STEP、DIR、ENABLE、nFAULT 四根信号隔离。这样即使电机侧的 H 桥炸了MCU 侧也不会受连累。上位机通信用 CAN 时CAN 收发器要选择带显性超时保护的型号如 TJA1051T避免总线长时间占死造成整个网络锁死。电源入口加共模电感和 X/Y 电容组合选型按实际能接受的 EMI 余量来。如果调试现场没有隔离器至少也得在信号线上串电阻或者加 RC 滤波。比如 STEP 线上串一个 100Ω 电阻滤掉一部分高频尖峰。但方向信号 DIR 不要随便加电容否则方向切换时可能因为 RC 延时导致电机先朝错误方向走一步然后才回正。4.3 常见问题排查速查表调试步进驱动问题主要集中在几类。我做了一张速查表方便现场快速定位。现象可能原因排查方法电机完全不动但 IC 不发烫ENABLE 未拉低或 VM 电压过低触发 UVLO用万用表量 VM 和 ENABLE 脚确认逻辑电平电机抖动、有“嗡嗡”声但不转电流设定太小电源容量不足增大 VREF 或减小 Rsense检查 VM 电容运行中突然失步、有“咔咔”声加减速太陡或 STEP 信号被干扰跳变调平缓加减速曲线在 STEP 脚加 100Ω 串阻芯片过温保护频繁触发散热不良或电流余量给太大检查 PCB 铜箔散热检查 Rsense 阻值方向信号时灵时不灵DIR 引脚被 RC 滤波改变沿时间去掉 DIR 引脚上的大电容改用后沿触发这个表在几次现场排障中帮我十分钟定位问题建议把它打印出来贴在工作台上。4.4 从单机到机器人的扩展外部轴与总线同步如果你的目标是机器人应用单轴控制器迟早要升级成多轴同步。PIC18LF45K80 的 ECAN 模块正好派上用场。我的扩展思路是每一个关节/外部轴独立用一块“MCUDRV8818”驱动板板上地址通过拨码开关设定所有板卡挂同一条 CAN 总线上位机可以是 PLC、工控机甚至接 ROS 节点的 CAN 卡统一发同步运动指令。这里有个坑CAN 总线的帧周期在 1ms 左右但多轴同步要求各轴脉冲起始时刻尽量一致。解决方法是给每一块驱动板加一个“同步脉冲”接口或者利用 CAN 的 SYNC 机制上位机发一条广播帧各板卡收到后延时固定时间段再起始脉冲输出。因为这个延时由每块板的 MCU 本地计时误差可以控制在几十微秒内远超多轴关节的同步需求。如果你已经在用 ROS 做机器人控制那这套驱动板也可以直接作为底层执行器上位机只要通过 CAN 或串口发目标速度即可非常像 TMC 或 Leadshine 驱动器的工作方式。只是在 ROS 侧通常需要写一个简单的 motor_driver 节点负责把 cmd_vel 转换成 CAN 帧。5. 工具选型与方案对比什么时候换更高级的驱动5.1 DRV8818 与常见替代芯片的横向对比做方案对比时不少工程师纠结要不要直接上 TMC 系列的静音驱动比如 TMC2209、TMC5160。我基于实际测试整理一张表参数DRV8818DRV8825TMC2209TMC5160电流能力2.3A 峰值2.5A 峰值1.4A RMS/2A 峰值高达 5A 峰值静音效果一般需靠衰减模式一般极佳StealthChop极佳StallGuard/堵转检测无无有有接口连续性步进/方向步进/方向单线 UART/步进SPI/步进工业现场防护较好一般中等较好单片价格低低低-中高单看这张表TMC 系列在静音和堵转检测这块确实碾压。但为什么我在这个项目里仍然坚持 DRV8818第一个原因是成本。DRV8818 在同样电流等级下价格更低批量采购优势明显。第二个原因是可靠性。TMC 的 StealthChop 在很多工业振动环境下会引入新的噪声问题调试难度陡增DRV8818 的固定关断时间架构比较“傻”但胜在稳定对上位机来说行为可预测。第三个原因是项目定位——如果追求绝对静音和高响应比如高端 3D 打印机或桌面级设备那么 TMC5160 确实更好但如果做工业设备稳定可靠摆在第一位DRV8818 完全够用。心得如果哪天画了新版子想从 DRV8818 平滑迁移到 DRV8825 或者 TMC 系列在 PCB 上尽量做成兼容多种驱动的封装把 Rsense 和使能引脚做成可配置焊盘。这样将来换驱动芯片时不需要重新画板。5.2 如何用逻辑分析仪验证 STEP 信号质量这是是我强烈推荐的一个调试习惯任何步进驱动项目都适用。你不需要昂贵的示波器只要有一个几百元的逻辑分析仪接三根线到 STEP、DIR、ENABLE就能看出很多问题。重点看三件事STEP 信号上升沿抖动。用逻辑分析仪的“测量间隔”功能统计相邻两个脉冲之间的间隔正常加速过程应该是单调递减。如果出现来回跳变那就是中断优先级或者代码里有其他任务干扰了脉冲生成。ENABLE 信号的时序。在启动和停止瞬间ENABLE 的电平变化不应和 STEP 信号重叠否则可能会把第一个或最后一个脉冲吃掉。nFAULT 信号的跳变。捕获到 low 脉冲时记录此刻 STEP 频率。如果 nFAULT 是在高速段触发大概率是过流如果是在减速段触发可能是欠压或者瞬态尖峰。我在调试中遇到过很奇怪的问题加速到中速段时电机每 2 秒“咔”一下但 nFAULT 没有触发过。后来用逻辑分析仪发现是 VM 电容充电导致母线纹波偶尔触发软过流换了大电解电容后问题消失。这个问题如果不看波形光靠耳朵听和万用表测真的很难定位。6. 实测数据与避坑经验补充6.1 一组典型运行参数与实测温升我搭了一套测试平台用 24V 电源、57 步进电机额定 2A、1.1Ω 相电阻设置如下VREF 使用内部 0.22VRsense 0.11Ω期望峰值电流约 2A加速时间 200ms目标速度 1500pps步/秒匀速运行 10s然后减速 200ms 停机实测结果连续运行半小时后DRV8818 芯片表面温度约 58℃环境温度 25℃加了一块 10×10mm 的小散热片电机表面 48℃。整个系统工作非常稳定没有失步没有过温保护触发。如果换成不加散热片的小封装板子芯片温度会很快超过 70℃这时候 TSD 可能就开始动作了。所以凡是设计到低转速高扭矩连续运转的设备散热片和铺铜面积一定要重视。6.2 踩过的坑与避坑技巧总结这套组合做下来踩过不少坑总结几条最值得说的。第一Rsense 的焊盘和走线绝不是小事。我第一版 PCD 因为 Rsense 离芯片太远走线又细结果同一块板子不同台机器上电流差异能到 10%。后来把 Rsense 挪到芯片旁边开尔文布线差异降到了 2% 以内。第二PIC18 上电初始化时务必要把 ENABLE 引脚先拉高失能状态等系统完成自检和总线通信后再拉低使能电机。否则上电瞬间 DRV8818 送上 VM 电压两个 H 桥下管默认状态不确定电机可能猛地抽动一下或直接堵转对机械结构不友好。第三软件的加减速参数不要一上来全凭感觉调先用逻辑分析仪做一次开环验证。特别是步数规划最好在固件里加一个“试运行模式”只输出 100 步然后逐渐增加到 1000 步。每次改变加减速参数后做一次试运行确认电机安静、无丢步再扩大到完整行程。第四如果系统需要急停不要直接切断 VM 电源。正确的做法是先把 ENABLE 拉高让 H 桥处于高阻态然后再切断主电源。直接切 VM 会导致电机线圈电流瞬间释放产生很大的反电动势尖峰轻则打坏驱动芯片重则殃及同一母线上的其他设备。6.3 后续可以扩展的方向这套架构如果做熟了向全闭环升级会比较顺手。可以给电机尾部加一个磁编码器如 MT6816 或 AS5600把位置数据通过 SPI 送给 PIC18LF45K80MCU 内部做一个简单的 PID 闭环输出就是 STEP/DIR。这样不仅能实现闭环步进还能做堵转检测、力矩限制比单纯依赖 nFAULT 硬保护要优雅得多。另一个扩展方向是电池供电的便携机器人PIC18LF45K80 的低功耗特性这时候就发挥出来了。可以在 MCU 的休眠模式和 DRV8818 的低功耗模式之间做联动设备在待机时把 ENABLE 拉高、进入休眠只有 CAN 总线上有唤醒帧时才重新上电。实测下来整套控制器静态电流能压到 1mA 以下配合一个 18650 电池组就能撑比较久。我个人在实际操作中的体会是这套组合最适合的场景是“中等规模、多轴同步、现场环境不那么友好”的自动化设备。它的上限不高但胜在把每个环节都做到透明可控。我调试时最常用的一句话是“先保证硬件该响的都能响再谈软件优化”这套 DRV8818 加 PIC18 的方案恰好是践行这句话的好载体。
返回列表