ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

PFC与无感FOC在PMSM驱动中的协同设计与带宽调校

PFC与无感FOC在PMSM驱动中的协同设计与带宽调校

几年前,我第一次把带PFC的电源级和PMSM无感FOC控制放到同一块驱动板上联调时,遇到过一个很典型的怪问题:电机空载转得很稳,一加载,母线电压明显往下掉一截,速度也跟着喘,甚至偶尔报过流。后来把PFC电压环的带宽从50Hz一路往下压,问题才慢慢消失。这让我意识到,做电机驱动不能只抱住FOC那一堆公式,PFC、母线电容、逆变器、电机是一条完整的能量链,任何一环的动态特性都会传到下一环。

这篇文章就以功率因数校正PFC与无传感器磁场定向控制FOC在PMSM电机系统上的应用为主线,把电源级和电机控制级之间的耦合关系拆开讲一遍。内容主要面向正在做家电变频、电动工具、伺服驱动、机器人关节模组的工程师,也适合刚入门想建立系统级认知的同学。你会看到PFC电路怎么选、电压环传递函数怎么设计、FOC里的带宽到底怎么理解、转子初始位置检测怎么做,以及无感FOC里滑模观测器和龙伯格观测器的差异和坑。

1. 为什么PFC和无感FOC会同时出现在一个PMSM驱动系统里

1.1 从电网到电机轴:两级功率变换的意义

一个典型的单相PMSM驱动系统,从插头到电机轴大概要经过这么几级:EMI滤波器、整流桥、PFC、母线电容、三相逆变器、PMSM。如果没有PFC,整流桥后面直接挂一个大电容,输入电流会变成很窄的尖峰脉冲,功率因数可能只有0.6左右,谐波大得吓人,过不了EMC标准,也过不了IEC 61000-3-2这类谐波限制。

PFC的存在价值有两个:一是把输入电流整形为正弦,并让它和输入电压同相位;二是把母线电压稳定在一个设定值,比如380V。第二个价值对FOC来说特别重要。PMSM的矢量控制需要在一个电压裕度内输出电流,母线电压波动太大,电流环的电压输出能力就会忽高忽低,严重时会引起电流环饱和、速度波动、甚至过压或者欠压保护。

无感FOC的价值则更多从成本和可靠性角度出发。去掉编码器、旋变或霍尔,电机端只要三根线和一根地线,省掉了线束、连接器、解码芯片,对空调外机、压缩机、风机这类安装空间小、工况恶劣、成本敏感的场景非常友好。但代价是控制算法必须自己把转子位置“猜”出来。

1.2 系统架构与典型参数:一个1kW级的参考设计

以我常做的1kW空调压缩机驱动板为例子,系统大致是这些参数:

模块典型参数
输入电压交流220V±20%,或宽压90~265V
PFC拓扑单相Boost,临界模式或CCM
PFC输出电压直流380V
母线电容470uF~820uF,耐压450V
逆变器开关频率10kHz~20kHz,常用16kHz
FOC电流环带宽1kHz~2kHz,与开关频率相关
速度环带宽20Hz~50Hz,视负载刚性而定
控制MCUTMS320F28022、峰岹系列或其他带C2000/M0+内核的芯片

选1kW这个功率级别,是因为这个量级最考验PFC和FOC的配合。功率太小,PFC随便搭一下都能过;功率再往上,母线电容和PFC电感的体积成本都会急剧上升。1kW附近的电机负载动态变化特别大,尤其是压缩机启动瞬间和堵转工况,母线电压的跌落和反弹幅度都很刺激。

1.3 PFC给FOC带来的“看得见的好处”

很多人觉得PFC只是应付谐波标准用的,这是误解。做过实际产品就会发现,有了PFC以后,FOC的母线电压补偿变得非常简单。假设没有PFC,整流后母线电压是馒头波经过电容滤波的脉动电压,轻载时接近整流峰值,重载时跌到只有一百多伏,FOC必须实时估算母线电压,否则SVPWM输出的伏秒值全都不准。有了PFC,母线电压恒定在380V,FOC只需要隔几个毫秒采样一次母线电压,用除法做个伏秒归一化就行,省心得多。

