☰
电机控制的核心:目标闭环与力气闭环的深度解析
2026/10/8 1:10:26 网站建设 项目流程

这几年调电机调多了,我越来越觉得这个比喻很贴切:电机世界里确实分成两种“性格”,一种一门心思盯着目标值跑,你给它一个位置、一个转速,它拼命追到误差归零才算完;另一种则更实在,它只听“你让我出多大力气”,不管转速怎么变,电流该多大就多大,力气给足了就稳定住。简单说,有的电机听“目标”,有的电机听“力气”。

我说的这个“目标”和“力气”,在控制术语里其实就对应着位置/速度闭环和转矩/电流闭环。很多人刚开始玩电机驱动,拿着L293D或者TB6612,能转起来就以为完事了,结果转速一抖、负载一加就露馅,本质上就是没分清楚自己到底想让电机“听什么”。这篇文章我想顺着这个思路聊透:两种控制模式各自怎么理解、硬件上怎么搭、算法上怎么写、选型时怎么判,最后再把我自己调试直流有刷电机、BLDC电机时踩过的坑翻出来讲一讲。内容不限定某个平台,STM32、ESP32C3、VESC这些都会串进来,适合刚接触电机控制、正准备做机器人或驱动装置的读者。

1. 同样是电机,“听目标”和“听力气”差在哪

1.1 位置/速度闭环的“目标”逻辑

“听目标”的电机,典型代表就是伺服系统里的位置环和速度环。给它一个目标位置,比如机器人关节要转到90度,控制器就开始算当前角度和目标角度的偏差,偏差大就加大输出,偏差小就减小输出,最后稳稳停住。

这个逻辑的核心是反馈。光给电机通上电,它只能转到没电为止,要想让它“听话”,就得装传感器——编码器、霍尔、或者简单的电位器——把实际状态读回来。控制器的任务就是不断做减法:目标值减实际值,得到一个误差,然后用某种规则把这个误差变成电机的驱动信号。

最常见的规则就是PID。我后面会详细展开,先记住它的感觉:比例项管“现在偏了多少”,积分项管“以前累计的欠账”,微分项管“偏差正在往哪个方向变”。调得好,电机就像被一根无形的绳子牵着走;调不好,要么反应迟钝,要么原地振荡。

1.2 转矩/电流的“力气”逻辑

“听力气”的电机则是一种更底层的控制思路。不管是直流有刷电机还是BLDC电机,转矩和电流之间的关系都非常直接:有刷电机里,转矩约等于电流乘以转矩常数;BLDC电机在FOC控制下,转矩也基本正比于交轴电流iq。所以“力气”控制说白了就是电流控制。

你给它一个电流目标,控制器就死盯着绕组里的电流,大了就减小电压,小了就加大电压,让电流恒定在目标值。负载重的时候,电机转速自然掉下来,但电流纹丝不动,力气一直保持;负载轻的时候,转速可以很高,电流还是那个电流。

这种控制模式的妙处在于,它不关心“你转得多快”,只关心“你出多大力”。很多场景里这正好是需要的:比如电动工具的恒功率输出,比如无人机在悬停时根据姿态不断调整螺旋桨推力,推力就是电流,电流就是力气。

1.3 听目标是上层建筑,听力气才是物理底层

这里有一个新手容易忽略的点:位置环和速度环,最终都是靠力气环才能落地的。

电机本质上是电磁力装置,转速和位置是力的积分效果。位置控制器计算出一个“需要什么目标转速”,速度控制器再把它转成“需要多少电流”,最后电流环去执行这个“力气”。所以现代驱动器里,最内层永远是电流环,外面套着速度环和位置环。

我见过不少初学者直接拿PWM占空比去当“目标转速”,电机空载时好像还行,一带负载转速立刻垮掉,因为占空比只决定平均电压,压根不决定转速。反过来,如果先做一个稳定的电流环,让电机“听力气”,再在外面加位置环,系统的抗负载能力会强很多。这个理解是整个电机控制的基石。

2. 从示波器开始认识电机:极对数、反电动势和绕组接线

2.1 为什么极对数是个绕不过去的硬指标

网上经常能看到有人问“电机极对数是什么意思”“怎么用示波器看极对数”。极对数不是选型手册上一个无关紧要的数字,它直接决定了电机转速和电气频率的关系。

