PMSM 的数字化控制做了这么多年,从最早的查表法开环起动,到后来各种无感算法、参数辨识、模型预测控制轮番上阵,有一个问题始终绕不开,那就是离散化带来的延迟。业内对这个问题有个非常经典的表述,叫做“逃不掉的1.5Ts”。只要你的PMSM控制算法是用DSP、MCU这类数字处理器跑的,只要PWM波形是定时器加比较寄存器生成的,这个1.5Ts延迟就会如影随形地刻在你的电流环、速度环甚至位置环里。你不处理它,它就一定会用某种方式“回报”你——轻则电流波形畸变、噪声变大,重则高速满载直接电流环发散、过流烧板。
这篇文章我想把1.5Ts这件事彻底讲透。它不是教科书里一个轻飘飘的公式推导,而是实实在在决定你的FOC控制系统到底稳不稳、顺不顺、上限能跑多快的关键细节。我会从延迟的物理构成、对控制性能的影响机理、工程上的补偿手段,以及我这些年调试中踩过的坑这几个维度展开。
1. PMSM离散化控制中的那块“隐形绊脚石”:1.5Ts是怎么来的
1.1 从连续域到离散域,控制器的“时差感”
很多刚开始接触PMSM矢量控制的朋友,最先研究的是Park变换、Clark变换、SVPWM这些经典内容,觉得把坐标变换搞明白了,把PI参数整定了,系统就能跑。但真正把代码烧进板子、波形一抓之后,才发现问题全出在“离散”这两个字上。
连续域里,我们设计的PI控制器是连续的积分和比例运算,输出一个连续的电压指令。但数字控制器做不到连续,它的运行模式是周期性采样、周期性计算、周期性更新输出。假设PWM定时器的周期是Ts,那么整个控制链路的时间轴是这样的:在一个确定的时刻,ADC对相电流和母线电压进行采样,采样完成后DSP开始执行电流环、速度环的计算,计算出新的电压指令。但这个新的电压指令在当前PWM周期内往往来不及生效,需要等到下一个周期的重载时刻才能更新到比较寄存器里,进而改变输出电压波形。
这一来一回,就出现了“时间差”。指令值和实际输出电压之间,存在一个无法消除的系统性延迟。这个延迟的精确大小,就是我们常说的1.5Ts。
1.2 1.5Ts延迟的构成:一拍计算延迟加半拍保持器延迟
这个1.5Ts到底由哪几部分构成?我在调试时习惯把它分为两个来源,一条是计算延迟,一条是零阶保持器延迟。
首先是计算延迟,也就是采样到更新的那一拍。比如典型的中心对齐PWM模式,定时器在三角载波的顶点或者底点触发ADC采样。ADC转换有固定耗时,DSP执行坐标变换、PI调节、SVPWM算法也有耗时,这个耗时即便优化到极致也不可能为0。所以绝大多数工程实现下,采样得到的电流和最终更新到PWM寄存器之间的时间差就是接近一个PWM周期Ts。这一点在中断里执行全部算法的方案中尤其明显,对应代码就是那种“采样后整段计算完再更新占空比”的写法。
其次是零阶保持器延迟,也就是数字输出保持带来的半拍延迟。PWM输出波形在每个周期内是一个恒定的占空比,我们把这个占空比当作理想电压给定来理解时,实际逆变器输出的平均电压在一个周期内保持不变。这种零阶保持特性,在频域里的等效效果就是额外的0.5Ts延迟。
两部分加起来,1.5Ts就这么来了。这个延迟对控制系统来说是个“天然的低通滤波器”,会降低相位裕度,影响系统动态响应,放大电流环的交叉耦合。
我在实际工程中有一条经验:不管你用的是什么主控,不管是TI的C2000系列还是GD32、STM32,只要你是用单周期内“采样-计算-更新”这一套经典流程,1.5Ts的延迟模型在分析层面就一定是适用的。哪怕你的CPU跑得很慢,算得再久,只要算法是在中断里顺序执行的,计算延迟依然会占据接近一个周期。
2. 延迟不补偿迟早出事:1.5Ts对控制性能的连锁影响
2.1 有效电压矢量被“拧歪”:角度错位带来的耦合放大
在做FOC的时候,电流内环输出的是d-q旋转坐标系下的电压指令。如果没有任何延迟,这个电压指令在下一瞬间就能被逆变器精确输出,电压矢量的方向和坐标变换时使用的电角度完全吻合。
但1.5Ts的延迟意味着什么呢?它意味着“现在”计算出来的电压指令,真正作用到电机端子上的时刻已经是1.5个控制周期之后了。在这1.5个控制周期里,电机转子还在旋转,转子磁极位置已经前进了一段电角度。
这个角度错位带来的后果非常直观:原本的d轴电压指令因为输出晚了,落在实际转子位置坐标系中时,分量会偏向q轴;q轴电压指令也同样会向d轴方向泄漏。原本两个完全解耦的电流环,因为延迟变成了一个互相牵连的系统。表现到电流波形上,就是d轴电流和q轴电流互相影响,转速升高时电流纹波变大,转矩脉动增加。
我在调一款额定转速12000rpm、极对数为4的PMSM时,开关频率设为10kHz,那么Ts就是100微秒。在额定转速下,电频率为800Hz,1.5Ts对应的角度延迟是1.5 × 100e-6 × 2π × 800,大约为0.754rad,也就是43度。这是一个相当离谱的角度错位,完全不能忽略。如果不做补偿,固定参数PI电流环在这个速度下基本没法正常运行,d轴电流会随着q轴电流的增大而出现明显的扰动。
2.2 高速区尤其危险:相位裕度坍塌与电流环震荡
延迟对PI控制器最致命的影响在相位层面。电流环本质上是一个带积分作用的负反馈系统,它本身存在一定的相位裕度。1.5Ts的延迟会引入额外的相位滞后,滞后角度与信号频率成正比。当转速升高,电流环调节频率也随之升高,延迟换算成相位滞后就会急剧增大。
如果原本设计的相位裕度是45度,1.5Ts在额定工况下吃掉了30度,剩下的裕度就只剩下15度。这时候系统已经处于临界震荡的边缘,一旦外界有一点扰动,比如负载突变、电压波动,电流环就会开始震荡,轻则电流噪声大,重则直接触发过流保护。
我曾接触过一个基于高频注入的无感FOC项目,开关频率20kHz,额定转速6000rpm。低速阶段一切正常,但高速阶段电流波形开始明显“毛躁”,示波器上看相电流的包络有间歇性振荡。后来通过软件逐拍测试,确认就是1.5Ts延迟导致的高速相位裕度不足。加了延迟补偿之后,高速段的电流波形立刻干净了很多。
2.3 低载频大功率场景下的“双倍伤害”
还有一种情况容易被忽视,那就是轨道交通、电动汽车等大功率应用。这些场合受限于IGBT或者SiC模块的开关损耗,开关频率往往只有2kHz到5kHz。此时的Ts非常大,比如2kHz开关频率对应500微秒的采样周期,1.5Ts就是750微秒。
大功率PMSM的电感通常较小,电气时间常数短,额定转速高,有的甚至需要弱磁才能跑满。这种情况下1.5Ts的延迟对应的高电角度偏差更加离谱,如果只看电流环计算出来的电压指令,它的角度可能和实际需要差出几十度甚至更多。这直接导致d轴去磁作用变弱,q轴转矩电流受牵连,系统的弱磁控制性能严重受限。
低载频场景下,1.5Ts带来的问题不只是“电流环带宽上不去”这么简单。它还直接压迫了过调制策略的发挥空间。过调制本身要求电压矢量的相位和幅值都准确,延迟一大,过调制区域的控制精度大幅下降,母线电压利用率虚高,实际输出能力却不足。这是大功率工程师经常被“绕进去”的经典困局。
3. 实战解法:工程上怎么把1.5Ts补偿回来
3.1 角度补偿:最基础也最见效的一步
1.5Ts补偿的经典思路是从旋转坐标变换的角度入手的。既然延迟造成的影响等效于电压矢量在时间上滞后了一个固定的电角度,那么我们在做Park变换和逆Park变换时,人为把它对应的电角度补进去,就可以抵消这个滞后。
具体操作思路是这样的:正常FOC里,采样时刻会读取当前的电角度θ。如果不对延迟做补偿,后续坐标变换全程用的都是这个θ。延迟实际发生在电流采样到电压作用之间,所以我们应当把用于坐标变换的电角度改成预测值,也就是在θ的基础上加上一个延迟导致的电角度增量。
这个增量怎么算?就是电角速度乘以延迟时间。电角速度等于转子电频率,用当前转速计算得到,延迟时间是1.5Ts。公式上可以写作θ_comp = θ + ω_e × 1.5Ts。其中ω_e是电角速度,单位rad/s。
在具体实现时,这个补偿角度的计算逻辑并不复杂。关键是明白补偿的对象是谁:补偿的是“当前采样时刻”和“电压实际作用时刻”之间的角度差,而不是把速度环的角度也一起乱补。做这个补偿时要特别注意,电流采样进来的坐标反变换(也就是观测d、q电流,用的是逆Park变换)和电压指令输出时的Park变换,两个位置都要统一用同样这个预测后的电角度。
我遇到过一些新手工程师只补偿了电流采样那一侧的坐标变换,没有补偿电压输出那一侧,结果补偿不但没效果,反而引入了更大的相位错乱。正确的做法是,整个电流环内部使用的电角度统一使用补偿后的角度,速度环因为带宽较低,可以沿用直接测量或者观测出来的原始角度。
3.2 模型预测控制(MPC)天然融合延迟补偿
如果你是做高性能伺服或者EV驱动系统,固定PI结构的电流环到了带宽极限之后,延迟补偿光靠角度前馈可能就不够劲了。这时候模型预测控制往往是值得考虑的选项。
MPC处理1.5Ts延迟的核心优势在于,它本身就是基于离散时间模型设计的。控制器的前向预测天然把延迟建模到了预测方程里。在MPC的预测模型中,当前时刻计算的电压矢量不会直接作用于当前控制周期,而是作用到下一个周期,这个一拍延迟在预测迭代中直接体现为状态方程的移位操作。因此,MPC不像PI控制器那样需要额外的角度补偿环节,它的延迟补偿是内嵌在算法结构里的。
举个例子,电流预测控制在每个控制周期计算使得“下一拍预测电流”等于参考电流的电压矢量。这个下一拍电流的预测,已经开始考虑了当前开关状态作用于电机的结果,以及一拍延迟带来的中间状态变化。实际的实现过程中不需要额外的1.5Ts补偿计算,因为预测模型已经覆盖了。
但必须提醒的是,MPC对模型参数的依赖比PI强很多,尤其是定子电感和磁链参数。如果电感偏差太大,预测出来的电流轨迹会和实际差别明显,最终稳态性能和抗扰性能反而可能不如调好参数的PI。所以MPC不是灵丹妙药,工程上要结合参数辨识和鲁棒设计来用。
3.3 史密斯预估器思想在电流环的变体应用
还有一类思路是从传递函数层面直接对延迟进行解耦,类似史密斯预估器。在电流环中,可以把被控对象分成无延迟部分和纯延迟部分,通过观测器把延迟之前的电流状态估计出来,然后对这个估计状态做反馈控制。
这个方法在纯延迟比较明显、且模型相对精确的场合有一定优势,但实现复杂度比角度补偿高不少。我个人在传统PI方案中不太推荐直接上史密斯预估器,因为PMSM本身是一个多变量耦合系统,它的延迟影响部分可以用角度补偿干净利落地抵消,再用观测器去“未来预测”实际电流,在工程上的性价比并不高。
更实用的是另一种变体思路:在电流采样上做文章。通过调整ADC触发的时刻,让采样点尽量靠近PWM周期中电压“平均作用效果”最稳定的位置,从源头上减小采样和器件实际响应之间的“错觉差”。配合延迟补偿,系统性能可以进一步提升。
4. 我踩过的几个坑:1.5Ts补偿实操中的纠结点
4.1 补偿角度算错一个符号,电流从收敛变成发散
我最早做延迟补偿的时候,因为程序里角度预测是“从当前角度往未来推”,我当时直接用采样时的角度加上偏移量就行。但有一次我在另一套移植代码里,发现工程师把补偿方向写反了,采样角度不减反加,导致高速段的电流环直接震荡发散。
这个问题的根源在于对坐标变换方向的理解没对齐。在FOC中,转子位置角增加的方向是有明确约定的——如果转子磁极位置角随着转动正向增大,电流从三相静止坐标变换到d-q旋转坐标时,变换矩阵中用到的角度是当前转子位置角。电压从d-q旋转坐标变换到三相静止坐标时也要用同样的角度。
延迟补偿的本质是把“控制时刻”对应的角度,替换为“输出作用时刻”对应的角度。如果转子正转,采样时刻在t0,输出作用时刻在t1 = t0 + 1.5Ts,那么t1时刻转子角度确实比t0大。所以补偿角度是加一个正值。但工程中经常出现极性和转向定义不同,比如编码器正方向与电机旋转方向相反,此时补偿方向就要跟着变。
我的排查建议是:先在低速状态下给定一个固定方向的q轴电流,看电机是否按照预期方向旋转且q轴电流反馈稳定。然后把补偿功能打开,逐步提高转速。如果转速一高电流就发散,把补偿角度的符号翻转再试一把。实测能快速定位是不是符号问题。
4.2 补偿量随速度变化,固定补偿害死人
另外一个常见坑是把延迟对应的角度补偿当成了常数。1.5Ts的物理时间确实是常数,但对应的电角度是转速的线性函数。转速为零时,补偿角度是零。转速越高,补偿角度越大。
有些工程师偷懒,标定老半天给定一个固定补偿电角度,比如10度,结果低速可能没啥问题,一旦上了高速,角度补偿不足的问题又回来了。这个坑我在现场排查过好多次。唯一的正解是让补偿角度跟随实时转速或电频率变化,也就是把ω_e × 1.5Ts这个乘积实时算出来。
在具体实现上,如果转速信号来自编码器或旋变,那么电角速度可以直接用位置差分计算。但如果位置传感器的采样频率本身有限,差分出来的速度信号波动较大,建议对速度做一个适当的低通滤波,或者干脆用速度环输出的估计转速。在无感FOC中,转速由观测器提供,这一般比差分值平滑,直接用即可。
4.3 多采样、单更新与单采样、多更新之间的取舍
还有一类工程问题是关于PWM触发模式的。硬件上有些主控支持在一个PWM周期内多次触发ADC和比较更新,也就是多采样、多更新模式,窗口可以做到1/4周期甚至更短。此时控制系统等效延迟时间明显缩短,从1.5Ts变成了0.75Ts甚至更短。
但多更新模式不是没有代价。它要求ADC转换、电流环计算时间足够短,否则中断堆叠会让系统混乱。对于CPU资源紧张或者算法链路很长的项目,贸然上多更新可能得不偿失。我通常的做法是:在硬件能力允许的前提下,先保持单更新模式,把1.5Ts补偿做扎实,再考虑是否通过多更新进一步提升动态响应。
而我提到的“单采样、多更新”则是一个坑——有些工程师把PWM周期拆成多段,但由于算法还是按一个周期执行一次,造成实际采样数据和PWM更新时机错位。这种模式下延迟不再严格等于1.5Ts,有的拍可能变成2Ts甚至更乱。如果项目代码突然出现周期性电流毛刺,优先排查是不是这个模式配置出了问题。
5. 离散化控制的其他隐藏细节:延迟不只是1.5Ts
5.1 PWM死区与管压降:比1.5Ts更难处理的非线性
1.5Ts延迟是线性系统视角下的延迟问题,但真正到了电流波形细节层面,还有一部分延迟之外的东西在捣乱,那就是PWM死区和功率管压降。
死区时间会使得实际输出电压矢量和理想电压矢量之间产生偏差。这个偏差与电流方向有关,尤其在小电流低速工况下,死区导致的电压误差占比非常可观。补偿逻辑是:根据三相电流方向,估算死区造成的平均电压误差,把它折算到电压指令中进行前馈补偿。但电流过零点附近的电流方向判断非常容易出错,如果补偿方向判断错,不仅没消除死区影响,反而会扩大谐波。我的经验是在电流过零点附近设置一个滞回区间,电流绝对值小于阈值时不进行死区补偿,避免频繁切换补偿方向引入新的谐波。
管压降的问题同理。IGBT和MOSFET的导通压降会改变输出电压实际幅值,在低母线电压大电流场合误差一样不可小觑。这类非线性问题没法用统一的传递函数建模,往往需要配合在线参数辨识,或者做基于电流幅值的查表补偿。
5.2 反电动势观测器对延迟更敏感
1.5Ts延迟不只会影响电流环本身的稳定性和动态性,它还会通过“电流-转速”这条链路传递到无感控制的反电动势观测器中。
无感FOC中常用的滑模观测器、龙伯格观测器等,都是基于电压方程的。电压方程里的定子电压在理想情况下是控制器输出的电压指令,但我们都知道实际逆变器输出电压是延迟之后的版本。如果用没有补偿的电压指令直接代入观测器,那么观测器看到的“反电动势”里就包含了一部分由于电压延迟导致的误差项。当转速很高、延迟角度很大的时候,这个误差项会直接污染观测器的角度输出,造成观测位置抖振甚至失锁。
这是我做无感FOC时最头疼的地方。角度补偿做得好不好,直接决定了无感系统的高速上限。我通常会在观测器内部使用经过死区补偿和1.5Ts补偿之后的等效电压估算值,而不是直接使用原始指令值来构建电压方程。这个细节极其关键,很多高速无感项目跑不上高速,排查到最后往往都是这一处的问题。
5.3 仿真的坑:延迟建模仿真不一致导致结果失真
做离散化控制研究,仿真和实际节奏不一致也是个坑。很多工程师在Matlab/Simulink里搭建FOC模型时,只用了连续域的电机模型和PI控制器,仿真吻合度很高,一到硬件就翻车。原因在于仿真模型里根本就没建PWM的离散采样和零阶保持,1.5Ts延迟在仿真里是隐身的。
搭建贴近真实的FOC仿真,必须在模型里体现离散化这一步。最简单有效的方法是使用离散PI控制器,并且在每个采样周期内执行一次算法更新,PWM占空比的输出使用ZOH模块保持一个周期。这样仿真波形才会出现延迟带来的相位滞后。更进一步,可以把AD采样的触发时刻和PWM重载时刻对齐,模拟真实的时序,这样就可以在仿真中检验你的延迟补偿算法到底对不对。
我在自己常用的仿真模型里一定会加一个可以开关“1.5Ts延迟补偿”的环节,供不同工况对比。这个习惯帮我节省了大量调试时间。建议所有做PMSM控制的同行在仿真阶段就把这个细节做进去,而不是等实物波形出了问题再去倒推。
6. 再聊点实际调试时的判断方法和个人体会
关于1.5Ts延迟的补偿效果,现场有没有快速判断的手段?我通常使用两种方法判断。
第一种是电流环带宽扫频法。在电机稳定运行在某个转速下,给q轴电流参考叠加一个小幅度的正弦扰动,扫描扰动频率,同时观察q轴电流反馈实际到达的幅值和相位。如果补偿正确,电流环在较高频率段还能维持较好的跟随特性,相位滞后会明显变小。如果补偿不够或者过度,幅频特性曲线在高频段会出现异常抬升或者快速跌落,这是比较直观的判断依据。
第二种是检查d轴电流的解耦效果。对一个表贴式PMSM,在MTPA控制下,给定q轴电流阶跃时,d轴电流应当尽量保持恒定。如果d轴电流出现了明显的反向脉冲或者振荡,说明d-q轴耦合没有解干净,1.5Ts的延迟补偿可能还不到位。
实际调试中,我发现很多工程师把精力花在PI参数自整定上,而忽视了延迟补偿这个基础环节。说实话,一个调得再好的PI,在1.5Ts延迟没有被处理的前提下,能做到的高速性能上限很低。反过来,把延迟补偿做扎实,PI参数即使不是最优,系统稳定性也会比“只有PID、没有延迟补偿”的情况好很多。
这么多年做电机控制的经验让我越来越相信一个判断:整体系统方案的冗余度,往往藏在那些看起来很小的“细节魔鬼”里。1.5Ts就是这样一个细节魔鬼。它不显眼,不花哨,模型上看似只是一个指数项e^(-1.5Tss),却是无数整车、伺服、无人机、家电项目在高速调试时绕不过去的那道坎。建议大家在自己的项目代码里对电流环相关坐标变换加一个可以动态调整的角度偏移量,然后再对比有无补偿去跑高速工况,亲眼看一看它对电流环相位裕度的巨大改善,这比我说一百句都更有说服力。希望这篇关于1.5Ts的经验梳理,能帮你在PMSM离散化控制的路上少走一段弯路。