另一个隐性好处是启动能力。交流输入电压偏低时,没有PFC的系统在启动瞬间母线电压会被拉垮,很难完成堵转启动。PFC先软启动把母线建立到380V,再让FOC去做转子初始位置检测和强制启动,成功率明显更高。

2. PFC电路的拓扑选择与控制环设计

2.1 四类主流PFC拓扑怎么选

PFC电路在热搜词里出现频率很高,比如“四开关buck-boost单级PFC”“图腾柱PFC”“PFC和LLC电路”。说明大家在实际选型时最纠结的,就是拓扑。

我按应用场景给个比较实用的分类:

  • 临界导通模式Boost(CRM Boost):适合300W以下,电感和开关管轮流工作,二极管零电流关断,EMI相对好做,控制简单。缺点是开关频率不固定,电感设计要按最低频率核算,功率再大一点电流应力受不了。
  • 连续导通模式Boost(CCM Boost):500W到3kW的主力,固定频率,电流连续,控制环路成熟,成本适中。缺点是需要快恢复二极管或者SiC二极管来抑制反向恢复损耗。
  • 图腾柱无桥PFC:1kW以上高效率场景的最爱。它用两个慢管做工频整流,两个快管做高频开关,去掉了整流桥的损耗,配合GaN或者SiC开关管效率可以做到98%以上。缺点是电流采样和控制逻辑更复杂,而且反向恢复问题很棘手,必须用肖特基或宽禁带器件。
  • 四开关Buck-Boost PFC:主打宽电压输入,90V到265V之间都能稳定输出。传统Boost在低压输入时要升很高,电流应力大;四开关Buck-Boost可以分流处理升压和降压,适合电动工具、服务器电源这类宽压输入的电机驱动产品。缺点是四个开关管的驱动、死区和保护逻辑都复杂,整体成本偏高。

选型时不要只看效率曲线,还要看电机负载的瞬态需求。压缩机启动时负载力矩大,母线电压会突然掉下来,PFC的动态响应如果太慢,就要靠母线电容扛住这个瞬间。所以电容不是随便选的,它既要满足纹波要求,也要满足跌落时间要求。

2.2 PFC电压环传递函数与带宽设定

PFC的控制环一般有两个:内环是电流环,控制电感电流跟随输入电压波形;外环是电压环,控制母线电压稳定。很多人一上来就照着普通Buck电路调PI,结果母线电压低频振荡,这是没搞懂PFC电压环的传递函数。

在电流环已经闭环的前提下,电压环被控对象可以近似看成一个电流源给电容充电,也就是:

Gv(s) = Vout(s) / Iin(s) = 1 / (s·C)

其中Iin是PFC输入电流的平均值折算到输出侧的充电电流,C是母线电容。因为电流环带宽远高于电压环,这个模型在电压环带宽内是相当准确的。

PFC电压环的交叉频率一般设计在10Hz到20Hz,千万别为了“动态响应快”去把带宽压到50Hz以上。原因很关键:单相PFC的输出电压上必然带100Hz纹波,如果电压环试图抑制这个100Hz纹波,它就会反过来让输入电流发生畸变,功率因数直线下降。所以PFC电压环天生就该是个“慢环”,它只负责把母线电压的平均值稳住,把100Hz纹波留给电容去扛。

2.3 母线电容与低纹波设计:别让PFC拖累FOC

母线电容的容量至少要满足两个约束:一是100Hz纹波电压不能太大,二是负载突变时的电压跌落不能低于FOC的最低工作电压。

100Hz纹波估算有个工程公式:

ΔV ≈ Pout / (4π·f_line·C·Vout)

其中f_line是电网频率50Hz,所以对应的是2倍频100Hz。以220V输入、380V输出、1kW负载、470uF电容为例,算下来:

ΔV ≈ 1000 / (4 × 3.14 × 50 × 470e-6 × 380) ≈ 8.9V

也就是母线电压会有差不多9V的100Hz脉动,比例约2.3%,对FOC来说完全可以接受。但如果把电容降到220uF,纹波直接翻倍到19V,电机负载重的时候,母线电压瞬时值可能跌破SVPWM的线性调制范围,导致电流波形变差。

