ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

FOC电流环带宽深度解析:从PI参数整定到工程调试实战

FOC电流环带宽深度解析:从PI参数整定到工程调试实战

各位做电机驱动的朋友,不管是搞伺服、机器人关节还是无人机电调,只要碰过FOC,几乎都会遇到“电流环带宽”这个词。这东西听着像教科书概念,但实际调参、选型、甚至写代码的时候,它随时会跳出来卡你一下。我最早调无人机电调的时候,对带宽的理解就是“越大越好”,结果把PI参数拉高之后,电机没转起来,噪声倒是先起飞了。后来沉下心把电流环带宽从物理层面捋了一遍,很多之前觉得“玄学”的调试问题才变得有迹可循。

这篇文章我打算把FOC电流环带宽这件事彻底拆开讲:先说它到底是什么,然后从电机模型和PI调节器推导出决定带宽的因素,再讲采样和PWM延迟如何限制带宽上限,接着聊工程上怎么测量和验证真实带宽,最后放一批我踩过的坑和排查经验。准备搞FOC或者正在被电流环调参折磨的朋友,这篇应该能帮你省不少时间。

1. 先搞清楚电流环在FOC体系里的位置

1.1 带宽不是孤立指标,它和“环”绑定在一起

FOC全称是磁场定向控制,核心思路是把三相交流电机通过坐标变换,从静止的abc坐标系转换到跟着转子磁场旋转的dq坐标系。这样一来,一个“交流问题”就变成了“直流问题”,三相互相关联的电流被拆解成两个独立的直流分量:d轴电流控制励磁,q轴电流控制转矩。电流环的作用,就是对这两个直流量做精确跟踪。

在整套控制架构里,电流环是最内层的那一个。外面通常还套着速度环和位置环,一环扣一环。位置环给定速度环的参考,速度环输出转矩电流给电流环,电流环最终通过PWM驱动逆变器把电压打到电机上。这种级联结构决定了电流环的带宽必须远高于外环,否则外环一快,内环跟不上,整个系统就容易振荡。

那“带宽”到底是什么意思?用通俗的话说,就是一个系统能多快地响应输入变化。比如说你给电流环一个正弦参考信号,频率逐渐升高,一开始实际电流还能跟着参考走,但到某个频率之后,实际电流的幅值开始衰减、相位开始滞后,这个转折点附近的频段就定义了带宽。工程上常用闭环幅频特性衰减到-3dB时的频率作为带宽指标。

1.2 为什么电流环带宽显得如此关键

电流环带宽之所以被反复强调,是因为它直接决定了电机转矩的响应速度。转矩与q轴电流近似成正比,电流跟得越快,转矩就能越快建立起来。对伺服系统来说,这意味着定位时间更短、跟踪误差更小;对机器人关节来说,这决定了力矩输出的刚性和抵抗外界扰动的能力;对电动工具和无人机来说,则直接影响启动爆发力和急加速性能。

同时,带宽还和稳定性挂钩。电流环是整个系统的内环,它的闭环特性会传递到外环。如果电流环带宽太低,速度环和位置环的动态性能就会被锁死;如果电流环带宽过高,可能带来噪声放大甚至内环失稳,外环再怎么调也白搭。

所以理解电流环带宽,本质上是在回答两个问题:这个环能跑多快,以及它稳定在什么裕度上。而这两个问题的答案,既取决于调节器参数,更受制于硬件平台和电机本身的物理特性。

2. 从电机模型出发,搞懂带宽的物理基础

2.1 电机电气模型其实是“电阻+电感”的一阶系统

先不考虑复杂的磁链耦合,只看dq坐标系下的电压方程。在同步旋转坐标系下,d轴和q轴的电压方程可以写成:

  • Vd = R·Id + L·(dId/dt) - ωe·L·Iq
  • Vq = R·Iq + L·(dIq/dt) + ωe·L·Id + ωe·λf