转速和电气频率的公式是:电气频率 = 极对数 × 机械转速 × 极数系数。简化说,对一台两极电机,转子转一圈,绕组里的反电动势正好完成一个完整的电气周期;对四极电机,转子转一圈,反电动势会有两个周期。所以极对数越多,同样转速下换相频率越高,扭矩也更平稳,但驱动器需要处理的频率压力也更大。

无人机上那种外转子无刷电机,极对数通常很多,14极、21极都很常见,就是为了在低转速下获得足够扭矩和稳定输出;而高速主轴电机往往做成2极或4极,减少换相损耗。

2.2 用示波器实测极对数:被动法和主动法

极对数并不难测。最简单的方法是把电机三相绕组任意两相接到示波器,用手匀速转动转子,观察反电动势波形的周期数。转子转一圈,示波器上出现几个完整正弦波,极对数就是几。

这个操作在无刷电机上特别实用。因为很多无刷电机外壳是封闭的,看不到内部磁钢,拆开又麻烦。用这个方法不拆机也能确认铭牌参数对不对。我自己测过一台标称14极的外转子电机,手动转一圈出来7个完整周期,按公式算极对数是7对,对应14极,跟铭牌一致。

如果电机已经接好驱动器不方便手动转,也可以用另一个方法:驱动器开环输出一个很低的固定频率,同时用示波器看其中一相的反电动势,再对比转子实际机械转速。机械转速需要另外用另一个示波器通道接一个霍尔传感器或者用光电头标记,这套系统稍微麻烦,但原理一样,核心就是“机械一圈对应多少电气周期”。

2.3 有刷、无刷和无稀土电机的测量差异

直流有刷电机没有“极对数”的问题,它的换相由机械换向器完成,电枢转动时反电动势波形直接跟机械角度对应。示波器看两个端子,拖动转子,看到的波形周期就对应该电机的极对数。

BLDC电机则靠驱动器电子换相,所以反电动势测量反而更能反映内部磁钢的排布。要注意的是,示波器探头衰减比要设置正确,不然反电动势幅度可能把输入通道打满。测量时也最好断开驱动器,避免驱动器内部电路干扰波形。

无稀土电机最近话题度很高,它的磁钢用铁氧体或纯磁阻结构替代钕铁硼,成本低、供应链稳,但磁性弱、功率密度低。这类电机测极对数的方法没区别,但反电动势幅度会明显小于同体积的钕铁硼永磁电机。示波器上看到波形幅度偏低时,不用先怀疑接线错,要想想是不是无稀土方案。

3. 控制硬件的“翻译官”:L293D、TB6612到D24A,到底在干什么

3.1 驱动芯片不是放大器那么简单

很多新手第一次接触电机驱动,就是从L293D或者TB6612开始的。它们的作用看起来只是“把单片机的PWM信号放大成能驱动电机的功率信号”,但这里头有门道。

L293D是经典的半桥驱动芯片,内置续流二极管,耐压和电流都很有限,适合玩具级别的小电机。它的目标电压是4.5V到36V,峰值电流600mA左右,拿来驱动那种小型直流减速电机还行,稍微带点负载就容易过热保护。

TB6612是后来更受欢迎的选择。它的MOSFET导通电阻更低,发热小,内置的续流方式更好,芯片耐压和持续电流表现都优于L293D。同样驱动一台12V的MG513P30直流减速电机,TB6612的温升明显更小,PWM频率可以推到更高而不容易失真。

D24A这种模块则完全是另一个层级,板上自带光耦隔离和功率MOSFET,可以驱动几十安培的大电机,适合需要大扭矩的移动机器人底盘。它的核心价值不只是“功率更大”,而是隔离保护——控制器和功率级之间用光耦分开,电机堵转时的大电流冲击不会倒灌进单片机。

3.2 接线和PWM通道:以ESP32C3和STM32为例

ESP32C3近年在电机控制圈很火,价格低、Wi-Fi/BLE内置,很多小项目直接拿它当主控。它的PWM硬件通道够用,但要注意它和STM32的定时器资源不一样,引脚分配要提前规划好。

以TB6612为例,典型的接线是:

  • 单片机的两个GPIO分别接驱动板的IN1、IN2,控制电机正反转;
  • 另一个带PWM功能的GPIO接PWMB(或者PWM引脚),控制速度;
  • 电机两端接驱动板的A01、A02;
  • VM接电机电源,VCC接逻辑电源(通常3.3V或5V),共地一定要接对。

