步进电机这类执行器,做低负载的桌面玩意儿时随便找个模块就能转起来,可一旦装进工业设备和机器人本体,麻烦就成倍往上翻:低速段共振、中高速扭矩塌陷、驱动器发热把外壳烤软、连跑八小时回零失败。这次我落地的这套方案,主控是 STM32F100ZE,功率级用 TB67S531FTG,目标是稳定控制两相双极步进电机,场景覆盖工业自动化上下料、分度盘、机器人末端执行器、小型直角坐标机械臂这一类对重复精度和连续运行要求比较硬的地方。选这两颗料不是随手凑的:前者是 24MHz 的 Cortex-M3 老将,外设够用、价格压得住、供货稳;后者是内置微步序发生器的两相双极驱动,MCU 只管发脉冲和方向,不用自己去算相位表,24MHz 的主频也扛得住。整套方案的成本、发热、噪声、可维护性我都在真机上验证过,包含踩坑细节,也包含可以直接抄的电路参数和固件代码。
1. 先想清楚需求:这套方案到底在解决什么问题
1.1 工业与机器人场景对步进驱动的四个硬指标
先说清楚评价标准,不然选型全是拍脑袋。工业设备和机器人对步进系统的要求,跟消费级玩具完全不是一个量级,我一般归纳成四条。
第一条是低速平稳。很多设备的工作点就在 30 到 300 转每分钟之间,恰好是步进电机最容易出现共振的区间。共振的来源是每一整步的转子过冲,靠细分数和斩波频率来压,压不下去就会出现肉眼可见的抖动,进而影响视觉定位精度。
第二条是中高速扭矩保持。步进电机的扭矩随转速上升而下降,这不是电机本身变差了,而是绕组电流来不及建立。能不能把电流快速推上去,取决于母线电压相对反电动势的余量。这一点在选母线电压的时候就要算,不能等到发现转不动再回头改板。
第三条是长时间运行的温升控制。设备连续工作八到二十四小时,驱动 IC 的结温必须留有足够余量。我见过不少板子,室温测试一切正常,进了没有空调的电柜就开始随机丢步,本质是结温逼近极限触发了过温保护。
第四条是可复现的运动接口。工业现场要的是脉冲加方向这种确定性极强的接口,配合使能信号和回零逻辑。通信方式可以有,但不能把实时性押在总线上。这四条定下来,后面的所有取舍才有依据。
1.2 为什么让驱动器承担微步,MCU 只管发脉冲
TB67S531FTG 内部带微步序发生器,外部给它一个时钟脉冲,它就自己按设定细分走一步,同时自己完成两相的电流矢量合成和 PWM 恒流斩波。这个架构带来的最大好处是 MCU 侧的负担极低:STM32F100ZE 只需要输出一路方波加一路方向电平,再配三根细分档位线,就能完成基本的运动控制。
如果换成没有内置序发生器的驱动方案,比如用双 H 桥自己搭,MCU 就得为每一步更新两个 PWM 通道的占空比,还得维护一张正弦表、做定点乘法、处理两相相位关系。200 步每转、1/16 细分就是 3200 个相位点,每点两次占空比更新,24MHz 的主频下这个开销并不轻松。所以这套方案的结构本质上是把实时性最强的电流环交给专用芯片,把运动规划和接口逻辑留给 MCU,各干各擅长的事。
注意:内置序发生器意味着你无法用软件干预微步的相位和电流波形。如果你的应用需要自定义电流波形(比如某些追求极致平滑的场合),这套架构就不合适,得换成 MCU 直接生成相电流的方案。
分工边界划清楚以后,MCU 侧的代码量其实很少,真正难的部分全在参数计算、加减速曲线和硬件细节上,这也是下面要重点讲的内容。
2. 器件能力解析与关键参数怎么算
2.1 TB67S531FTG 的引脚分组与设计要点
这颗芯片我按功能把引脚分成六组来理解,比逐个背引脚表高效得多。同时提醒一句,不同年份的数据手册在个别参数上会有微调,我下面给的是量级和计算方法,具体数字务必拿自己的手册核对。
| 引脚分组 | 作用 | 设计要点 |
|---|---|---|
| VM 与功率地 | 电机驱动电源 | 去耦电容紧贴引脚,容量按母线电流波动估 |
| OUT1A/1B/2A/2B | 两相四线输出 | 走线加粗,远离小信号区 |
| CLK、CW/CCW | 步进脉冲与方向 | 串阻抑制振铃,方向切换要留建立时间 |
| MD1/MD2/MD3 | 细分档位设定 | 用 GPIO 或跳线,上电不能悬空 |
| OSCM | 斩波频率设定 | 外接电容,走线短,远离开关节点 |
| Vref 与采样电阻端 | 相电流设定与检测 | 采样电阻用开尔文走线,Vref 要滤波 |
其中细分档位是很多人会忽略的动态资源。低速精定位时用高细分,高速点位移动时切成低细分,可以让脉冲频率落在 MCU 和驱动都能舒服处理的范围内。用 GPIO 控制 MD 引脚就能做到在线切换,切换时必须先停脉冲,否则会出现相位错乱导致丢步。
斩波频率决定了电流纹波的大小。频率越高,电流波形越接近理想正弦,低速越平顺,但开关损耗也越大,驱动 IC 自身发热明显上升。频率太低则会听到绕组的啸叫。OSCM 引脚外接电容的容量与斩波频率成反比,我会先用一个中等容量的电容做基线,再用示波器看相电流纹波和壳体温度来微调,这个动作我在每块新板上都会重做一次。
2.2 相电流怎么定:Vref 与采样电阻的联合取舍
这颗芯片的相电流由 Vref 电压和采样电阻共同决定,我用的关系式是:
Iout(峰值) ≈ Vref / (5 × Rs)也就是手册里常见的系数形式。别急着套用,先用示波器验证一次实测值和公式的偏差,因为有些批次的内部放大倍数会有轻微差异。
设定目标:峰值相电流 1.5A,这是 42 机座两相步进电机比较常见的额定值。取 Rs = 0.1 欧姆,则 Vref = 1.5 × 5 × 0.1 = 0.75V。取 Rs = 0.22 欧姆,则 Vref = 1.65V。两种取法各有代价,见下表。
| 采样电阻 | 对应 Vref | 采样电阻功耗 | 信噪比 | 适用场景 |
|---|---|---|---|---|
| 0.1 欧 | 0.75V | 约 0.23W | 略差 | 大电流、低发热优先 |
| 0.15 欧 | 1.125V | 约 0.34W | 中等 | 通用推荐 |
| 0.22 欧 | 1.65V | 约 0.50W | 好 | 小电流、精度优先 |
表中功耗的算法值得说一下。微步驱动下每相电流近似正弦,均方根为峰值除以根号二,两相合计功耗约等于峰值电流的平方乘以采样电阻,也就是 Ipeak² × Rs。1.5A 配 0.1 欧姆得到 0.225W,这个值决定了封装选型:0.1 欧姆可以用 1W 的 2512 封装,余量充足;0.22 欧姆的话 0.5W 已经比较烫,建议上 1W 甚至 2W。很多设计在这里出问题,就是按平均电流而不是这个公式去算,结果采样电阻长期工作在额定功耗附近,阻值随温度漂移,电流设定跟着漂,表现出来就是同样的程序,夏天比冬天容易丢步。
实操心得:采样电阻优先选低温度系数、低电感类型,普通厚膜电阻的温漂和寄生电感在高频斩波下都会带来偏差。这一步省钱会直接反映在运动一致性上。
2.3 STM32F100ZE 的资源分配与它真正的短板
STM32F100ZE 是 Cortex-M3 内核,最高主频 24MHz,512KB Flash,32KB SRAM,LQFP144 封装,带 12 位 ADC、12 位 DAC、高级定时器和 CAN 控制器。144 引脚的版本外设非常富余,我通常这样分配:
| 功能 | 使用资源 | 说明 |
|---|---|---|
| 步进脉冲 | 高级定时器 PWM 通道 | 频率可编程,配合 DMA 或中断 |
| 方向与使能 | 普通 GPIO | 换向时留建立时间 |
| 细分档位 | 三路 GPIO | 上电初始化为固定档 |
| 电流设定 | DAC 通道 | 实现待机降流 |
| 母线电压采样 | ADC 通道 | 过压欠压保护 |
| 上位机通信 | CAN 或 UART | CAN 用于多轴组网 |
| 编码器反馈 | 定时器编码器模式 | 闭环校验或失步检测 |
它真正的短板是主频和浮点。24MHz 没有硬件浮点,做加减速曲线时如果每步都用 float 去算平方根,余量会非常紧张。我的做法是把速度规划全部转成定点整数运算,或者提前离线算好一张加减速表放进 Flash,运行时只做查表和简单的插值。这个取舍很关键,下面讲固件的时候会给出具体做法。
另外要提一句,24MHz 让最小中断间隔变得敏感。如果步进频率上到 20kHz,而每次中断的开销在 100 个周期左右,占用大约百分之八的 CPU,看着不多,但一旦同期还要跑通信解析和状态机,就容易在尖峰时刻丢中断。所以我在高频段一律用 DMA 搬运脉冲参数,而不是靠中断逐周期改寄存器。
3. 硬件设计:从母线到散热的具体做法
3.1 母线电压怎么定,反电动势怎么算
母线电压的选择直接决定了这套系统能跑多快。PWM 恒流驱动要维持相电流,必须有余量电压去克服反电动势和绕组电阻压降,可用余量大致是:
余量电压 = VM - Vbemf - Ipeak × Rphase而电流从零建立到设定值所需的时间为:
t_rise ≈ Lphase × Ipeak / 余量电压举个实际例子。某 42 步进电机相电感 2mH,相电阻 2 欧姆,额定相电流 1.5A。用 24V 母线,在 600 转每分钟时的反电动势大约几个伏级,取 5V 估算,则余量约 24 - 5 - 3 = 16V,上升时间约 2mH × 1.5A / 16V = 188 微秒。这意味着步进周期至少要大于这个量级,也就是脉冲频率上限在 5kHz 上下。1/16 细分下相当于每分钟不到 100 转,这显然不够看。
同样条件下换成 36V 或 48V 母线,余量提高到 28V 到 40V,上升时间压缩到 100 微秒以内,可用转速能翻一倍多。这就是为什么工业场合宁可多花电源成本也要上高压母线。但要同步处理两件事:一是驱动器本身的耐压上限,二是电机减速时回馈能量导致的母线泵升,必须在母线上加足够容量的电解电容和钳位器件吸收。
注意:母线泵升是新手最容易忽略的故障源。电机高速减速或者负载惯性大时,能量会倒灌回母线,轻则触发过压保护,重则直接打穿驱动芯片。惯量大的场合,建议加制动电阻或者选择带能量回馈处理的电源模块。
3.2 采样电阻的走线细节
采样电阻别看只有两个焊盘,走线方式对电流精度的影响可能超过电阻本身的精度等级。正确做法是开尔文连接:从电阻焊盘的内侧单独引出两条细走线回到驱动芯片的检测引脚,而大电流路径从焊盘外侧走粗线。这样大电流在铜箔上产生的压降就不会串进检测回路。
同时,采样电阻的地必须单独回到驱动芯片的功率地引脚,不能和 MCU 的模拟地随便连在一起。我在一块早期的板子上图省事共用了一段地线,结果电机运行时相电流实测值和设定值相差百分之十五左右,噪声把采样信号淹没了。分开走地、加一段 RC 滤波之后偏差降到百分之三以内。
Vref 引脚同样需要处理。如果直接用 MCU 的 DAC 输出,中间要加一级 RC 低通,把 DAC 的量化台阶和数字噪声滤掉,通常 1k 电阻配 1 微法电容就比较合适。Vref 上如果有纹波,相电流就会跟着抖,表现出来是电机有周期性的嗡嗡声。
3.3 斩波频率与衰减模式的调优思路
斩波频率的调法前面提过,靠 OSCM 引脚外接电容。我的经验是先按手册推荐值起步,然后用电流探头看相电流波形:波形顶部如果锯齿明显,说明频率偏低,适当减小电容;如果驱动芯片温度偏高而波形已经很干净,说明频率偏高,可以适当加大电容换取更低的开关损耗。
衰减模式决定电流下降阶段的路径,影响的是电流波形对称性和高速特性。慢衰减波形纹波小、噪声低,但高速时电流下降不够快;快衰减响应快但纹波大。多数集成的驱动器会在手册里给几种混合衰减的配置方式,我一般在中低速用偏慢衰减换平顺,在需要高速的型号上改用混合衰减。这里没有万能答案,只能结合你自己的电机和速度区间实测。
判断标准很简单:听声音、看波形、摸温度。三个指标都满意就定下来,不要为了追求某一项极致而牺牲另外两项。
3.4 散热估算与 PCB 布局
先做功耗估算。导通损耗用输出级导通电阻估算,两个输出同时导通时:
P_cond ≈ 2 × Irms² × Rds(on)_tot以 1.5A 峰值、相电流均方根约 1.06A、导通电阻合计按 0.5 欧估算,得到约 1.1W。再叠加开关损耗和静态损耗,总量按 1.4W 估。QFN 封装焊到四层板上,结到环境热阻按 35 摄氏度每瓦估算,温升约 50 摄氏度。环境 50 摄氏度时结温接近 100 摄氏度,距离常见的一百五十度上限还有余量,但已经不建议再加码了。
散热焊盘的处理是重点。多数器件的底部裸露焊盘必须焊接到对应的网络上,有的是地,有的是功率地,有的甚至是 VM,一定要查手册确认,焊错网络不仅散热失效,还可能直接短路。焊盘下方打九到十六个过孔阵列,过孔直径 0.3mm 左右,通到背面的整片铜箔,最好再留一块裸露的散热区域。
布局上还有三条硬规则:功率环路的面积越小越好,去耦电容紧贴器件引脚,小信号区和大电流区物理隔离。我通常会在驱动区域和 MCU 区域之间留一条明显的地分割带,只在单点连接。这一条在很多参考设计里不会强调,但在实际抗干扰测试中差别很大。
4. 固件实现:脉冲生成、加减速与电流管理
4.1 三种脉冲生成方案怎么选
脉冲生成是这套固件里最需要做决策的部分,我试过三种方案,各有适用场景。
| 方案 | 实现方式 | 优点 | 缺点 | 适用速度段 |
|---|---|---|---|---|
| 输出比较翻转加中断 | 每次比较匹配翻转引脚并更新比较值 | 逻辑简单,任意频率 | 中断频率等于步频,CPU 占用高 | 低频到中频 |
| PWM 加 DMA 更新周期 | 用 DMA 批量搬运周期值 | CPU 占用极低 | 需要预先计算缓冲区 | 全速度段 |
| 定时器主从级联 | 一个定时器计数,一个输出 | 计数精确 | 灵活性差 | 定速连续运行 |
我最终在正式方案里选的是 PWM 加 DMA。做法是用高级定时器的 PWM 通道输出方波,占空比固定百分之五十,把每个步进周期对应的自动重装载值预先算好放进一个数组,用 DMA 循环搬运。这样 CPU 只需要在缓冲区快要耗尽时补一批新数据,其余时间完全解放出来跑通信和状态机。
需要留意的坑是 DMA 缓冲区的边界处理。如果缓冲区在写入新数据的同时正好被搬走,会出现半个周期错乱,表现为偶发的丢步或异响。我的做法是双缓冲加一个半满中断标志,只在安全窗口更新。
方向信号的处理也有讲究。换向时先改变方向引脚电平,等待至少几微秒让驱动器内部逻辑稳定,再开始发脉冲。绝对不能在脉冲高电平期间换向,那样有概率被驱动器识别成额外的一个脉冲。
4.2 加减速曲线:从梯形到简化的 S 形
梯形加减速是基础,核心是每一步的时间间隔递增或递减。经典做法是用定时器计数周期作为控制量,递推公式大致是:
c_n = c_{n-1} - 2 × c_{n-1} / (4n + 1)其中 c 是定时器计数值,n 是当前步数。这个递推只用到整数加法和移位,非常适合 24MHz 的 MCU。它对应的加速度是恒定的,也就是梯形速度曲线的斜边。
梯形曲线的问题是加速度在起点和终点突变,机械上表现为启停瞬间有冲击。负载惯量大或者传动链有弹性时,这个冲击会激起振动,导致末端定位抖动,甚至触发机械共振。
改进做法是引入加加速度限制,让加速度本身也有斜坡,形成 S 形速度曲线。在有限资源的 MCU 上,我用的是一种简化实现:维护一个当前加速度变量,每一步让加速度按照加加速度参数向目标值靠拢,再用这个加速度去更新周期。
/* 简化 S 形:每步更新加速度,再更新周期 */ static int32_t accel_cur; /* 当前加速度,单位 计数/步² */ static int32_t accel_target; /* 目标加速度 */ static int32_t jerk; /* 加加速度,每步加速度增量上限 */ void update_profile(void) { if (accel_cur < accel_target) { accel_cur += jerk; if (accel_cur > accel_target) accel_cur = accel_target; } else if (accel_cur > accel_target) { accel_cur -= jerk; if (accel_cur < accel_target) accel_cur = accel_target; } period_cur -= accel_cur; /* 周期递减即加速 */ if (period_cur < period_min) period_cur = period_min; }这段代码的好处是全部整数运算,开销可控,而且 jerk 参数直接对应机械冲击的大小,方便整定。jerk 调小一点曲线更柔和,但加减速时间变长;调大则反之。我一般先用一个保守值跑通,再逐步加大直到机械噪声可接受为止。
还要处理一种情况:短距离移动时达不到设定的最高速度,需要在加速段中途就切换到减速段。判断依据是剩余步数与当前速度下减速所需步数的比较,用当前速度平方除以两倍加速度粗略估算即可。
4.3 细分档位与速度上限的联合校核
细分不是越高越好,它和最高脉冲频率是绑死的。以 200 步每转的两相步进电机为例:
| 细分档位 | 每转脉冲数 | 100kHz 脉冲下的转速 |
|---|---|---|
| 1/1 | 200 | 30000 转每分钟 |
| 1/8 | 1600 | 3750 转每分钟 |
| 1/16 | 3200 | 1875 转每分钟 |
| 1/32 | 6400 | 937 转每分钟 |
可以看出,高细分下脉冲频率会迅速吃掉速度预算,而且驱动器本身的时钟输入频率也有上限,手册里会明确给出最大输入频率,别忘了把这个也纳入校核。我的常规配置是:定位精度要求高的轴用 1/16,以速度为主的轴用 1/8 甚至 1/4,需要极低速平顺运行的场合才上 1/32。
实操心得:不要指望高细分能提升定位精度。微步的实际角度精度受限于电机制造误差和摩擦,细分主要改善的是低速平顺性和噪声,而不是绝对精度。指望 1/32 细分把定位精度提高三十二倍,一定会失望。
4.4 用 DAC 做待机降流
STM32F100ZE 自带 DAC 通道,正好可以用来动态调节 Vref。最常见也最实用的用法是待机降流:电机停止旋转后,把 Vref 降到正常运行值的百分之三十左右,相电流随之下降,绕组和驱动芯片的静态发热大幅减少。
1.5A 的电机在静止保持状态下,两相持续通着满电流,绕组温度会缓慢爬升。如果设备大部分时间处于等待状态,这部分热量完全是浪费。降到百分之三十以后,保持力矩下降到约三分之一,但大多数场合足够抵抗传动链的反向力。如果确实需要满保持力矩,那就维持原值,代价是持续发热。
实现上就是往 DAC 数据寄存器写不同值,中间加一个斜坡过渡避免电流突变引起机械抖动。我通常用 50 到 100 毫秒的过渡时间,太快会让电机发出明显的咯噔声。
5. 常见故障与排查实录
5.1 上电不转、抖动、乱转
这一类问题的排查顺序我总结成一张表,按概率从高到低排。
| 现象 | 高概率原因 | 排查方法 |
|---|---|---|
| 完全不动且芯片很烫 | 输出短路或相序接错 | 断电测四线间电阻,确认两相分组 |
| 完全不动但不烫 | 使能或待机引脚极性弄反 | 用示波器确认使能电平有效 |
| 只有嗡嗡声不转 | 某一相缺相或 Vref 太低 | 量两相电流,检查采样电阻焊接 |
| 抖动、转起来不连续 | 细分档位引脚悬空或设置错 | 确认三根档位线电平组合与预期一致 |
| 偶发乱转 | 斩波或时钟线受干扰 | 缩短走线,串阻,检查地平面 |
我最常碰到的是相序分组。两相双极步进电机的四根线里,同一相的两个端子必须接到同一组输出上,接错会直接表现为堵转加高温。用万用表量任意两根线之间的通断,能通的就是同一相,这个动作三十秒就能完成,但真的能省下半天时间。
另外提醒一句,细分档位这类配置引脚绝对不能悬空。有些板子预留了跳线帽,出厂忘记插,表现就是偶尔正常偶尔异常,特别难查。
5.2 丢步、共振与中高速扭矩不足
丢步是最难排查的一类,因为它往往是累积的,等到肉眼可见的时候已经积累了很多。我按三个方向查。
机械方向上,先单独脱开负载让电机空转,如果空转正常,问题在负载或传动。空转也丢步,就查电气和参数。
参数方向上,重点看加速时间和电流设定。加速时间太短是最常见原因,把加速度降到一半再看,如果丢步消失,说明是动态扭矩不够,可以适当提高相电流或提高母线电压。
电气方向上,用示波器看相电流波形在高速段是否还有完整的幅值。如果波形被压扁成三角波,说明电流来不及建立,这就是母线电压不足或者电机电感太大,只能从电压或者电机选型上解决。
共振则集中在某个特定速度区间出现,表现为明显抖动和噪声。处理方式有三个:避开这个转速区间、提高细分档位、调整斩波频率。有些老式的做法是加机械阻尼器,但我更倾向于从电气参数上解决,因为阻尼器会损失扭矩。
5.3 发热、噪声与干扰
噪声分两类,一类是电气啸叫,一类是机械振动。电气啸叫跟斩波频率直接相关,听着像高频的吱声,调 OSCM 电容就能改变音调,通常提高斩波频率能把噪声推到人耳不敏感的高频段,代价是开关损耗增加。
机械振动则和细分、加减速曲线相关。低速时如果整步运行,每步的冲击很明显,提高细分能显著改善。
干扰问题在工业现场很突出。长线缆连接电机,电机线的对地电容会在开关瞬间产生尖峰电流,串到信号线上就会造成脉冲误触发。常规做法是电机线用双绞屏蔽线、屏蔽层单端接地、时钟线串接几十欧姆的电阻抑制振铃。我在一个长线缆项目里,加了串阻以后随机丢步的故障率从每天几次降到零。
6. 机器人场景里的进阶玩法
6.1 多轴同步:统一时基比补脉冲靠谱
机器人通常不止一个轴,多轴联动的关键是怎么保证几个轴同时启停、同时到达。常见的笨办法是让每个轴独立跑自己的曲线,然后用软件去同步,结果因为中断抖动和启动顺序差异,到位时间能差出几毫秒。
我的做法是用一个统一的定时器时基去驱动所有轴的步进脉冲计数,各轴在同一个节拍上更新自己的周期值。由于每颗驱动芯片都是独立接收脉冲,脉冲的物理输出仍然由各自的通道负责,但更新时刻严格对齐。这样各轴的相位误差能控制在微秒级。
再进一步,可以把运动规划的插补运算也放到这个统一节拍里做,形成一个小型的软轴控内核。24MHz 的主频下,跑三到四轴的直线插补是够的,圆弧插补就要看细分和速度了,可能需要把插补周期拉长到 1 毫秒。
6.2 加编码器做失步检测与闭环
步进电机开环运行有个天然的隐患:丢了步自己不知道。工业设备上这个隐患很致命,比如抓取位置偏了半毫米,可能就撞坏工件或者夹具。
比较经济的做法是加一个增量式编码器,用定时器的编码器模式读位置,跟理论步数做比对。偏差超过阈值就报警或者重新回零。注意这里不是要把电机当伺服跑闭环,只是做校验,控制上仍然是开环发脉冲,逻辑简单不容易出问题。
如果确实要做闭环,典型做法是在运动过程中用编码器位置修正脉冲发送量,也就是位置闭环校正。这个话题展开就大了,涉及控制周期、增益整定和抗积分饱和,需要单独讨论。对于大多数点对点的工业应用,做校验加报警已经能覆盖绝大部分风险。
6.3 通信接口:CAN 与上位机的分工
STM32F100ZE 带 CAN 控制器,在多轴组网场合很有优势。我一般这样分工:实时性要求高的运动指令走 CAN,参数配置、日志上传走串口或者更上层的接口。
CAN 报文里我通常放目标位置、速度、加速度、使能标志这几项,配合一个序号字段做顺序校验。收到指令后先缓存,在统一时基的节拍点统一触发,避免不同轴因为收报文时刻不同而启动不同步。
回报方面,每个轴周期性上报当前位置、状态字和错误码,上位机据此做监控和故障告警。带宽不高,标准帧完全够用,没必要上扩展帧增加协议复杂度。
7. 我自己踩过的几个坑,说给你听
第一个坑是采样电阻的封装。早期用 1206 的 0.1 欧姆电阻跑 1.5A,短时间测没问题,连续跑两小时后电阻发热阻值上升,相电流悄悄变小,电机开始偶发丢步。换成 2512 之后彻底解决。这件事让我养成了凡是功率路径上的电阻都按两倍功耗余量选的习惯。
第二个坑是换向时序。有一次代码里为了省事,在脉冲中断里顺手改了方向引脚,结果在某些速度下会出现电机乱走。查了很久才发现是方向变化和脉冲边沿撞上了。现在我的代码里方向切换前后都会插入几个微秒的延时,再多轴的场合也放在脉冲停止的时间窗里做。
第三个坑是母线容量。一台设备带一个大惯量的转台,减速时母线电压瞬间冲到五十多伏,打坏了一片驱动。后来在母线上加了大容量电解电容和钳位器件才稳住。从那以后我做任何带惯量负载的方案,都会先估算回馈能量再定电容容量。
第四个坑是散热焊盘的网络。有一颗器件的手册里标注散热焊盘接功率地,我按常规思路接到了信号地,结果散热效果打折,高温环境下频繁触发保护。所以现在我拿到新器件的第一件事就是把散热焊盘的连接要求单独拎出来确认一遍。
最后一个经验是关于参数整定的顺序。我现在的固定流程是:先空载用最低细分和保守电流确认能转,再加细分、调斩波频率把低速噪声压下去,然后逐步提高加速度找出丢步临界点再回退百分之三十,最后装负载复测并做长时间温升记录。按这个顺序走,基本不会出现反复推倒重来的情况。