其中R是相电阻,L是相电感,ωe是电角速度,λf是永磁体磁链。右边带ωe的项是交叉耦合项和反电动势项,后面调谐的时候可以解耦处理。真正影响电流动态的,是R·I + L·(dI/dt)这一部分。

如果把耦合项和反电动势当成扰动暂时忽略,只看从电压到电流的传递关系,那就是典型的RL一阶惯性环节:

G(s) = I(s) / V(s) = 1 / (R + L·s)

这个一阶环节的极点位于s = -R/L,对应的转折频率就是R/(2πL)。R/L这个比值在电机参数里叫电气时间常数的倒数,它决定了电机绕组本身对电压变化的响应速度。电机的电感越小、电阻越大,转折频率越高,理论上电流就能跟得越快。

2.2 PI调节器怎么改变开环特性

电流环控制器最常用的是PI结构,也就是比例加积分。比例项给即时增益,积分项负责消除稳态误差。PI调节器的传递函数写成:

C(s) = Kp + Ki / s = Kp · (s + Ki/Kp) / s

这里Ki/Kp这个比值就是PI调节器的零点。把调节器串联在电机模型前面,就构成了开环传递函数。PI的零点如果正好落在电机RL极点的位置上,两个环节就发生了“极点-零点对消”,开环特性变成纯积分加一个可调增益,这时候整定变得非常优雅。

对消之后,开环传递函数近似为:

G_open(s) = Kp / (L·s)

闭环传递函数就是一个一阶惯性环节,带宽约等于Kp/L。所以Kp直接决定电流环的响应快慢,这也是“Kp越大带宽越高”这句话的理论来源。Ki则保证低频增益无穷大,确保稳态电流误差为零。

2.3 带宽和PI参数之间有个清晰的换算关系

工程上最常用的整定方法就是先把PI零点放到电机极点位置,也就是让Ki/Kp等于R/L,然后根据期望带宽算出Kp。如果我们想要一个ωbw的闭环带宽,那么:

  • Kp = L · ωbw
  • Ki = R · ωbw

这个关系式非常实用。知道电机相电阻R和相电感L,再定一个目标带宽,PI参数直接算出来。比如做一个目标带宽1000Hz的电流环,那就是ωbw = 2π×1000,Kp就等于L乘以6283,Ki等于R乘以6283。

需要注意的是,这种算法在连续域成立,实际离散化之后会有误差,尤其是当采样周期和电机电气时间常数接近的时候。离散化带来的误差会改变实际零点和极点的位置,可能导致对消不完全,后面我详细讲。

2.4 别忽略交叉耦合和反电动势

dq轴之间还存在速度相关的耦合项。高速运转时,ωe·L·Iq和ωe·L·Id会变得不可忽略,如果不做解耦补偿,d轴和q轴的电流会互相干扰,表现为电流波动和带宽表现变差。反电动势项同样会随转速升高而增大,它对电流环来说相当于一个缓慢变化的扰动,积分器能消除它的稳态影响,但动态过程中会消耗一部分电压余量。

所以高带宽电流环在实际电机上往往不是只调好PI就完事,还得配合前馈解耦或者去耦补偿。很多初学者发现带宽调上去之后电流仍然震荡,排查半天,其实耦合项才是主因。

3. 数字控制系统的延迟才是带宽的“天花板”

3.1 采样、计算、PWM更新构成了固定延迟链

模拟电路时代,电流环的延迟极小,带宽可以做到很高。但在数字控制时代,从电流采样到PWM输出电压之间存在一条固定的延迟链:AD采样需要时间,坐标变换和控制算法计算需要时间,PWM寄存器更新需要等到下一个周期才生效,逆变器本身还有死区。

这条链通常等效为1.5到2个PWM周期的纯延迟。比如20kHz的PWM频率,周期是50微秒,1.5个周期就是75微秒。这个延迟会直接压低可稳定的闭环带宽,因为它给系统引入了附加相移。