我在这里栽过跟头:ESP32C3是3.3V逻辑电平,TB6612的VCC如果接了5V,逻辑输入的电平阈值会偏高,3.3V的PWM信号可能识别不稳,表现为电机时转时不转。后来我把VCC也改成3.3V才稳定。STM32的情况好一些,因为STM32F103系列引脚大多兼容5V,但也不建议长期让3.3V控制器直接驱动5V逻辑的芯片输入,最好查一下数据手册的输入高电平阈值。

PWM频率也要分情况设:直流有刷电机的PWM频率建议10kHz到20kHz之间,高于人耳听觉上限,避免电感啸叫。太低比如100Hz,电机会发出明显噪音,而且电流纹波大。TB6612这类芯片在20kHz下仍能保持良好开关性能。

3.3 缓启动电路:为什么电机一上来就满力气会坏事

电机启动瞬间的反电动势为零,绕组等效阻抗很低,直接满占空比会发生很大的浪涌电流。小电机可能只是电压跌落,大电机轻则烧保险丝,重则冲击减速机构。

缓启动的思路是让电流慢慢爬升。软件上可以做PWM软启动:开机后占空比从0逐步增加到目标值,持续几百毫秒到几秒。硬件上可以在电源回路串一个NTC热敏电阻或者用一个MOS管加阻容电路做延迟导通,本质上都是限制启动瞬时电流。

我看到一些项目用ESP32C3做无人机电调,固件里如果没写软启动,电机一上电就满转速往天上蹦,非常危险。后来在代码里加了斜坡函数,启动时间设成1秒,问题才解决。

4. 听目标的算法:PID闭环与PWM脉宽的那点事

4.1 PID公式的直觉理解

PID是“听目标”类控制的主力算法。写成式子就是:

u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt

这里的u(t)通常对应PWM占空比或者目标电流,e(t)是目标值和实际值的误差。比例项管当下,积分项管历史欠账,微分项管趋势。

转速控制是最典型的例子。目标转速1000转/分,实际只有800转/分,比例项会输出一个正比于200的占空比增量;如果电机因为负载一直停在900转,积分项会慢慢积累,持续往上加占空比,直到误差归零。

实际调试中,Kp太大电机容易振荡——转速忽高忽低,声音都变了;Ki太大会过冲——转速冲到1200再降下来;Kd能抑制过冲,但对测量噪声极其敏感,编码器稍微抖一下,微分项就乱跳。所以调PID的顺序通常是先只调Kp,再调Ki,Kd最后加或者干脆不加。

4.2 编码器反馈和增量式PID

做位置闭环和精确速度闭环,光靠PWM开环是不够的,得加编码器。MG513P30这类直流减速电机很多自带霍尔编码器,连接到STM32或ESP32C3的定时器正交解码通道,可以精确读出电机轴的角度和速度。

我一般用增量式PID来做速度环,因为增量式只输出“变化量”,不容易积累超调的积分饱和问题。增量式PID每次算的是:

Δu = Kp*(e[k] - e[k-1]) + Kie[k] + Kd(e[k] - 2*e[k-1] + e[k-2])

单片机跑这套计算非常快,几百微秒一个控制周期就够了。但要注意,编码器读数如果偶尔丢步,微分项会因为瞬间的高频变化产生尖峰。可以加一个简单的低通滤波,或者对速度做滑动平均,效果立竿见影。

4.3 CPU资源规划:控制频率和中断优先级

听目标的算法越到外层,控制频率可以越低。电流环跑到10kHz甚至20kHz,速度环1kHz就够了,位置环可能100Hz就够。如果你的主控是STM32F103这样的小芯片,得提前规划好定时器中断嵌套,电流环中断优先级最高,速度环其次,位置环最低。

ESP32C3因为没有传统意义上的多级外部中断(它靠中断向量和优先级),实现多环嵌套时要比STM32稍微绕一点。我在ESP32C3上做过一个带位置环的直流电机控制,做法是用一个高优先级定时器产生1kHz的时基,在这个中断里完成速度环和电流环,位置环放到低优先级任务里跑200Hz。实测效果稳定,关键是不要在高速中断里做串口打印或者延时,否则中断周期漂移,控制效果会变得非常差。

5. 听力气的算法:电流环、FOC和零序分量注入

5.1 电流环的本质是“力气闭环”

如果说PID是“听目标”的主力,电流环就是“听力气”的核心。

直流有刷电机的电流环最简单:用采样电阻串在电机回路里,测电压换算电流,再把误差送给PI调节器,输出PWM占空比。整个过程本质是一个高带宽的电流闭环,目标是让绕组电流稳定在你希望的值。