在动态跌落方面,还要考虑负载从空载突变到满载的瞬间。PFC电压环带宽只有十几赫兹,它响应不了毫秒级的负载变化,所以这个能量缺口必须由电容补。常见做法是把每瓦对应的电容量留到0.5uF到1uF,也就是1kW的驱动器至少用470uF到1000uF,这不是浪费,是给动态响应留余量。

3. PMSM模型与FOC控制环的带宽到底怎么理解

3.1 从数学模型到坐标系:PMSM在d-q轴下长什么样

FOC的核心思路,是把三相交流电机变换到随转子旋转的d-q坐标系里,让交流量变成直流量来控制。两相静止坐标系下的PMSM电压方程做Park变换后,得到:

ud = Rs·id + Ld·d(id)/dt - ωe·Lq·iq uq = Rs·iq + Lq·d(iq)/dt + ωe·(Ld·id + ψf)

其中ψf是永磁磁链,ωe是电角速度。转矩方程是:

Te = 1.5·p·(ψf·iq + (Ld - Lq)·id·iq)

对于表贴式PMSM,Ld=Lq,转矩只和iq成正比;对于内置式PMSM,Ld和Lq不相等,id注入负值可以产生磁阻转矩,这就是MTPA控制的来源。

做无感FOC之前,先把电机的Rs、Ld、Lq、ψf测准。我见过很多项目,电机参数表给的是名义值,实际绕线温度一上来,Rs能变到1.5倍,磁链也会随温度下降。参数不准,后面的观测器、电流环PI、弱磁控制全都会偏。

3.2 电流环PI参数计算与离散实现

电流环的被控对象是电阻加电感的一阶惯性环节,PI调节器如果能做到零极点对消,电流环开环传递函数就是纯积分形式,闭环带宽直接由PI增益决定。

具体计算方法是:

Kp = Ls × ωc Ki = Rs × ωc

其中ωc是期望的电流环带宽,单位是rad/s。假设电机Ls=1.2mH,Rs=0.6Ω,想要电流环带宽2kHz,也就是ωc=2×π×2000≈12566rad/s:

Kp = 1.2mH × 12566 ≈ 15.1 V/A Ki = 0.6 × 12566 ≈ 7540 V/(A·s)

这里Kp的单位是伏特每安培,Ki是伏特每安培每秒。离散化以后,Ki还要乘以控制周期Ts。用后向欧拉法,就是累积项里每周期加上Ki×Ts×误差。

实际调试不建议直接把计算值写进去,因为电压饱和、数字延迟、PWM死区都会降低系统稳定性。一般先把Kp计算值放到70%左右,Ki放到30%左右,确认电流环不振荡之后再加。

3.3 速度环、启动流程与转子初始位置检测

速度环是FOC的外环,带宽要设计得比电流环低很多,通常只有电流环带宽的1/10甚至1/20。电机轴上带着负载惯量,速度环带宽太高会引起机电共振,表现在声音上就是突突的啸叫,示波器上看速度反馈会有明显的振荡。

热搜词里有个“FOC控制中带宽的理解”,我多说一句。带宽不是PI参数本身,而是整个闭环系统能准确跟踪的指令频率范围。电流环带宽2kHz,意思是它能在2kHz以内跟踪电流指令的变化,超过这个频率会有幅值衰减和相位滞后。测量方法可以是给电流指令叠加一个正弦扰动,从低频率往上扫,找到闭环幅值跌到-3dB的频率点。实际现场没有网分仪时,用示波器直接在带载情况下观察dq电流指令和反馈的差距,也能大致评估。

无感FOC启动绕不开转子初始位置检测。压缩机、风机这类负载,停机后转子位置完全未知,直接上电压矢量很容易反转或者失步。常用的初始位置检测方法有三类:

  • 预定位法:给电机施加一个固定方向的电压矢量,让转子被拉过去对齐到已知角度,简单粗暴,但会让转子先动一个角度,不适合对反转有严格要求的场合。
  • 短脉冲检测法:给d轴注入一串短脉冲电流,根据电流响应的斜率差异判断转子磁极方向。这个方法需要做两次以上不同方向的脉冲对比,不需要转子大幅移动。
  • 高频信号注入法:在静止坐标系注入高频旋转电压,通过解调电流响应中的位置信息估算转子角度,适用于内置式PMSM。计算量较大,需要足够的ADC采样率。

