1. 项目概述与核心需求拆解
1.1 为什么我最终选了ADRC来控PMSM
做过永磁同步电机控制的人都知道,工程上最通用的一套组合拳是:速度外环PI调节器、电流内环PI调节器,再加上SVPWM和坐标变换,就能让电机稳稳转起来。这套方案量产成熟、调参路径清晰,被无数伺服驱动器验证过。但每次负载突变、参数摄动或者转速范围拉得很宽时,PI那套东西就开始暴露天花板——你调出来的好手感,换个工况就垮了。
我在某次做高速主轴项目时遇到了一个不算极端但足够头疼的问题:电机转动惯量实测值和铭牌标称差了将近25%,带载启动时速度环PI参数怎么调都躲不过超调,后来试了小范围增益自适应,复杂度一下就上去了。那段时间我翻了大量关于抗扰控制的材料,最后落地到自抗扰控制(ADRC)上,这套理论的核心思路非常朴素:与其费劲去建模扰动,不如把内外部扰动一起“总扰动”化,用一个扩张状态观测器把它估出来,再在控制律里直接抵消掉。这个思路放在PMSM上天然合适,因为PMSM的数学模型高度耦合、参数敏感,恰好是ADRC发挥作用的典型场景。
这篇博文就把我完整搭建“基于自抗扰控制ADRC的永磁同步电机仿真模型”的过程讲透,从原理拆解到Simulink模型细节,再到参数整定和踩坑实录。适合两类人看:一类是刚接触ADRC、想把它落到PMSM仿真里的研究生或工程师,另一类是PI切ADRC已有基础、想系统拉通模型细节的开发者。这里不聊玄学,全部基于能跑的模型和真实的仿真行为。
1.2 ADRC和PMSM结合的定位:不是替代一切,而是补PI的短板
先说清楚一个容易误解的点:ADRC不是神,它更适合用在扰动量可观、模型不确定性比较大的场合。对于PMSM,如果你是在额定工况附近做恒速控制,PI配合前馈已经足够好,硬换ADRC反而会因参数整定不熟练导致系统抖动。我自己用过之后的判断是:ADRC最大的价值在于“用一个结构统一的控制器,把从低速到高速、从空载到满载的抗扰能力整体拉平”,省去了PI分段增益切换的繁琐。
PMSM在dq旋转坐标系下的电压方程和机械运动方程大家都很熟,核心是电流环的交叉耦合项、反电动势项和负载转矩项。在传统PI框架里,交叉耦合通过解耦项补偿,负载扰动靠积分项慢慢顶。在ADRC框架里,这些全部被当作“总扰动”的一部分,由ESO实时估计并补偿。这个思路获得的收益在仿真里看得非常明显:突加负载时速度跌落更小、恢复时间更短,且整个过程不依赖复杂的电机参数精确建模。
最终这个项目的Simulink模型要做到什么样的程度,我给自己定了三条验收标准:第一,转速环和电流环都采用ADRC结构,且参数全部可调,不做隐藏的“黑盒封装”;第二,模型能分别输出电磁转矩、转速、dq电流、三相电流和观测器扰动估计量的波形;第三,具备与经典PI控制的同工况对照功能,方便证明ADRC的行为差异。有了这三点,模型本身就是一个很好的教学与研发工具。
2. ADRC的核心原理与PMSM控制系统设计的映射
2.1 ADRC三大块的用途和执行逻辑
ADRC的理论框架可以用我们最常听到的“三件套”来概括:安排过渡过程的跟踪微分器(TD)、扩张状态观测器(ESO)、以及非线性或线性的状态误差反馈控制律(NLSEF或LSEF)。放到工程实现里,每个部件都要落成具体的Simulink模块,所以必须把它们在PMSM里的职责搞清楚。
跟踪微分器在速度环里解决的是“快速性”和“超调量”这对矛盾。传统阶跃给定直接进入PID后,微分项容易放大噪声,积分项又容易造成超调。TD把给定的阶跃信号布置成一条平滑的过渡轨迹,让速度给定先“柔和”地变化,控制器再去追踪这个过渡量,最终被控量几乎无超调。你可以简单理解成:它相当于给控制目标加了“斜坡规划”,但比普通斜坡规划更聪明的地方在于它考虑到了系统的最大加速度能力。
扩张状态观测器是整个ADRC的灵魂。它的基本思想是把系统模型写成积分串联型,把所有模型偏差、外部扰动、参数摄动都合并成一个扩张状态,然后通过观测器在线估计出来。在PMSM的速度环里,ESO的输入是给定电流和速度反馈,输出除了速度估计值外,还有一个“总扰动估计值”。这个扰动估计值包含了负载转矩、摩擦、转动惯量变化等因素的综合影响。在电流环里,ESO输入的可以是电压给定和电流反馈,输出则是电流估计值和含有反电动势、交叉耦合项的“总扰动”。
非线性状态误差反馈控制律则负责把误差转换成控制量。它做的事情类似“比例+微分”的智能化升级:误差大时增益自动增大,误差小时增益自动调小,并且加入微分先行,避免了PI控制中积分饱和和微分噪声放大的缺点。线性ADRC里的控制律退化成简单的PD形式,但配合ESO的扰动补偿依然比传统PID有更强的抗扰性。
2.2 线性ADRC还是非线性ADRC,我的选择和建议
理论上非线性ADRC性能更好,但工程实现里非线性函数容易引入高频抖动,参数又多,实测中调试难度陡增。所以当前工业界和多数开源实现都倾向使用线性ADRC(LADRC),核心优势是参数少、整定规律明确——整个ESO只需要调观测器带宽,控制律只需要调控制器带宽和补偿系数。
我这次搭建的PMSM仿真模型,电流环和速度环用的都是LADRC结构。两个环的控制律都简化成P控制器加扰动补偿,ESO都采用全阶卢恩伯格观测器形式的线性扩张状态观测器。仿真结果证明,只要带宽参数设置合理,线性形式已经能覆盖我们遇到的实际工况的绝大部分需求,而且非常容易在Simulink中建立子系统,方便后期修改和复用。
2.3 在PMSM模型里哪些量被当作“扩张状态”
要搭对模型,先要分清每个模块里“状态是什么”“扰动是什么”。在电流环中,以q轴电流为例,其动态方程可以写成:
Lq·diq/dt = uq - Rs·iq - ωe·Ld·id - ωe·ψf
把被控对象的名义模型视为“iq的积分与电压uq之间的关系”,那后面三项因数就全归入总扰动d,ESO估计的就是这三项的综合量。这样一旦负载或者转速变化导致反电动势、耦合项改变,ESO会立刻把这些变化捕捉到,并在控制量uq中产生对应的补偿电压。
在速度环中,机械运动方程中的负载转矩TL、摩擦系数B的变化、以及转动惯量J的偏差,统统都进入ESO的总扰动估计。控制量是q轴电流给定,扰动估计量则是“等效负载电流”。这个设计的意义很大:当突加负载时,ESO会快速地估计出这个等效负载电流,并且直接在电流给定上减去一个前馈性质的补偿量,比PI慢慢积分去顶要快得多。
3. Simulink模型的完整搭建过程
3.1 整体框架:从电机方程到模块布局
我把模型的顶层结构做成五个部分:PMSM电气与机械方程模块、坐标变换模块、SVPWM与逆变器模块、ADRC控制模块、以及信号观测与对比模块。这五部分的连接顺序是一目了然的闭环结构。
在Matlab/Simulink中新建模型时,我建议把采样时间统一设置为1e-5秒或更小,因为PMSM仿真中SVPWM和电流环对步长敏感。若用定步长,建议使用ode3或ode4算法;若使用变步长,则要注意SVPWM的调制频率与实际计算频率的一致性,否则可能会出现电流波形毛刺。
PMSM本体模型我建议不直接使用Simscape的现成电机模块,而是自己按dq坐标系下的电压方程和转矩方程用S函数或basic模块搭出来。原因有两个:一是自建模型内部节点清晰,方便随时观察反电动势、磁链、电感变化等中间量;二是ADRC对扰动估计的验证需要一个“可控的模型来制造参数摄动”,自建模型可以自由注入不确定性条件,比如突然把电感调偏20%看ESO的反应。
3.2 PMSM本体数学模型的Simulink实现细节
在dq旋转坐标系下,PMSM电压方程如下:
ud = Rs·id + Ld·did/dt - ωe·Lq·iq uq = Rs·iq + Lq·diq/dt + ωe·Ld·id + ωe·ψf
电磁转矩方程和运动方程为:
Te = 1.5·p·(ψf·iq + (Ld - Lq)·id·iq) J·dωm/dt = Te - TL - B·ωm
在Simulink中搭建时,我习惯用“积分器置初值 + 代数运算”的方式搭建:先由电压方程求出did/dt和diq/dt,经过积分得到id和iq;再由转矩方程算Te,代入运动方程得到转速ωm,再通过积分得到转子位置角度θe。这里要特别小心角度和转速的单位问题:电角速度 = 机械角速度 × 极对数,角度必须做角度归一化处理,否则仿真过程中角度持续累加会出现数值溢出或SVPWM计算的奇异性。
转子位置角度用于Park变换和逆Park变换。很多初学者在这个环节会栽跟头:直接用机械角度参与Park变换,或者忘记把转子初始角度加上,导致dq轴电流发散或转矩方向错误。我的习惯是把电角度取模到2π范围内,仿真中没有出过问题。在一个地方用电气角度的“连续斜坡”用于计算反电动势项,另一个地方用“取模后的角度”用于坐标变换,保证SVPWM计算正常。
3.3 坐标变换与SVPWM逆变器模块
坐标变换分为Clark和Park两部分。三相电流通过Clark变换得到αβ轴分量,再过Park变换得到dq轴电流。这里面有两个易错点:Clark变换的等幅值变换系数2/3和等功率变换系数sqrt(2/3)会造成后续PI参数截然不同,建议全程统一使用等幅值变换,并且在自建PMSM模型里转矩系数也要对应使用1.5倍关系,否则会出现电磁转矩计算偏大或偏小。
SVPWM模块我采用了经典的七段式实现。Simulink里可以自己搭,也可以使用Matlab内置的SVPWM生成器。自己搭的好处是把扇区判断、作用时间计算、占空比生成这些步骤全部可视化,方便调试。扇区判断原理上就是基于电压矢量在αβ轴的投影组合,整个计算流程建议用一个Matlab Function模块实现,输入为αβ轴电压、直流母线电压和控制周期,输出为三路比较值或占空比。
值得提醒的是,SVPWM输出的是开关信号,必须经过“逆变器模型”才能转成施加到电机端的电压。最简单的逆变器模型是理想开关模型,用三对互补的信号直接生成三相端电压,再接LC滤波或者直接接电机。更接近工程实际的可以用Simscape的IGBT模块,不过仿真速度会变慢,占用内存多,初期调试强烈建议先用理想模型跑通逻辑,再换详细模型验证波形细节。
3.4 ADRC各模块的Simulink实现
这是项目的核心。我按速度环和电流环分两层构建。
速度环ADRC子系统输入包括:转速给定、转速反馈、以及q轴电流反馈,输出为q轴电流给定。子系统内部包含三个模块:跟踪微分器模块、线性扩张状态观测器模块、反馈控制律模块。
跟踪微分器我选了最简洁的离散形式。速度给定wr_ref经过如下迭代:
x1(k+1) = x1(k) + h·x2(k) x2(k+1) = x2(k) + h·fhan(x1(k) - wref, x2(k), r, h0)
这里的fhan函数实现“最速控制综合函数”,其效果是产生一条无超调且快速逼近给定位的轨迹。参数r表示跟踪速度,值越大给定到达目标越快、但容易引起系统冲击;h0是滤波因子,适当取大可以帮助滤除给定信号中的噪声。基于我的经验,速度环r先设为电机最大加速度的三分之二,再根据仿真波形微调,不要一上来就给很大。
电流环的ESO设计需要的是系统一二阶参数。因为电流环动态快,可以忽略反电动势变化在单步控制周期内的影响,所以被控对象近似为一阶惯性加扰动结构。但为了保持与速度环框架的统一性,我仍按二阶模型设计ESO,把反电动势项作为扰动处理。
ESO在Simulink中的实现我直接使用的是Embedded MATLAB Function编写,代码风格接近伪代码也方便读者复用。核心递推过程如下:
e = y_hat(1) - y; z1_hat = z1_hat + h·(z2_hat - β1·e + b0·u); z2_hat = z2_hat + h·(-β2·e);
这里y是系统的实测输出,u是控制输入,b0是控制增益的估计值,β1和β2是观测器增益,与观测器带宽ωo的关系为β1 = 2ωo,β2 = ωo^2。按照极点配置思想,观测器带宽越大,估计收敛越快,但对噪声也越敏感。实际仿真中我把速度环ωo设为控制带宽的5到10倍,电流环由于本身动态快,倍数会相对低一些,通常在3到5倍之间。
反馈控制律部分则是最简单的线性组合加扰动补偿:
u0 = kp·(r - z1) - kd·(z2) u = (u0 - z3) / b0
对于速度环,r为TD输出的平滑后速度给定,z1为ESO估计的速度,z2为其微分即加速度,z3为总扰动估计,b0为电流到加速度的增益估计值。这个控制律的结构强大之处在于,ESO一旦准确估计出扰动,控制量会在前馈端把扰动抵消,系统被还原成名义上的“积分串联型”,从而可以用非常简单的P或PD控制器稳定闭环。
3.5 双环协调:电流环响应带宽必须高于速度环
搭建双环ADRC有一项硬约束,即电流环“带宽”必须显著高于速度环,否则整个嵌套结构会出现环路稳定性问题。这一约束在PI控制中同样存在,但在ADRC中由于ESO的加入更容易被忽视。
具体实现上,我电流环ADRC的控制带宽大概设置在速度环的10到20倍左右。举例来说,如果速度环响应闭环带宽约50 rad/s,那么电流环控制带宽至少给到500 rad/s甚至更高,观测器带宽则再高一档。这样的设计思路是让电流环对速度环呈现一个“几乎理想”的快速执行器,从而保证速度环的ESO建模是可信的。
在模型里,速度环和电流环各用了一个离散采样率。速度环可以和PWM周期同步,比如10 kHz;电流环必须比速度环快,我通常设置为20 kHz的采样率。在Simulink离散系统里,这可以通过两个不同的采样时间模块实现。否则,两个环都用一个采样率,速度环的动态跟不上,整个模型的实际行为就会偏离ADRC理论预期。
3.6 数据观测与被动对比模块
为了证明ADRC的效果,我在模型里加了三组被动对比模块,它们不参与控制,只用来记录数据。第一组变量记录转速指令、实际转速和TD输出,用来观察过渡过程的平滑性。第二组记录q轴电流给定、反馈电流和ESO的总扰动估计,用来评估扰动补偿的响应时间。第三组记录d轴电流,用来观测电流环解耦和抗扰的效果。
这三个观测组我都用To Workspace模块把数据写进Matlab工作区,并加一个简单的波形显示模块,方便即时查看信号趋势。在调参过程中,我几乎不去看功率器件层面的高频波形,而是主要观察上述低频包络波形,一则信息密度高,二则容易定位问题。等到模型跑通后,再用示波器模块对比三相电流、SVPWM输出电压等波形,确认实际逆变过程没有异常。
4. 关键参数整定与调参经验的系统梳理
4.1 先从电流环的b0开始:控制增益的估计
ADRC调参有一个“命门”:b0的准确性。b0代表控制输入到状态微分的增益,在电流环中就是电压到电流变化率的系数。如果b0偏差太大,ESO的扰动补偿会出现系统性的静差或振荡。
以q轴电流环为例,b0的物理含义就是iq对uq的比例增益。忽略电阻和反电动势影响时,b0 = 1/Lq。所以初步就把b0取为1/Lq,即b0 = 2000(假设Lq = 0.5 mH)。但注意,实际模型中电阻Rs和反电动势存在,ESO会把剩余部分当作扰动估计出来并补偿掉,因此b0即使偏差20%,系统也能运行,只是补偿速度和精度会变差。
速度环的b0相对麻烦,因为它是电流到加速度的增益。根据运动方程,b0近似为 1.5·p·ψf / J。如果电机极对数为4,磁链为0.2 Wb,转动惯量为0.001 kg·m²,则b0约为 1.5×4×0.2÷0.001 = 12000。这个值作为初值通常够用,后续根据负载突变时的速度跌落幅度再微调。
我的建议是:b0先按物理估算值设置,然后通过一个阶跃负载试验来看速度跌落深度和恢复时间。如果速度快跌后出现明显振荡,说明b0偏大;如果恢复很慢且观测器估计量跟实际负载变化明显滞后,则b0偏小。这个规律在调参全程中可以反复使用。
4.2 观测器带宽的控制律带宽的分配策略
LADRC的优点是参数整定天然解耦。观测器带宽决定扰动估计的速度和噪声容忍度;控制器带宽决定系统的响应速度和稳定裕度。两者不需要反复互相纠缠。
电流环控制带宽ωc_iq,我给定为500 rad/s,ESO带宽ωo_iq设为2000 rad/s。这样的设置保证ESO能迅速看到电流的变化和反电动势扰动,误差收敛时间大约为1/2000秒,远快于电流环动态过程。如果继续提高ωo,会开始放大电流采样噪声,仿真波形里出现类似高频抖动毛刺,这是观测器带宽过高的典型症状。
速度环控制带宽ωc_n设为50 rad/s,ESO带宽ωo_n设为300 rad/s。速度环被控对象是机械系统,惯性大,扰动主要是负载转矩和摩擦变化,ESO响应不需要像电流环那么变态。300 rad/s已经能在5毫秒级完成扰动估计,对一般负载突变应用足够。再往上提,速度反馈中的量化噪声和编码器噪声会被放大,导致电流给定叠加明显噪声。
在模型里我将这些带宽参数做成模型工作区的变量,用set_param或直接改基础工作区数值就可以在仿真时批量切换。调整时建议每次只改动一组,比如只动速度环ESO带宽,观察速度阶跃响应、负载突变响应、以及电流噪声这三类指标,再做下一步。
4.3 仿真步长对ADRC参数的影响
ADRC是基于连续时间积分器设计的,仿真时离散化后会受到步长影响。步长太大时,ESO递推误差会累积,表现是速度反馈波形上叠加一种低频“喘振”,明明给定恒定,速度却上下缓慢浮动,负载突变后容易出现极限环振荡。步长太小时,仿真速度过慢,调试效率极低。
我实测后发现,双环ADRC的模型在PWM频率10kHz下能稳定运行,步长设置为10微秒即可。电流环等效采样频率20kHz,模型步长10微秒刚好满足奈奎斯特要求,并能保证ESO的输入信号足够平滑。如果只想快速验证逻辑、不关注电流谐波细节,也可以把步长放大到50微秒,但要同步降低速度环带宽,否则模型可能发散。
4.4 实操中的参数初值速查表
我把初版调试参数整理成了一张速查表,方便读者复现时直接代入。注意,不同电机参数会导致b0完全不同,需要按公式自行换算。
| 参数 | 变量 | 初值建议 | 调整依据 |
|---|---|---|---|
| q轴电流环b0 | b0_iq | 1/Lq | 电压阶跃观察电流斜率验证 |
| 速度环b0 | b0_n | 1.5pψf/J | 负载突变观察速度跌落深度 |
| 电流环控制带宽 | wc_i | 500 rad/s | 电流响应快慢,过大则噪声大 |
| 电流环观测带宽 | wo_i | 2000 rad/s | 扰动估计速度与噪声的平衡 |
| 速度环控制带宽 | wc_n | 50 rad/s | 速度阶跃超调量与响应时间 |
| 速度环观测带宽 | wo_n | 300 rad/s | 速度环抗扰能力与噪声平衡 |
| TD跟踪速度系数 | r | 电机最大角加速度的2/3 | 阶跃跟随快且无超调 |
| TD滤波因子 | h0 | 较控制周期大3-5倍 | 滤除给定量噪声 |
这组初值不是万能,但可以保证模型稳定不炸。在后面章节的常见问题里我会详细展开典型问题如何通过这些参数排查。
5. 仿真结果解读:我要重点观察哪些波形与指标
5.1 阶跃给定下的速度跟踪表现
模型搭建完成后,我给了一个从0加速到1500转/分的阶跃速度指令,并在0.3秒时突加5牛米负载,然后整体观察速度响应情况。
在初版PI参数下,典型的PI控制速度波形会在阶跃瞬间出现一个约10%的超调,然后经过大约0.1秒回到稳态。而ADRC配合TD环节后,速度上升过程呈现平滑的一阶“斜坡-圆弧”形态,几乎没有超调,到达给定时间也与TD参数设定的过渡时间基本一致。这里需要特别说明:这是TD的功劳,并不是ADRC的专利,如果用PI加斜坡规划也能做到类似效果。真正的差异体现在后段的负载突变响应上。
继续观察阶跃负载加入的瞬间。PI控制下回稳时间较长,恢复过程中速度还会因为积分器再调整出现短暂的反向越动;ADRC的速度曲线则呈现一个更小的瞬时跌落和更快的回拉,并且回调过程更干净,没有反向越动这种多余往返。这背后的机理就是ESO在负载突变时快速给出扰动估计的增量,控制量里立即产生对应的补偿电流,相当于按比例前馈把负载的电流需求提前供给,而不是等转速跌下去再由积分器“攒劲”修正。
如果你在仿真中看不到上述差异,最可能的原因是ESO带宽给得太低,扰动估计滞后太多;或者b0严重偏差导致补偿增益错误。注意观察ESO输出的总扰动估计曲线,正常情况它应该在负载突变后迅速跳变到与负载转矩相关的稳态值。
5.2 电流环表现:d轴电流是否被牢牢压制
PMSM控制里一个重要指标是d轴电流是否被控制到零。在ADRC电流环控制下,d轴电流的调节也使用LADRC结构,目标值始终为零。初始阶段,由于反电动势和凸极效应,d轴电流可能出现较小脉冲,但ESO补偿到位后,应很快收敛到零。
在正常运行过程中,如果id波形在转速上升或突加负载时出现明显脉动,说明观测器带宽过低或者电流环b0不准,ESO来不及补偿耦合电压。调整方法简单:提高电流环ESO带宽,观察id还是不是能咬住零点。如果带宽已经很高,依然有固定频率振荡,则可能是采样率低了,把电流环采样率从10 kHz提高到20 kHz大概率能解决。
这里有个习惯性操作:我在模型里会额外记录“未补偿时的耦合电压”这个虚拟量,即ωe·Lq·iq。通过观察这个量和ESO扰动估计值之间的跟随关系,就能直接看懂ESO在干什么。这个虚拟量不参与控制,只做探针用途。
5.3 与PI控制的同工况定量对比
在同一模型里切换ADRC和PI控制,做了一组定量对比。速度阶跃从0到1500转/分,超调量PI约12%,ADRC约1%且来自离散化误差;调节时间PI约0.14秒,ADRC约0.09秒(TD设置较快时还能再缩短)。突加5牛米负载,速度跌落PI约80转/分,恢复时间约0.25秒;ADRC速度跌落约40转/分,恢复时间约0.08秒。
这组结果的绝对值依赖于具体参数设定,PI参数也是经过仔细整定的,不代表调参水平差距。但趋势是稳定的:ADRC在同等动态品质下,对负载扰动的抑制能力更强;在同等抗扰能力下,调节时间更短。这在负载频繁变化的场合,比如数控进给轴、机器人关节,价值非常明显。
当然,仿真里ADRC的代价是模型算法复杂度提升,计算量比PI略有增加。但在现代MCU上百兆主频下,这基本不是问题。真正要关注的还是调参经验门槛。
6. 常见问题与排查技巧实录
6.1 模型一跑就发散,先从这四处排查
仿真发散是ADRC入门的头号拦路虎,但原因通常集中,按照顺序排查效率最高。
第一,检查ADRC控制量的增益符号是否和电机模型一致。PMSM模型里,q轴电压增大,iq增大,Te增大,速度上升,这是一个正增益链条。如果b0取了绝对值而没有确认符号,ESO会“反向补偿”,系统必然发散。第二,检查仿真步长,尤其是离散ESO递推的稳定性。步长太大时ESO极点会越出单位圆,最简单的验算就是减半步长看是否还在发散区间。第三,检查坐标变换角度是否持续准确,若角度取模模块遗漏,高频电磁量会引发奇异性。第四,检查给定信号是否直接跨过TD进入控制律,如果是这样,阶跃输入会产生过大的控制量初值,导致起步震荡发散。
6.2 ESO观测器输出的扰动估计饱和如何应对
ESO的扰动估计是可以发散的。负载转矩突然增大时,ESO输出可能瞬时冲到很高的值。如果直接把这个值除以b0并叠加到控制量上,控制量会长期饱和,反而导致大量能量涌入电机,引起过流。
我在模型里给控制律输出加了限幅环节。电流给定限幅为额定电流的1.5倍,输出到逆变器的电压参考限幅为直流母线电压的约0.9倍。限幅怎么处理有很多工程细节:两种做法截然不同,一种是直接饱和截断,另一种是抗饱和积分式调整。我的建议是最外层限幅以后,ESO内部仍然保持正常运算,不要因为限幅而停止扰动估计的递推,否则系统会出现超调甚至振荡。
出于简单可靠考虑,我在电流给定限幅上是这样处理的:计算总控制量u之前,先把u0按照b0除以放大倍数做了等效换算,再统一限幅。效果实测下来比单独两端分别限幅更容易调。
6.3 噪声、毛刺和“高频嘤嘤”问题
速度环ESO带宽调得很高时,转速反馈里的量化噪声会被显著放大,表现为电流给定和实际电流上叠加高频毛刺,电流波形隐约带“疙瘩”、发不出力但发热增加。解决手段不是牺牲带宽,而是给ESO输入信号加前置滤波。
有两种方式可以选择:一是在反馈通路上加一阶低通滤波器,截止频率设在观测器带宽的三分之一左右;二是在ESO递推中引入状态估计修正增益,等效降低观测器对高频噪声的响应。我推荐第一种,因为实现简单、效果直观,且滤波相位延迟可以通过稍稍提高控制带宽来补偿。这个操作在仿真中没有成本,在硬件上也就多一个滤波电容或软件滤波算法。
6.4 速度环和电流环“抢带宽”的诊断技巧
双环ADRC里有一种很隐蔽的问题:速度环参数整得很好,但加上电流环ADRC之后性能反而不如速度环单独接理想电流源模型时的表现。原因往往是电流环带宽设置的只比速度环高一点点,两个环路发生动态耦合。
诊断技巧很简单:在速度环ADRC系统里,把那部分实际电流响应曲线和电流给定曲线做比较。如果实际电流跟踪给定需要的时间超过速度环动态时间的十分之一,就说明电流环带宽拖后腿了。此时优先提高电流环控制带宽,而不是去动速度环参数。我在某些时候甚至直接先把速度环反馈拉回理想电流源的临时模型,确认速度环逻辑没问题后,再接回完整电流环模型调试,这样将定位界限切得非常干净。
6.5 仿真内存爆炸和模型跑得太慢的优化
ADRC模型本身不复杂,但如果你仿真时间长达数秒且开了示波器高频记录,To Workspace会保存海量数据点,内存占用很容易飙升。建议调整输出数据记录策略:高频信号(如SVPWM输出电压、三相电流)只记录最后零点几秒;低频包络信号(如速度、转矩)才完整记录。如果确实需要长时间高频记录,把相关信号降低采样输出,使用速率转换模块或直接将To Workspace的采样时间设置为控制步长的整数倍。
7. 一点个人的项目体会
这个ADRC+PMSM的仿真模型做下来,我最深的感受是:ADRC不是一个更难调的方案,而是一个换了一套逻辑的调参方案。PI调参是在处理“误差的过去和变化”,ADRC调参则是在处理“扰动的现在和影响”。前者直觉性强,但每次面对非线性负载变化都要重新设计补偿策略;后者初始上手有门槛,但一旦理解ESO的估计作用,后面的系统拓展会变得非常统一。
我自己经历过的“豁然开朗”瞬间,是亲眼看到突加负载时ESO估计曲线瞬间跳变,同时q轴电流给定几乎同步变化的那一次。那一刻我突然明白,所谓自抗扰并不是自动把所有问题解决,而是把“对抗扰动”这件事变成系统内部一个透明的、可观测的过程。你帮它一个b0初值,它回报你一套对全工况相对均匀的控制品质。
最后分享一个小技巧:这个模型后续如果要扩展到无位置传感器控制方向,ESO里估计出来的反电动势相关信息已经是现成的观测结果,不需要另起炉灶再做一套位置观测器。你可以把速度环ESO的状态估计量直接用于磁链和角度估算,基于这个模型改造,比从PI控制的模型做起要顺得多。这个方向我目前也在继续探索,等有更完整的仿真对比再写一篇专门的文章展开。