相位延迟对闭环稳定性的影响非常直接。开环传函在穿越0dB的时候,总相位延迟包含电机本身的部分和数字延迟的部分。延迟越大,穿越频率处的相位裕度越小,一旦裕度消失,系统就振荡。

3.2 理论上限和实用经验值

把数字延迟当作一个纯延时环节,控制理论上有经典结论:对于带一个采样周期延迟的积分对象,最大可稳定带宽大约为采样频率的1/6到1/10。20kHz的PWM频率下,这对应大约2kHz到3.3kHz的理论上限。实际工程中,考虑到噪声、死区、参数偏差和电机非线性,我一般建议带宽取到PWM频率的1/20到1/15,也就是1kHz到1.3kHz左右。

这也是为什么很多高性能伺服要用更高PWM频率的原因。PWM频率从10kHz提到20kHz,延迟时间减半,允许的电流环带宽上限翻倍。当然代价也很大,开关损耗上升、驱动芯片发热增加、死区占比变大,但这些是后话。

3.3 采样时刻的选择直接影响延迟

电流采样和PWM更新之间的配合时机非常讲究。常见的做法是在PWM载波顶点或者谷底采样,因为这时候相电流的变化率最小,采样值最稳定。采样完成之后,控制器在这个周期内完成计算,然后结果在下一个周期的载波顶点更新PWM占空比。这样从采样到输出电压生效,正好是1个PWM周期。

如果把采样放在PWM周期开始、计算放在中间、更新放在末尾,等效延迟会小一些,但留给控制计算的窗口就短了。反过来如果采样点选得不好,比如在开关切换瞬间附近采样,噪声极大,带宽再高也没用,因为输入信号本身就是脏的。

另外,采样率不等于PWM频率。有些控制器的采样率为PWM频率的一半,那延迟就进一步变大了。想要高带宽,尽量让电流采样与PWM同步,并且做到至少每PWM周期采样一次。多数主流电机控制方案就是这么做的。

3.4 低电感电机的“带宽陷阱”

低电感电机(典型如无人机电机、空心杯电机)的R/L极点频率很高,电机本身能承受很高的带宽设定。但恰恰是这类电机,在高带宽下最容易出现噪声问题。

原因是低电感意味着同样的电压纹波会激励出更大的电流纹波,电流纹波本身就携带大量高频噪声。如果把PI的Kp拉得很高,这些噪声会被直接放大,反映在占空比上就是PWM抖动和额外的电流谐波。严重的时候,电流波形看起来“毛刺感”很强,电机发出明显的啸叫。这个啸叫不是机械共振,而是电流噪声激励绕组振动。

所以低电感电机调高带宽的思路,不是无限堆Kp,而是同时在采样滤波、PWM频率、死区补偿上做文章,把噪声底先压下去,再逐步提升带宽。

4. 整定电流环带宽的完整过程

4.1 第一步:测准电机参数,否则整定全是空中楼阁

PI参数的核心是R和L,这两个参数测不准,后面一切都偏离。测量方法不复杂:用电压阶跃激励,记录电流上升曲线,电感可以从初始上升斜率推算,电阻可以从稳态电流推算。也可以用LCR表直接测,但要注意测量频率要和实际PWM频率接近,否则得到的电感值可能偏差较大。

还有个容易忽略的地方:电感是随电流变化的,尤其在磁路饱和之后。大电流下的电感可能比空载时小30%以上。调高带宽之前,最好在预期的峰值电流附近再测一次电感,用这个值计算PI参数,否则电流一大,实际带宽会比设计值高很多,系统可能失稳。

我见过不少案例:空载调试一切正常,一带负载就啸叫;电机发热之后R漂移,电流环突然开始振荡。这些都是参数随工况变化导致的。高带宽系统对参数偏差非常敏感,这可以说是电流环调试的核心矛盾。

4.2 第二步:极点对消整定法,先跑通