启动流程一般是:先做初始位置检测,然后走I/f强制启动,电流幅值按斜坡上升,频率或角度按斜坡增加,让转子拖着走;当速度达到观测器能稳定工作的阈值后,再从I/f平滑切换到闭环FOC。切换那一下最容易出问题,角度不能跳变,电流幅值要连续。

4. 无感FOC转子位置估算:滑模观测器与龙伯格观测器实战对比

4.1 中高速段的反电动势估算与PLL提取

无感FOC在中高速段主要靠反电动势估算转子位置。PMSM的旋转会产生和速度成正比的反电动势,反电动势的相位里带着转子位置信息。

滑模观测器SMO的思路很直接:把电流作为状态,用开关函数让观测电流去跟踪实际电流,估计误差收敛以后,观测器里的等效控制量就逼近了真实反电动势。传统SMO的典型形式是:

L·d(i_hat)/dt = u - R·i_hat - K·sat(i_hat - i)

这里的K要取到足够大,保证滑模面可达,但太大会引入抖动。所以现在很多实现会用sat或sigmoid函数代替纯粹sign函数,减小高频抖动。

提取到反电动势eα和eβ以后,转子角度一般不是直接求反正切,而是通过锁相环PLL跟踪。反正切在信号噪声大时角度跳变很严重,PLL相当于一个带宽可调的滤波器,能平滑角度输出,同时天然给出速度估计。

龙伯格观测器的思路不太一样,它是基于电机模型的闭环状态观测器,靠增益矩阵把电流和磁链的估计误差反馈回去。相比SMO,龙伯格观测器对模型参数更敏感,但噪声表现更干净,尤其适合正弦反电动势的PMSM。

4.2 低速与零速问题:无感FOC最痛的一环

低速和零速时反电动势近乎为零,SMO和龙伯格观测器都会失效。这不是算法不够好,是物理上信息不足。所以无感FOC在低速段要么用高频信号注入,利用电机凸极效应获取位置信息,要么用I/f强制拖动,干脆放弃位置闭环。

家用压缩机和风机通常选I/f拖动,因为负载方向基本固定,不需要在零速保持大扭矩。如果你要做的是机器人关节或者低速高扭矩场景,那就得认真做高频注入。

还有一类场景是负载在启动瞬间有反向力矩,比如压缩机启动时可能处于高压差状态,如果只是匀速增加I/f角度,电机可能会短暂反转。这时候初始位置检测就特别重要,要先判断出转子所在区域,用一个偏置角度把启动转矩方向对准,再开始扫频。

4.3 观测器参数调校:从角度抖动到滤波相位补偿

观测器不是光一个增益就能搞定,它也要跟滤波器配合。反电动势经过一阶低通滤波后会带来相位延迟,这个延迟折算到电角度上是和转速相关的。速度越高,延迟角度越大,如果不管它,实际运行电流的d轴和q轴会偏,表现出来就是同速度下电流变大、效率变低。

工程上两个办法:一是按转速查表补偿角度滞后,这是最常用的;二是把低通滤波器的截止频率设置得高一些,但这样噪声又大。我的建议是先用PLL带宽做主要滤波,低通滤波只做初步高频抑制,这样相位延迟更容易补偿。

龙伯格观测器调试时,关注的是估计角度和真实角度之间的误差曲线。有条件的板子上可以先装一个临时的编码器或者霍尔信号做对照,在平台上跑速度斜坡,把估算角度和真实角度同时抓到示波器里看。角度误差如果是一个随速度增加而增大的线性趋势,那就是滤波相位补偿没有跟上;如果是周期性脉动,那多半是死区效应或者电流采样偏置没校干净。

5. 基于TMS320F28022的实现细节:开关频率、采样与抗饱和