BLDC电机就复杂了。三相绕组里的电流是交流的,直接采样得到的是随时间变化的正弦电流。要控制扭矩,需要做坐标变换——把三相静止坐标系下的电流变换到转子同步旋转坐标系下,变成直流分量id和iq,其中iq直接对应磁场切向力和转矩。这个变换就是Clarke变换和Park变换,合起来就是FOC(磁场定向控制)的基础。

5.2 FOC的“力气”逻辑和id=0控制

FOC的目标是让转子磁链和定子电流磁场保持最佳角度,从而实现最大转矩效率。最常用的策略是id=0控制,意思是不让电流产生削弱磁场的纵向分量,全部电流都用来产生转矩。

这个策略听上去简单,但实现细节不少。需要知道转子当前角度,不然Park变换方向可能反掉;需要精确采样三相电流,至少两相,第三相可以由基尔霍夫定律推出来。这些都依赖高性能的AD采样和中断实时性。

开源固件像一个分水岭:VESC主打电动滑板车和DIY载具,FOC做得很成熟,直接把电流环、速度环、位置环都封装好了;Moteus则专攻机器人关节,更强调力矩控制的带宽和精度。玩过VESC的人再上手自己写FOC,会发现电流采样和角度同步这块是最容易出问题的——角度传感器延迟哪怕十几微秒,高速运行时就会在电流波形上看到明显的畸变。

5.3 零序分量注入:三相逆变器的“偷电压”技巧

在有感FOC和无感FOC的代码里,经常能看到“零序分量注入”这个词。它跟听力气有什么关系?关系很大,因为它关系到逆变器能把多少电压送到电机绕组上,也就是最终能“给出多少力气”。

三相PWM逆变器在普通正弦波调制下,母线电压利用率只有约86.6%。这意味着逆变器最高能输出的相电压幅值比理论值低。零序分量注入的做法是在三相信号上同时加一个三次谐波(或其他共模量),让波形变得像马鞍形,但这个零序分量在电机绕组的中性点互相抵消,不会产生额外的转矩分量,却能让相电压的最大值升上去,电压利用率提升到接近100%。

说白了就是逆变器电压资源有限,电机需要大力气时,不靠这个技巧,电压提前到顶,电流环就饱和了,扭矩就上不去。所以很多大功率伺服驱动器和高性能电调都会用零序注入,来榨取母线电压的最后一点潜力。

5.4 参数辨识:让力气环知道自己该输出多少电压

电流环要输出准确的力气,得知道电机绕组的电阻和电感。R越大,稳态时需要越高的电压克服电阻压降;L越大,电流变化时需要的电压越高。

参数的获取有两个途径。一是查手册,但手册里的值往往是标称值,实际绕组温度一升高,电阻就会显著变化。二是自己做辨识实验:给电机注入一个低频小电流方波,同时采样响应电压,可以估算出R和L;让电机堵转,给一个直流电压,测量稳态电流,也能快速算出R。更精细的做法是用短时脉冲测试,测量电流上升斜率来推L。

顺便提一句,真正的电机设计阶段,工程师会拿Maxwell这类电磁场仿真软件去仿真气隙磁密、齿槽转矩和反电动势波形,算出来的电感电阻参数更贴近实际磁场分布。软件仿真参数和实测参数交叉验证,是避开“参数误差导致力气不准”的最佳路径。

6. 力气不是无限的:工作制、选型和散热

6.1 工作制S1和“能撑多久”的问题

聊“力气”不能只聊电流,还得聊一台电机到底能持续输出多大力气。这就要提到工作制。

S1是连续工作制,意味着电机在额定功率下可以无限期运行,温升能稳定在允许范围。S2是短时工作制,比如S2 30min,只在限定时间内能输出额定力气,超过就不行。S3是周期性工作制,用负载持续率衡量,例如S3 40%表示在一个周期内40%时间满载、60%时间停机。

很多新手挑电机只看功率数,买回来发现带不动,或者带得动但几分钟就烫得不行。原因就是把工作制搞混了。一台标S2的电机,它的额定功率只允许短时间输出;另一台标S1但功率更小的电机,长期跑反而更稳。所以我一直建议,在做连续运转的设备时,至少留30%的力气裕量,宁可选大一号电机,也别让电机长期工作在热极限附近。

6.2 无人机选型:听力气的反面教材

