做工业设备和机器人电控的朋友,应该对“双极步进电机 + 驱动器 + 主控”这个组合再熟悉不过。电机本身不复杂,真正决定系统整体表现的是驱动那一层:电流怎么斩波、微步怎么细分、过流过温怎么保护,这些全都压在驱动芯片和主控的配合上。最近我在给一套机器人关节和物料送进机构做驱动板,主控选了 STM32L4S5ZI,电机驱动选了 TI 的 DRV8818PWPR,从选型、原理图、固件到实测一路走下来,踩了不少坑,也沉淀了一些确实能复用的经验。这篇文章就按实际开发顺序来写:先说为什么这两颗芯片搭配合理,再拆 DRV8818 内部的工作原理和关键参数,然后是 STM32 侧的外设规划、硬件电源布局、固件实现,最后是示波器实测和常见故障排查。内容偏工程实践,适合正在做步进驱动板、或者想从分立 H 桥方案升级到专用步进驱动芯片的开发者参考。
1. 组合选型逻辑:工业步进控制为什么要这么搭
1.1 工业/机器人场景下,步进驱动电路面对的硬约束
工业实用场景和桌面级玩具完全是两码事。电源电压通常在 24V,环境温度可能长期超过 50℃,电机线动不动走几十厘米,旁边还有变频器、开关电源这类强干扰源。机器人关节还要求定位精度高、启停利落,夹持或送料动作要求足够的加速度,不能慢慢悠悠。这些条件叠加在一起,驱动电路的基本功至少包括这几项:电源电压范围要覆盖 24V,输出电流要能留下 1.5 到 2 倍余量;必须内置电流斩波/限流,否则电机绕组会过热;要有微步细分能力,不然低速共振和噪声很难压下去;还得有过流、过温保护,否则电机堵转或接线短路时,炸板的成本远高于一颗驱动芯片。
在这些前提下再回头看 DRV8818PWPR,就很顺理成章了。它的工作电压范围是 8V 到 35V,覆盖典型 24V 工业母线,输出电流能力也足以驱动多数中小型双极步进电机。更重要的是,它把微步索引器、电流斩波、保护电路全部做到芯片内部,外部只需要少量阻容,就能把简单的 STEP/DIR 脉冲变成实际的绕组电流驱动。对做产品的人来说,这意味着 BOM 更少、可靠性更高、调试工作量更小。
1.2 DRV8818 和 STM32L4S5ZI 各解决一半问题
DRV8818 是 TI 面向双极步进电机推出的驱动芯片,常见封装为 HTSSOP-16,底部带散热焊盘,通常以 PWP 后缀订购。它内部集成了两路 H 桥、步进索引器、电流检测比较器和多种保护逻辑。外部只需要配合自举电容、感应电阻、参考电压设置电路,就能完成“把 STEP/DIR 脉冲变成电机相电流”这件核心事。
STM32L4S5ZI 属于 STM32L4+ 系列,Cortex-M4F 内核,主频 120MHz。选它并不是因为算力有多夸张,而是它在电机控制这个场景里外设组合十分顺手:定时器数量充足,多个定时器带 PWM 输出和 DMA,GPIO 充裕,还能用 ADC 做电流或温度监测,用 UART/CAN 接上位机。它工作在 3.3V,恰好与 DRV8818 的逻辑电平兼容,不需要额外的电平转换电路。
这两颗芯片搭配的经典玩法也很清晰:STM32 负责产生 STEP 脉冲和 DIR 方向信号,DRV8818 内部的微步索引器与电流斩波电路负责剩下的事情。主控不需要实时计算正弦电流表,也不需要两路 DAC 去合成相电流,只要按速度曲线“数脉冲”即可。CPU 负载小,代码简洁,出错概率也低,这对多电机联动的机器人和产线设备来说尤为重要。
1.3 与 L298N、A4988 等常见方案的横向对比
很多人在接触 DRV8818 之前,用过 L298N、A4988 模块,或者干脆用大功率 MOS 自搭分立 H 桥。我简单拉过一个对比表:
| 方案 | 电流能力 | 微步细分 | 电流斩波 | 保护 | 外围复杂度 | 适用场合 |
|---|---|---|---|---|---|---|
| L298N | 一般 | 无,需外部控制 | 无 | 少 | 高,压降大发热大 | 教学演示 |
| A4988 模块 | 中等 | 有,典型 2/4/8/16 | 有 | 基本 | 低 | 3D 打印、桌面设备 |
| DRV8818 | 中高 | 有,2/4/8/16 | 有,多种衰减模式 | 全面 | 低 | 工业、机器人 |
A4988 并不差,但它的封装和散热更适合板载模块,自己做工业驱动板时,DRV8818 这类带裸焊盘的功率封装更利于热设计,参数余量也更足。L298N 那种方案只能说适合教学验证,放到现场会同时受发热、噪声和可靠性三重困扰。我个人如果在实验室快速验证,会找个 A4988 模块对付一下;一旦要出样机和批量板,直接换 DRV8818 路线。
2. DRV8818 芯片级拆解:双 H 桥、微步索引器和电流斩波
想要把驱动代码写稳,却完全不理解芯片内部是怎么决定电流的,出了问题会非常难排查。这一章把它拆开看。
2.1 内部结构分成四块,各管什么
DRV8818 内部大致分成四个功能层。第一是功率层:两相 H 桥,每个 H 桥有四个 N 沟道 MOSFET,电机绕组接在桥臂中点,对应 AOUT1/AOUT2、BOUT1/BOUT2。第二是栅极驱动层:因为高端使用 N 沟道管,需要自举电容产生比 VMM 更高的栅极电压,外部就表现为 BST 引脚和配套电容。第三是电流检测层:每个桥的下桥外部串联低阻感应电阻,把相电流转换成小电压,送进内部比较器。第四是控制与保护层:包括微步索引器、PWM 斩波、衰减模式控制、过流/过温/欠压保护。
这四层配合,整个“恒流斩波”才算闭环。实际画板时,这四个功能块对应的引脚位置、外接元件数量差别很大,建议拿着官方数据表的引脚排列图和参考电路图逐一核对,不要只凭感觉接。
2.2 STEP/DIR 接口与微步索引器的工作逻辑
理解 STEP/DIR 接口,先要知道一个事实:步进电机本质上是一个按固定角度步进的同步电机。驱动芯片要做的事情,是在每个 STEP 脉冲的有效沿,把内部相电流目标从一张正弦/余弦关系表里“挪”到下一个位置。这个表就是微步索引器。DIR 信号决定索引器是正向走还是反向走。
DRV8818 的微步模式一般由 M0、M1 两个引脚电平决定,常见有全步、半微步、1/4 微步、1/16 微步等。微步的意义有两点:一是低速共振和噪声,全步、半步在低速时振动明显,微步把每次电流变化切得很小,机械振动能被明显平抑;二是位置分辨率,1/16 微步让每个脉冲对应的机械角度缩小到 1/16,定位精度更高。代价是同样转速下 STEP 脉冲频率变成了原来的 16 倍,对主控定时器输出能力和响应速度要求更高,这也是前面强调选 STM32L4S5ZI 这类多定时器平台的原因之一。
2.3 电流限制怎么设:参考电压和灵敏电阻的配合
固定关断时间 PWM 恒流方案里,电流环路的目标上限由两个外部参数决定:感应电阻 Rsense 和参考电压 VREF。基本原理是电流上升,Rsense 上的电压随之升高,当该电压达到 VREF 对应的比较器阈值时,内部比较器关闭功率管,绕组电感续流,电流按衰减模式下降;经过固定关断时间或下一个开关周期后,再打开功率管,重复斩波。最终相电流平均值被钳在设定值附近。
选感应电阻主要算两件事:一是阻值要能把目标电流映射到 VREF 的可调范围;二是功率余量。比如希望相电流峰值 1.5A,内部感测放大器增益记为 G,VREF 取 1.2V,那么 Rsense = VREF / (I_trip × G)。如果按 G=5 估算,就是 1.2 / (1.5 × 5) = 0.16Ω,可以取标称 0.15Ω 或 0.22Ω 再回头校准 VREF。如果数据表给出的增益不是 5,按实际值重新代一遍即可。感应电阻的功率按 RMS 电流平方乘以阻值估算,1.5A 峰值对应大约 1A RMS,0.22Ω 上的损耗约 0.24W,实际设计我会至少取 1W,留足余量并避免温漂影响电流精度。
2.4 衰减模式与保护机制,为什么对工业设备很关键
电机绕组是电感,电流不能瞬间突变。关断功率管后,电流会通过桥臂内的续流路径继续流动,续流的速率和路径决定了电流波形的“尾巴”,也就是衰减模式。常见的有慢衰减、快衰减、混合衰减。慢衰减下电流衰减慢,波形更平滑,但在微步切换时可能来不及落到目标值;快衰减动态响应好,却会带来更大的电流纹波和噪声;混合衰减先快后慢,兼顾动态和噪声,很多工业应用都把它作为默认选择。
保护机制方面,DRV8818 集成了过流保护、欠压锁定和热关断。这些功能在工业板子上极其重要,哪怕只是省了几次炸板维修,就值回选型成本。尤其是电机堵转瞬间电流会飙升,没有过流保护的话,芯片和电机都会遭殃。
3. STM32L4S5ZI 外设规划:把控制信号落到具体引脚上
这一章给一套可复用的引脚规划。不同板子引脚会不一样,但思路是通用的。
3.1 一版可复用的引脚分配表
| 信号 | 说明 | 推荐主控引脚 | 占用外设 |
|---|---|---|---|
| STEP | 步进脉冲 | PA6 | TIM3_CH1 PWM |
| DIR | 方向 | PB0 | GPIO 输出 |
| nENABLE | 使能,低有效 | PC0 | GPIO 输出 |
| nSLEEP | 休眠,低有效 | PC1 | GPIO 输出 |
| M0/M1 | 微步选择 | PB7/PB6 | GPIO 输出 |
| 编码器 A/B | 可选反馈 | PB4/PB5 | TIM2 编码器模式 |
| LIMIT1/LIMIT2 | 限位信号 | PA0/PA1 | GPIO 外部中断 |
之所以用定时器 PWM 产生 STEP,而不是普通 GPIO 翻转,是因为在高微步分频和高速度下,GPIO 中断翻转太吃 CPU,而且频率抖动会导致电机运行不平顺。用硬件定时器输出固定宽度的脉冲列,主控只在更新中断里修改自动重装载值来变速,效率完全不同。
3.2 STEP 脉冲生成:GPIO、PWM 还是 DMA
三种方式我都试过。GPIO 翻转最简单,适合脉冲周期在 1ms 以上、速度要求不高的场合,但不建议用于 1/16 微步的连续运行。定时器 PWM 是推荐方案,配置一个通道为 PWM 模式,把脉冲频率换算成 ARR 和 CCR。想要 50% 占空比、周期 T,就让 ARR 等于周期对应计数,CCR 设为 ARR 的一半。运行时更新 ARR 就能改变速度。
如果希望进一步释放 CPU,可以用定时器加 DMA,把预先算好的速度曲线数组循环填充到 ARR,这样 CPU 只在配置阶段参与,运行阶段几乎零负担。做多轴联动时这个方案很值得深入研究,我目前单轴项目用 PWM 就够,多轴会优先上 DMA。
3.3 精确步数计数:位置“账本”怎么记
开环步进控制容易丢步,尤其是加减速太猛或负载突变的时候。即使没有编码器反馈,也必须清楚“已经发了多少个脉冲”,否则位置信息就是一笔糊涂账。我用的是最朴素也最有效的办法:TIM3 输出 STEP 脉冲的同时,把更新事件映射到中断,每产生一个 STEP 就执行一次current_steps += dir ? 1 : -1,再判断是否到达目标步数。
TIM3 工作在 120MHz,低速时单步中断完全没压力,即使到每秒几万步,一个简单的中断处理程序也扛得住。真正要避免的是在中断里做浮点运算、打印日志或者执行延时,那会把脉冲时序搅乱,电机立刻开始抖动。如果以后要做更高性能的闭环,高级定时器 TIM1/TIM8 还带重复计数功能,可以若干个计数才产生一次中断,配合 DMA 能把 CPU 开销降到极低。
3.4 方向、使能、休眠和微步选择的 GPIO 管理
DIR、nENABLE、nSLEEP、M0、M1 都是普通 GPIO,但有一个容易忽略的细节是上电时序。驱动芯片刚上电时,nENABLE 必须保持为高,也就是禁止输出状态,等 VMM 电压稳定、主控程序初始化完成后再拉低使能。nSLEEP 同理,不要在芯片还没有正常工作前就唤醒,否则逻辑状态可能错乱。
微步选择 M0/M1 如果只做固定配置,可以直接用电阻上下拉,省两个 GPIO。但我最终选择了 GPIO 控制,原因是可以运行时切换微步档位:低速用 1/16 微步保证平顺,中高速切到 1/4 微步,避免脉冲频率过高导致定时器分频压力过大。这种灵活性对机器人关节动作切换很有价值。
4. 硬件实操:原理图、电源和布局细节
硬件设计决定了可靠性。下面是我实际画板时采用的参考结构和踩过的一些坑。
4.1 一个 24V 供电、3.3V 逻辑的基本接线结构
系统电源分为两层:电机电源 VMM,典型值 24V;逻辑电源 3.3V,给 STM32 和 DRV8818 的逻辑输入供电。24V 电源先经过一个低 ESR 的电解电容,常用 47µF/50V,再在芯片 VMM 引脚附近加 0.1µF 高频陶瓷电容。逻辑侧同样需要 0.1µF 和 1µF 搭配,确保逻辑电平稳定。
电机接线方面,双极步进电机的相 A 接 AOUT1/AOUT2,相 B 接 BOUT1/BOUT2。相序即使接反也没关系,电机会反转,把 DIR 逻辑取反即可,不需要改硬件。真正需要注意的倒是电机端子选型,强烈建议用锁扣式接线端子或带防插反设计的连接器,杜邦线在这个场景下不够可靠。
4.2 自举电容和灵敏电阻的选值思路
自举电容是新手最容易忽略的元件。高端 N-MOS 需要一只能提供栅极电荷的电容,太小会导致高端管无法完全导通,电机绕组电压不足,出现“能听见电机响但没有力矩”的诡异现象。自举电容的选值按数据表推荐,通常落在 10nF 到 100nF,材质选 X7R 或 C0G,位置必须紧贴 BST 引脚与对应 OUT 引脚,走线越短越好。
感应电阻选值我在第二章用公式带过例子。设计时还要注意电阻的电感和温度系数,低电感贴片功率电阻是首选。Rsense 布线必须直接连回芯片的地引脚,中间不要经过任何窄走线或过孔堆叠,否则采样电压会失真,电流限制也就不准了。
4.3 去耦、地线划分与散热焊盘处理
PWP 封装底部的散热焊盘不仅是热通路,同时也是大电流回路的一部分。它必须大面积焊接到 PCB 铜皮上,再通过过孔阵列连到背面地和内层地,不要只靠一小块孤立铜皮。电流在步进电机里变化很快,感应电阻的地线最好单独拉回功率地,不要和数字信号地绕在一起,否则 PWM 斩波噪声会串到 MCU 参考地,导致 STEP 脉冲误触发、位置计数错乱。
电源去耦的原则是“大电容管低频,小电容管高频”。VMM 入口大电解负责吸收电源波动,芯片引脚附近的小陶瓷负责吸收功率管开关瞬间的高频尖峰。两者缺一不可。很多现场偶发复位问题,最后查出来都是大电容太远、小电容缺失导致的。
4.4 我第一版板子烧芯片的教训
我第一版板子就烧过一颗 DRV8818,原因很典型:电机接线瞬间发生了短接到 VMM。后来总结出三条硬性规范。第一,电机线用端子或锁扣座,不要用杜邦线,插拔瞬间容易短路。第二,驱动芯片电源入口加低压差 TVS,或者至少加足够容量的电解电容,用来吸收感性负载断开瞬间的反向冲击。第三,第一次上电调试时先不接电机,先确认 VMM、3.3V 逻辑电压和所有逻辑引脚电平都正常,再接电机实测。
很多“上电就冒烟”其实都和电源顺序、短路这类外围问题有关,跟芯片本身关系不大。调试阶段宁可慢一点,多测几个点的电平,也不要用一块板子去赌人品。
5. 固件实现:从脉冲产生到加减速曲线
固件部分我用 STM32CubeIDE 加 HAL 库来做,其他 IDE 和裸机寄存器版本也可以参考这里的逻辑。
5.1 CubeMX 初始化配置要点
在 CubeMX 里分四步走。第一步配置 RCC,用外部晶振作为 HSE,主频设到 120MHz。第二步配置 GPIO,把 DIR、nENABLE、nSLEEP、M0、M1 设为输出,初始电平遵循“先禁止、后使能”的原则,保证上电后电机处于安全状态。第三步配置 TIM3,通道 1 设为 PWM 输出,PSC 根据期望的分频系数设置,初始 ARR 先给一个安全值。第四步使能 TIM3 更新中断,在中断回调里做步数计数。
初始化代码大致长这样:
void motor_init(void) { // 上电先处于禁止输出和休眠状态 HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(SLEEP_GPIO_Port, SLEEP_Pin, GPIO_PIN_RESET); // 设置微步,比如 1/16 微步 HAL_GPIO_WritePin(M0_GPIO_Port, M0_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(M1_GPIO_Port, M1_Pin, GPIO_PIN_SET); // 启动定时器 PWM 和更新中断 HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); HAL_TIM_Base_Start_IT(&htim3); // 唤醒并使能输出 HAL_GPIO_WritePin(SLEEP_GPIO_Port, SLEEP_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_RESET); }一个比较容易搞混的点是 nENABLE 和 nSLEEP 都是低有效,写代码时建议用宏定义或者枚举把极性封装好,避免在调试时反复对着原理图猜。
5.2 频率换算:ARR/PSC 决定一路脉冲跑多快
STEP 脉冲频率直接决定电机电角度速度。假设定时器时钟是 f_clk,预分频 PSC,那么 PWM 输出频率满足:
f_step = f_clk / ((PSC + 1) * (ARR + 1))
我习惯把 PSC 设得较大,比如 PSC = 119,让定时器时钟变成 120MHz / 120 = 1MHz,这样 ARR 在 1 到 65535 之间,对应频率从 1MHz 到大约 15Hz,覆盖范围对步进电机来说非常理想。ARR 数值越大,频率分辨率越高,速度控制也越细腻。
运行时修改 ARR 需要注意时机。如果电机已经停止且 STEP 已暂停,直接改就好;如果在连续运行中改,尽量在定时器更新事件发生后改,避免某个脉冲周期突然被拉长或缩短,引起电机抖动。
5.3 梯形加减速:让电机不失步的关键
步进电机是开环控制,瞬时加速度过大会直接失步。机器人和送料机构需要快速启停,所以速度曲线至少要梯形加减速,条件允许再上 S 型。我的梯形实现思路是:给定目标脉冲数 N、启动频率 f_start、最高频率 f_max、加速度 a,先算出加速段脉冲数 n_acc = (f_max - f_start) / a 折算成步数,减速段同理;中断中根据当前已走脉冲数判断处于加速区、匀速区还是减速区,动态计算 ARR。
简化版中断代码:
void TIM3_IRQHandler(void) { if (__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE)) { __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE); step_count++; // 加速区:ARR 减小,脉冲频率升高 if (step_count < accel_end) { if (arr_value > arr_min) { arr_value -= accel_step; } } // 减速区:ARR 增大,脉冲频率降低 else if (step_count >= decel_start) { if (arr_value < arr_max) { arr_value += decel_step; } } htim3.Instance->ARR = arr_value; // 到目标步数后停止 if (step_count >= step_target) { HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1); } } }真实项目里accel_step和decel_step不能拍脑袋乱填,要把时间、步数、频率三者的换算关系先算清楚,或者直接预先建一张速度查表。电机失步大多数是因为加速段太陡,加速度每提高一档,都要用实际负载验证过后再定参数。
5.4 命令接口:把位置、速度和方向暴露给上层
机器人主控一般不会直接往 GPIO 上拉方向信号,而是通过 UART 或 CAN 发指令。我在 STM32 里维护了一个简单命令表,例如:
POS <目标步数>:设置绝对位置,按梯形曲线走到目标;VEL <频率> <方向>:持续运行,直到收到停止指令;STOP:按减速曲线停止,并保持当前相电流;CLR:当前位置清零。
命令解析放在主循环,尽量不在中断里做字符串解析。这样位置控制逻辑和上层协议解耦,以后增加新指令、接入多关节联动协议都比较方便。加上心跳超时机制,如果上层失联超过一段时间,自动让电机减速停止,这是工业安全里很基本但很实用的一招。
6. 实测与排查:波形、噪声、发热和工程坑
最后这部分是我觉得最值钱的实测经验。
6.1 示波器下验证 STEP 与相电流
拿到板子先别急着转电机,把 STEP 引脚波形抓出来看三点:逻辑电平是否接近 3.3V,有没有因为走线过长被拉成缓坡;脉冲占空比是否稳定,有没有偶发窄脉冲;改变 ARR 时频率是否平滑过渡。STEP 信号干净了,再往上接电机。
接上电机后用电流探头看绕组电流。正常斩波波形会看到电流在目标值附近呈三角波震荡;如果电流一路冲到电源轨,说明电流限制没生效,多半是 VREF 没设置或者 Rsense 没接好;如果电流小得像个尖毛,可能是电源限流了,也可能是自举电容选型或者焊接出了问题。波形是驱动系统最诚实的汇报,比起开关电源、电机温度这些间接信号,直接看电流最省时间。
6.2 电机共振与噪音问题怎么压下来
低速共振是步进电机的老毛病,处理优先级是这样:先用 1/16 微步,这是最有效的办法;再让加减速曲线快速穿过共振频率点,不要在共振区间长时间停留;然后适当调高电流,扭矩提升能改善一些振动,但电流增大后噪音也会变大,要权衡;最后检查机械结构,联轴器和电机座松动同样会放大噪音,这个很容易被误判为电气问题。
我遇到过一种典型情况:电机空转很顺,装到机器人关节上就嗡嗡响。排查半天发现不是芯片问题,而是 PWM 斩波频率和机械结构的固有频率发生了共振。把微步段数调整一下,让斩波频率离开共振点,症状立刻就轻了。所以遇到噪音,不要一味怀疑驱动芯片,机械视角也要保留。
6.3 失步、发热、驱动异常的现象与解决路径
| 现象 | 常见原因 | 排查顺序 |
|---|---|---|
| 电机不动但有电流声 | 使能没开、STEP 极性不对 | 查 nENABLE、nSLEEP 状态和 STEP 波形 |
| 转几步就失步 | 加速过快、电流限制太低、电源跌落 | 降加速度、加大 VREF、测 VMM 纹波 |
| 芯片很烫 | RMS 电流过大、散热焊盘处理不当 | 降电流、检查焊盘过孔和散热铜皮 |
| 运行中出现“咔哒”声 | 相序错或某一相开路 | 量绕组电阻、检查接线极性 |
| 上电就烧芯片 | 电源短路、VMM 极性接反 | 检查端子,加 TVS 和保险丝 |
特别提醒一下:DRV8818 的裸焊盘虽然叫散热焊盘,但也是功率地连接点。焊接不良不仅散热差,还会导致地电位漂移,使电流检测失真。如果芯片莫名其妙发烫、力矩偏小,先怀疑焊盘没有焊好,再怀疑元件参数。
6.4 从实验板到工业安装的差异点
实验板上用杜邦线能跑通,不代表工业安装也这么干。到实际设备阶段,我一般会做几件事:电机线换成双绞屏蔽线,屏蔽层单端接地;控制信号线和功率线分槽走线,尽量间隔十厘米以上;电源入口加磁珠或共模电感,把电机斩波带来的高频干扰挡在外面;驱动芯片底部过孔灌锡,或者加导热垫把热量导到外壳。这些措施不改变功能,但能显著降低现场偶发故障率。
我此前有一套设备在实验室跑得好好的,装进柜体后频繁复位,查了很久才发现是电机线过长,干扰串到了复位引脚。把线缆规范整理并加磁环后问题消失。别在最后一步省事,现场的布线规范和实验室的“能跑”完全是两个概念。
最后再分享一个实际体会:DRV8818 虽然接口简单,但它的工作状态和 VREF、Rsense、衰减模式、自举电容绑得非常紧。设计时把所有参数做成可配置项,并预留测试点,后续调试会省非常多功夫。步进电机驱动没有玄学,把波形和电流测清楚,问题基本都是看得见的。