5.1 外设资源规划:ePWM、ADC触发与PWM中心对齐

TMS320F28022这类芯片做FOC有几个关键外设要规划好:ePWM模块产生三相PWM,同时产生ADC触发信号;ADC在PWM计数器的中心点触发采样,正好避开上下桥臂开关切换瞬间的噪声。

开关频率的选择要看功率器件、散热和噪声。16kHz是个常见折中,高于人耳可听范围的上限,不会让人觉得刺耳,开关损耗也还能接受;8kHz虽然损耗低,但电磁噪声明显,很多客户一听就会抱怨。采样率就是等于开关频率,PWM中心对齐时,每个PWM周期采样一次三相电流和一次母线电压。

电流采样偏置是新手最容易忽略的。用低端采样电阻加运放,会有半个母线电压的偏置,如果不做上电自校准,电流反馈里一直带着直流偏置,FOC的id和iq会永远不正,电机起步就抖。校准要在逆变器不输出的情况下,采几十次求平均,把偏置存下来,每次上电都做一遍。

5.2 PI控制器的抗饱和与离散实现

FOC里的电流环输出是电压指令,最后要经过SVPWM映射到三相占空比,输出必然存在饱和限幅。如果PI积分项在限幅期间还在继续累积,就会出现积分饱和,表现就是指令变了,系统半天不响应,这就是典型的windup现象。

抗饱和的实现我一般这么写:

void pi_current_run(PI_CONTROLLER *pi, float ref, float fb) { float err = ref - fb; float u_pre = pi->Kp * err + pi->integral; float u_sat = clamp(u_pre, pi->out_min, pi->out_max); // anti-windup: 只累积没被饱和“吃掉”的那部分 pi->integral += pi->Ki * err * pi->Ts; pi->integral -= pi->Ku * (u_sat - u_pre); pi->out = u_sat; }

这里的Ku是抗饱和回退系数,一般取1/Kp附近的一个值,调试时从小到大试。效果是:输出饱和时,积分器把多余量吐回去,指令一旦恢复,输出立刻跟随。

5.3 带PFC的联调记录:示波器上应该看到什么

带PFC的板子联调,不能一上来就满功率跑。我习惯的顺序是先单测PFC,再单测FOC,最后合在一起做负载阶跃。

单测PFC时,用功率分析仪看输入功率因数和谐波。示波器上关注两点:一是电感电流波形,在工频峰值附近是否出现断流,这是临界模式PFC的典型特征,正常;二是母线电压和输出电压误差之间有没有低频振荡。如果母线电压在某个频率上缓慢起伏,把PFC电压环带宽调低,或者检查电容是不是太小。

单测FOC时,把PFC旁路掉,用直流电源直接供给逆变器,方便独立验证电流环和速度环。这时候可以看到dq轴电流的稳态波形,理想情况下id稳态在零附近,iq跟随负载。如果id有周期性波动,先怀疑电流采样相位或者角度误差,不要急着调PI。

最后合测,重点看突加载时母线电压的跌落深度和恢复时间,以及速度环和母线电压之间有没有耦合振荡。我在1.1节提到的那个加载喘振问题,就是在合测阶段暴露的,根源是PFC电压环带宽太高,负载突变时它和FOC的电流环形成了互动,把母线电压推得来回摆。

6. 常见问题与排查实录:从PFC振荡到无感启动反转

6.1 PFC电压环震荡导致FOC速度波动的实例

现象:电机空载运行正常,带载20%以上时,母线电压出现一个十几赫兹的振荡,电机转速也跟着周期性波动,甚至触发过压保护。

排查过程分三步。第一步,断开FOC,只让PFC带着一个固定的假负载电阻运行,观察母线电压是否振荡。如果还振荡,问题就在PFC本身;如果不振荡,问题出在PFC和FOC动态耦合上。

第二步,测量PFC输入电流波形。如果输入电流在工频峰值附近出现明显畸变,说明电压环带宽太高,影响了电流环的指令整形。这时把电压环交叉频率往下压,同时加大一些环路相位裕度。

第三步,看母线电容。我遇到过一次母线电容老化,ESR急剧升高,负载突变时电压跌落很深,PFC电压环误以为母线不够,拼命加电流指令,反而把系统推入振荡。电容用LC表测一下,别省这一步。

6.2 无感启动失败与反转:排查顺序和修复手段

现象:压缩机启动瞬间电机先往后抖一下,然后突然反向转一下,过流保护动作。

最常见原因是转子初始位置检测错误。压缩机停机时转子位置不在预期角度,如果初始位置检测的脉冲幅度不够,尤其电机反电动势常数偏小时,检测结果会被噪声淹没。先把初始位置检测的电流幅值调大,重复检测次数从1次改成3次取多数。

第二个原因是I/f启动的电流幅值和角度斜率不匹配。负载力矩大时,电流幅值要足够大才能把转子拖住;角度斜率增加太快,转子跟不上,失步之后就反转了。启动电流一般按额定电流的80%到120%去试,角度斜率从慢到快,先确认能跟上再提速。

第三个原因是切换点设得太低。观测器在低速段收敛不充分,角度误差还很大的时候就切换到闭环,电机当然不受控。把切换速度阈值提高,同时让I/f和闭环之间的电流指令保持连续。

6.3 电流环振荡、观测器角度脉动的快速判断表

现象可能原因处理方向
d轴电流高频抖动,声音发毛电流环Kp过大,系统接近不稳定降低Kp,或降低电流环带宽
电机中速时电流平缓但效率低反电动势相位补偿不足检查角度补偿表、PLL带宽
低速启动时角度脉动大初始位置检测信号弱或ADC偏置未校准增强检测电流、重做偏置校准
加载瞬间速度明显下沉后回弹电压环带宽不足、母线电容偏小加大电容、提高PFC动态响应
高速时电流波形有削顶SVPWM过调制,母线电压不足提高母线电压或增加弱磁控制

6.4 我的几条排错心法

排错最忌一上来就动PI参数。先给系统分块,电源块、控制块、执行块,每块单独验证。PFC和FOC放在一起振荡,先拆开试;FOC抖,先看采样和角度,再动环路。

示波器比仿真器更重要。仿真是个理想世界,现场全是死区、延时、偏置、饱和。很多问题看波形一眼就能判断,比如角度脉动是锯齿形还是正弦形,对应的问题机理完全不一样。

如果你发现转速越高、估计角度误差越大,先怀疑滤波相位补偿,而不是观测器增益。角速度乘以时间延就是相位误差,这是线性关系,最好排查。

7. 最后再分享几条经验,以及下一步可以扩展的方向

说实话,做了几年电机驱动,我最深的体会是:PFC和FOC单独拿出来都是成熟技术,但放在一个系统里,难点全在“共地”“共享母线”“共享一个MCU”这些耦合环节上。PFC是慢系统,FOC是快系统,快系统和慢系统之间靠母线电容解耦。你调试时如果总觉得哪里在共振,第一反应先去看母线电容容量和电压环带宽,而不是去盯电流环的PI。

还有一个容易被忽略的小地方:上电顺序。千万别让PFC和FOC同时使能。我习惯先让PFC软启动,母线电压稳定到设定值以后再启动FOC。反过来如果FOC先跑,PFC后启动,母线电压从整流电压爬升到380V的过程中,FOC的SVPWM调制比会突然跳变,电流可能瞬间失控。做个简单的母线电压阈值判断,电压到位以后再使能电机。

如果你接下来还要往高功率或者更高效率方向走,可以考虑PFC后面再一级LLC,形成PFC+LLC+FOC的三级架构。LLC负责隔离和二次调压,FOC的母线电压更加稳定,电源侧的效率也能做上去。我在一些充电桩和商用空调项目里见过这种方案,整机效率能做到95%以上,电源级和电机级各自解耦,调试起来反而比单级PFC+FOC更清爽。

这个项目里用到的观测器、电流环带宽、抗饱和这些思路,同样适用于感应电机和内置式PMSM的MTPA控制。无感FOC不要只当一套公式来抄,把它当成一个实时系统来调理,调通了以后,你会对整个能量链的控制有完全不一样的感觉。

RELATED READING

延伸阅读

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