无人机电机选型就是典型的“听力气”场景。“动力系统要在油门中位附近悬停”,意思是螺旋桨的拉力必须等于飞机重量,这个拉力对应的电流就是电机的稳态工作点。选电机时,要从目标拉力反推油门位置、工作电流和发热温度。

KV值是个核心参数:KV高,转速提升快,但转矩特性偏弱,适合小直径高速螺旋桨;KV低,同样电压下转速低,但能拉更重的桨,输出力气大。装错KV值的电机,要么转速够但桨不够劲道,要么力气够但电机过热。

空心杯电机在小型无人机和精密设备里常见,它的转子没有铁芯,转动惯量极小,响应速度极快,所以特别适合做航模陀螺仪里那种需要快速修正的小电机。缺点是效率偏低、成本偏高。选它的人看重的往往不是力气大,而是“力气能很快调整到位”,本质上还是在跟“力气闭环”打交道。

6.3 车用驱动电机和VSG:力气与目标的最终合流

车用驱动电机的工况很有代表性:车里根本没有一台静止不变的目标,行驶需求随时变,踩踏板就是“目标”,路面阻力就是“力气”。整车控制器把踏板信号解析成目标车速或目标扭矩需求,发给电机控制器;电机控制器内部同时跑着力气环和转速环,实时平衡两者。

VSG(虚拟同步机)是近年新能源和微电网领域的热门话题,放在电机控制里理解,就是让逆变器驱动电机的行为模拟同步电机惯量,“既听电网的目标频率,又自动响应负载的力气需求”。这种控制策略的核心其实就是我前面说的双闭环在更高层面的合体:用外部“目标”决定内部“力气”,再用内部“力气”去支撑外部“目标”。

7. 从“听懂”到“调好”:我的调试经验和避坑清单

7.1 接线顺序和电源地线,永远是第一道坎

不管用STM32、ESP32C3还是别的控制器,我调试的第一步从来不是写代码,而是先确认电源和地线。

电机电流大,电源线粗,信号线细,这是原则。地线必须共地,否则PWM信号参考电位不一致,电机会随机抽搐。驱动板的逻辑电源和电机电源最好分开,尤其当电机电源是12V甚至24V时,逻辑电源用单独3.3V或5V稳压,不要从电机电源直接拉。L293D和TB6612都对电源纹波敏感,边上多放一个100uF电解电容和一个0.1uF陶瓷电容,能省掉很多奇怪的复位问题。

7.2 示波器看波形比看转速数字更靠谱

调速度环时,光看串口打印的转速数字,你很难判断系统为什么振荡。这时候要用示波器看编码器输出的AB相波形和PWM驱动波形,能直接看到占空比抖动和相位关系。示波器还能看出电机反电动势是否和PWM极性对得上——接反了,电机只会有气无力地嗡嗡叫,转速上不去。

用示波器看极对数的操作也别忽略,我上面说的“转一圈数波形周期”这个方法,在拿到二手电机或来源不明的电机时非常管用,五分钟确定参数,省得按猜的去写控制代码。

7.3 PID调参的实用顺序

我给新手的调参顺序是固定的:先开环验证电机能转,方向正确;再加电流环,确保电流跟随目标;然后速度环,设定目标转速,观察阶跃响应;最后位置环。

每一层调好再进下一层,千万别跳级。从“能转”到“听目标”,中间要多做几个来回的阶跃响应测试,记下超调量、调节时间和稳态误差。超调大就减Kp或加Kd,稳态误差大就加Ki,响应太慢就加Kp,一直调到波形干净利落。

7.4 开源固件不是万能灵药

VESC和Moteus这类开源电机控制固件,是很好的学习材料和快速落地工具,不是包治百病的“神药”。它们的参数配置页面非常强大,但如果不理解底层原理,乱调参数可能直接把驱动管烧了。我自己就在VESC上调过过大的电流限幅,电调负载时直接冒烟。

所以就算用开源固件,也希望你把前面几节的内容先过一遍,至少搞清楚极对数、电流限幅、速度环带宽这几件事。看懂之后再去动参数,才能真的“听懂”电机的脾气。

说到底,电机控制没那么玄,先想清楚你要让它“听目标”还是“听力气”,再从上到下把闭环一层层搭起来,剩下的就是耐心调参和反复验证。我自己每次拿到一台陌生电机,也还是老规矩:先看极对数,再测电阻电感,然后电流环起步,最后才谈位置和速度。这套流程走了很多年,一直没出大乱子,希望你也能用得上。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询