整定流程建议这样开始。先测量R和L,目标带宽先定个保守值,比如PWM频率的1/20。然后用前面说的公式算Kp和Ki,写进控制器跑起来。先加一个较小的阶跃参考,比如目标电流的10%,观察实际电流的响应曲线。

正常的响应应该是平稳过冲到一点就收敛,没有持续振荡。如果过冲大、衰减慢,说明相位裕度不足,需要降低带宽;如果响应太慢,可以逐步提升Kp,每次提升30%左右,同时观察波形变化,直到找到临界点。

Ki的整定相对简单,它主要影响低频段增益和稳态误差。Ki太小,稳态会有偏差;Ki太大,可能在低频段引入谐振峰,表现为电流缓慢波动。极点对消后,Ki跟Kp成比例,一般不单独动,除非电机参数有偏差。

4.3 第三步:用离散域设计,不要只管连续域

直接用连续域公式算PI参数,在PWM频率远高于带宽时是没问题的。但当PWM频率只比带宽高10倍左右时,连续域设计会和实际离散效果有明显差距。比如20kHz PWM配2000Hz带宽,已经是1:10,离散化带来的相位滞后开始显现。

更严谨的做法是把被控对象和零阶保持器离散化,在z域里设计。很多芯片厂商的电机库已经做了这一步,但如果自己写代码,至少要知道连续域算出来的参数在离散后会偏“激进”。保守一点的调整方式是把Kp乘个0.85到0.95的系数,补偿离散化误差。

补充一句,离散化方法不同也有影响。前向欧拉、后向欧拉、双线性变换,三种方式在高带宽下表现各不相同。工业上常用双线性变换或者前向欧拉,实际对比下来,双线性变换在相位精度上更好一点,代价是计算量稍大。

4.4 不同应用场景的带宽目标怎么选

不同应用对电流环带宽的要求差别很大,这里给几档参考:

  • 工业伺服,定位场景:500Hz到1000Hz就够,太高反而容易激发机械共振。
  • 机器人关节,动态力控:1000Hz到2000Hz,这需要20kHz以上的PWM频率配合。
  • 无人机电调,快速油门响应:800Hz到1200Hz,受限于散热和轻量化设计。
  • 高精度测试台架或特殊装备:2000Hz以上,通常要用GaN器件和超低延迟控制回路。

带宽定得太高,不只会带来噪声问题,还意味着整个系统对传感器精度、机械机构共振、参数漂移都变得极度敏感。所以选带宽不是“能上多少就上多少”,而是“在满足工况需求的前提下留出稳定裕度”。

5. 怎么实测电流环的真实带宽

5.1 扫频法:最直观的频率响应测量

控制器里给电流参考叠加一个幅值较小、频率可调的正弦信号,然后在不同频率下记录实际电流对参考的幅值比和相位差。从几十赫兹开始,逐步升到几千赫兹,就能描出一条闭环幅频特性曲线。幅值从0dB衰减到-3dB的地方就是闭环带宽。

扫频法看起来简单,实际操作中有几个细节要注意。注入的正弦幅值不能太大,太大会让电流饱和、占空比饱和,测出来的是非线性系统的响应而不是真实线性带宽;也不能太小,太小会被电流噪声淹没。一般取额定电流的5%到10%比较合适。另外每个频率点要等瞬态收敛后再记录数据,通常需要稳定一段时间。

频率点可以分布成对数间隔,比如10Hz、20Hz、50Hz、100Hz、200Hz、500Hz、1kHz、2kHz、5kHz。每点记录100到200个周期做平均,能有效抑制随机噪声。最后把这些点画成波特图,带宽一目了然。

5.2 阶跃响应法:快速判断带宽量级

不需要频谱分析工具的时候,可以用阶跃响应大致估算带宽。给电流参考一个小的阶跃,记录实际电流从一个稳态到另一个稳态的时间。对一阶系统来说,上升时间和带宽之间有个近似关系:带宽约等于0.35除以上升时间。

比如测出来上升时间0.5ms,那带宽大概就是0.35/0.0005 = 700Hz。这个估算方法不精确,但用于初步判断带宽是否在合理范围是足够的。如果上升时间远远小于预期,说明实际带宽比设计值高,要小心稳定性;如果上升时间远远大于预期,说明带宽被某些因素限制住了,比如电压饱和或者参数算错。

阶跃响应还能观察过冲量。过冲在10%到20%之间时,相位裕度大约在45度到60度,这是比较理想的状态。过冲超过30%,说明相位裕度很低了,系统接近振荡边缘。

5.3 测量时避开那些“假带宽”

实测过程中最容易犯的错误,是把电流采样本身产生的相位滞后误算成控制带宽的一部分。如果电流采样经过了较大的RC低通滤波或者过采样平均,测出来的带宽会明显偏低,但这不是控制环的问题,而是测量链路的问题。测真实带宽前要确认采样链路对带宽的影响可以忽略。

另一个干扰因素是电机在旋转时的反电动势和耦合项。最好在电机堵转或者极低转速下做扫频测试,把反电动势的影响降到最低,否则测出来的频率响应混入了速度相关的扰动。当然,如果是为了验证全速度范围内的稳定性,那又另当别论,需要做不同转速下的频率响应测试。

5.4 带宽和相位裕度要一起看

只看-3dB带宽是不够的,相位裕度同样关键。带宽高但相位裕度只剩十几度,这种系统一有扰动就抖。实际判断稳定裕度的方法是在带宽频率附近观察开环或者闭环的相位滞后。一个实用的经验法则是,如果在带宽频率处的闭环相位滞后小于135度,那对应的相位裕度相对充分。

测相位需要锁相参考信号和反馈信号之间的相对延迟。数字控制里记录参考信号的采样时刻和反馈信号的采样时刻,算出采样周期数乘以每个周期的相位,如果存在小数周期,还得做插值。这套操作不算太复杂,建议都在电机控制调试工具里做成自动测量,而不是靠示波器手动数格子。

6. 上过真机的才知道:常见问题和排查技巧

6.1 带宽报得高,实际响应却慢

这类问题经常出现在DSP或者MCU实现中。代码里算的是“电流环程序执行周期”,但实际PWM更新频率和采样频率没有对齐,比如采样用了20kHz,PWM更新却是10kHz,那电流环实际上只能以10kHz的速率更新。这种情况下,无论PI参数怎么整,等效延迟都是20kHz对应的两倍,带宽上限自然腰斩。

排查方式很简单:用示波器同时看PWM触发信号和ADC采样信号,确认是一一同步的。另外检查中断服务程序里是不是有耗时太长的代码段,导致有些周期里控制器没跑完,实际更新率低于设计值。

6.2 加带宽就啸叫,降回来就没声音

前面提到的低电感电机噪声问题。啸叫的机理是高频电流分量激励绕组产生机械振动,人耳能听到的频段正好在几kHz到十几kHz。当电流环带宽被调高,PI对高频噪声的增益变高,占空比出现高频抖动,绕组里的谐波电流随之增大。

处理方式有几个方向:先检查电流采样的抗混叠滤波,很多板子的采样电阻两端直接接了RC滤波,但截止频率和器件参数不对,导致噪声带宽很大。然后检查PWM死区时间是否做了补偿,死区引起的非线性会让电流波形产生畸变和谐波。最后才是调节器层面的对策,比如在PI后面加低通限幅,但这类手段会牺牲带宽,属于无奈之举。

合理的顺序应该是:先把采样链路和死区补偿做好,降低原始噪声底,再让带宽保持在设计值。

6.3 电流环单独测试正常,外环一加就振荡

这种问题通常不是电流环本身失稳,而是电流环带宽选得太高,导致高频增益过大,或者相频特性在速度环穿越频率附近出现了额外的谐振峰。数字控制中,外环控制器的更新频率通常小于等于电流环更新频率,外环在电流环带宽附近的增益和相位特性决定了它自身的稳定性。

遇到这种情况,我一般会把电流环的带宽降一点,或者调整速度环的低通滤波频率。有些高性能方案里会在电流环输出加一个二阶巴特沃斯滤波器来压掉高频峰,但这样也会小幅降低环路带宽,实际效果需要权衡。

6.4 参数漂移之后电流环性能突然变差

电机在工作时,绕组温度上升,电阻值跟着变大。铜的电阻温度系数大约是0.0039每摄氏度,用100度温升来算,电阻增加了近40%。电阻变大,RL极点位置就变了,如果PI零点还在原来算的位置,极点对消就不成立了。这时频率响应在中频段会出现谐振峰,电流环表现为欠阻尼响应,甚至振荡。

解决办法是让控制器具备参数自整定能力,或者至少在关键工况点做一次参数刷新。很多伺服驱动器有温度传感器,可以根据温升实时修正R值;没有传感器的,可以监控电流直流分量和电压关系在线估计R。工程上如果对成本敏感,最简单的办法是按最恶劣工况的R值来设计PI参数,确保即使参数漂移,系统也稳定。

6.5 速度环带宽和电流环带宽的匹配经验

这点虽然属于外环调参,但和电流环带宽强相关。我接触到的多数系统里,速度环带宽大约是电流环带宽的1/10到1/20。也就是说电流环如果是1kHz,速度环做50到100Hz是比较稳的。外环控制器无论调得多好,都受内环动态延迟约束。

因为电流环本身是一个带延时的闭环系统,它等效成一个低通滤波器串在速度回路的被控对象前面。速度环控制器输出的是电流参考,这个参考经过电流环低通滤波后才真正形成转矩。如果速度环要求得太快,相位差就会累积到临界值并振荡。这也是为什么调完电流环之后不要急着把速度环Kp拉满,先看一眼电流环实际带宽再决定。

7. 我的经验总结:几条能直接用的判断原则

调试过几十个FOC项目之后,我总结出几条关于电流环带宽的个人判断原则,不一定绝对正确,但多数时候能帮忙少走弯路。

第一条,带宽是“受约束的快”,不是“单纯的大”。把带宽调高之前,先算清楚三个数:PWM频率、等效控制延迟、电机RL极点频率。三者中最弱的那个,基本就是带宽的天花板。

第二条,听见噪声先别急着降带宽,先检查采样和死区。很多时候啸叫不是带宽的错,而是噪声底太高。把PWM死区补偿做好、采样滤波调对,同样的PI参数下噪声能降一大截。我做过一个无人机电调,同样的带宽目标,补偿死区后电流谐波下降了超过一半。

第三条,测试带宽要测闭环,不要只算开环。用示波器看阶跃响应或注入扫频信号,记录真实数据再下结论。很多芯片厂商的调参软件会给出估算值,但它基于理想模型,和真实电机参数偏差一多就不准了。

第四条,小步迭代,每次只动一个参数。把Kp升高30%,记录一个波形,再决定下一步。不要同时调Kp和Ki,那样出了问题都不知道是哪个参数引起的。调参记录本可以不用,但至少每次改动留个波形截图。

最后再分享一个小技巧。如果被低电感电机的电流噪声折磨,可以试试在电流采样之后、进调节器之前做一个简单的二阶低通滤波,截止频率放在2到3倍带宽的位置。这个滤波器能显著压低开关频率附近的噪声,而对带宽内的相位影响有限。我自己在好几个方案里这么做,效果都比较理想,代价是需要多花一点时间调滤波器的阻尼比和截止频率,避免滤波引起的相位滞后影响稳定裕度。

FOC电流环带宽之所以值得深入理解,是因为它把电机的物理参数、控制器的数字实现、硬件的采样能力全部串联在一起。搞清楚它,相当于把FOC控制的整个底层逻辑盘了一遍。这篇文章里的方法和经验都是从实际项目里走出来的,希望对正在搞电机控制的朋友有参考价值。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进