4. 电流环参数辨识:电阻R和电感L的测量方法、反电动势常数Ke的获取、惯量J和阻尼B的辨识
做FOC电流环调参,最怕什么?
我个人觉得,最怕的是「盲调」。不知道电机参数,上来就调PI,调了半天可能连方向都是错的。你想想看,电流环的数学模型里,电阻R、电感L、反电动势常数Ke,这些都是硬参数。不知道它们,你的PI参数就是空中楼阁。
这一章,咱们就把这些参数一个一个扒出来。我会结合我这些年踩过的坑,告诉你哪些方法靠谱,哪些方法看着花哨其实不顶用。
核心观点:参数辨识是电流环调参的基石。R和L决定了电流环的带宽上限,Ke决定了速度环的前馈补偿,J和B决定了速度环的动态响应。这四个参数,一个都不能少。
4.1 电阻R和电感L的测量方法
先说R和L。这两个参数是电流环模型里最基础的。R是相电阻,L是相电感。注意,我说的是「相」,不是「线」。对于星形接法的电机,相电阻等于线电阻的一半;三角形接法,相电阻等于线电阻的1.5倍。这个别搞混了,我在项目里见过有人拿万用表量了两个线头,直接当相电阻用,结果PI参数怎么调都不对。
4.1.1 直流伏安法测R
这个方法最简单,也最直接。给电机绕组通一个直流电流,测电压,然后算电阻。
- 把电机三相绕组中的两相串联(比如A和B),第三相悬空。
- 给串联的两相通一个直流电流I,建议用额定电流的10%~20%。
- 用万用表测这两相两端的电压U。
- 计算:R_相 = U / (2 * I)。
我的经验:电流不要太大,否则绕组发热,电阻值会漂。我一般用0.5A~1A,测三次取平均。另外,接触电阻的影响不可忽略,建议用四线法(开尔文接法)测量,尤其是小电阻电机(比如几十毫欧的)。
4.1.2 交流注入法测L
电感L的测量比R麻烦一点。因为电感是频率相关的,不同频率下测出来的值不一样。FOC电流环的工作频率一般在几百Hz到几kHz,所以我们测电感也要在这个频段内测。
我常用的方法是:给绕组注入一个正弦波电压,测电流响应,然后算阻抗,再反推电感。
- 同样把两相串联,第三相悬空。
- 注入一个正弦波电压,频率f建议取1kHz(这个频率比较接近电流环的带宽)。
- 用示波器同时测电压和电流的幅值,以及相位差。
- 计算阻抗模:|Z| = U_peak / I_peak。
- 计算感抗:X_L = sqrt(|Z|^2 - R^2)。
- 计算电感:L = X_L / (2 * π * f)。
注意:这个方法的前提是,你已经在4.1.1里测到了准确的R。如果R不准,L也会跟着偏。另外,注入电压的幅值要控制好,别让电流超过额定值。我曾经有一次忘了限幅,直接把驱动板烧了……嗯,从那以后我每次测电感都会先算一遍电流峰值。
4.1.3 用LCR电桥(偷懒但靠谱)
如果你手头有LCR电桥,那就简单了。直接夹住两相绕组,选1kHz测试频率,读出来的就是线电感。然后换算成相电感:
- 星形接法:L_相 = L_线 / 2
- 三角形接法:L_相 = L_线 * 1.5
不过要注意,LCR电桥测的是小信号下的电感,和实际大电流工况下的电感可能不一样。因为磁路饱和效应,电流越大,电感越小。所以,如果你做的是大功率电机,建议还是用交流注入法,在接近额定电流的条件下测。
4.2 反电动势常数Ke的获取
Ke,全称是反电动势常数,单位是V/(rad/s)或者V/krpm。它描述的是:电机每转一圈,绕组里会产生多少反电动势。
Ke在FOC里有什么用?两个地方:
- 速度环前馈:当电机高速旋转时,反电动势会抵消一部分母线电压,导致电流环的调节能力下降。知道Ke,就可以做前馈补偿,把反电动势的影响提前抵消掉。
- 无传感器控制:很多无传感器算法(比如滑模观测器)需要用到Ke来估算转子位置。
4.2.1 拖拽法测Ke
这个方法最直观。把电机用另一台电机(或者用手摇)拖到某个恒定转速,然后用示波器测两相之间的线电压,读峰值。
- 把电机三相开路(不接任何负载)。
- 用另一台电机拖动被测电机,转速稳定在某个值ω(比如1000rpm)。
- 用示波器测任意两相之间的线电压波形,读峰值U_peak。
- 计算:Ke = U_peak / ω。
注意,这里测的是线反电动势,换算成相反电动势需要除以√3。另外,转速单位要统一,我习惯用rad/s,这样算出来的Ke可以直接用在FOC公式里。
我的习惯:我会测三个不同的转速点(比如500rpm、1000rpm、1500rpm),然后做线性拟合。如果三个点算出来的Ke基本一致,说明电机磁路是线性的,这个Ke值可信。如果偏差很大,说明磁路饱和了,这时候Ke就不是常数了,需要做查表处理。
4.2.2 用电流环反推Ke(无拖拽条件时)
如果你没有另一台电机来拖,也可以用电流环自己测。方法如下:
- 让电机空载运行到某个恒定转速ω。
- 记录此时的q轴电压Uq和q轴电流Iq。
- 根据电压方程:Uq = R * Iq + ω * Ke + L * dIq/dt。
- 稳态时dIq/dt = 0,所以Ke = (Uq - R * Iq) / ω。
这个方法的好处是不需要额外设备,但前提是你已经知道了R(从4.1.1测出来的)。而且,Iq要尽量小(空载嘛),否则R*Iq项会引入误差。
避坑:用这个方法时,一定要确保电机确实在空载状态。如果带了负载,Iq里包含了负载电流,算出来的Ke会偏大。我曾经有一次没注意,电机轴上挂了个小风扇,结果Ke算出来比实际值大了15%。
4.3 惯量J和阻尼B的辨识
J是转动惯量,单位kg·m²;B是阻尼系数,单位N·m·s/rad。这两个参数主要影响速度环的动态响应。
说实话,J和B的辨识比R和L麻烦得多。因为它们是机械参数,和负载直接相关。同一个电机,空载和带负载,J和B完全不一样。所以,我一般建议:在最终的应用工况下做辨识,而不是在实验台上测完就完事。
4.3.1 加减速法测J
这个方法的核心思想是:给电机一个已知的转矩,看它加速到某个速度需要多长时间。
- 让电机从静止开始,施加一个恒定的q轴电流Iq(对应转矩T = Kt * Iq,其中Kt = Ke * 3/2,对于表贴式永磁同步电机)。
- 记录转速从0加速到某个值ω所需的时间Δt。
- 根据运动方程:T = J * dω/dt + B * ω。
- 忽略阻尼B(低速时B*ω很小),近似为:J ≈ T * Δt / ω。
这个方法简单,但精度一般。因为忽略了阻尼,而且加速过程中电流不一定完全恒定(受电流环带宽限制)。
我的改进:我会做两次加速,一次正向,一次反向,然后取平均。这样可以抵消掉一些不对称的摩擦力矩。另外,加速时间Δt不要选太短,否则采样率不够;也不要选太长,否则阻尼的影响会变大。我一般选0.5秒左右。
4.3.2 阶跃响应法测J和B
这个方法可以同时辨识J和B。思路是:给速度环一个阶跃指令,记录速度响应曲线,然后用最小二乘法拟合。
- 让电机在某个低速下稳定运行(比如100rpm)。
- 给速度环一个阶跃指令,跳到另一个速度(比如200rpm)。
- 记录速度响应曲线ω(t)和q轴电流响应曲线Iq(t)。
- 根据运动方程:Kt * Iq(t) = J * dω/dt + B * ω(t)。
- 用最小二乘法拟合出J和B。
这个方法精度高,但需要采集数据并做后处理。我一般用Python的scipy.optimize.curve_fit来做拟合,几行代码就搞定了。
关键点:阶跃的幅度不要太大,否则电流会饱和,拟合出来的参数就不准了。我一般选50rpm的阶跃,电流限幅设在额定电流的80%。
4.3.3 扫频法(最准但最麻烦)
如果你需要非常精确的J和B,可以用扫频法。给速度环注入不同频率的正弦波扰动,测速度响应,然后画伯德图,从幅频和相频曲线里提取J和B。
这个方法在学术论文里很常见,但工程上用得不多。因为太麻烦了,而且对设备要求高。我个人只在做高精度伺服驱动时用过一次,平时用阶跃响应法就够了。
4.4 本章知识体系
下面这张图总结了电流环参数辨识的完整流程。你可以把它当作一个检查清单,每做完一步就打个勾。
4.5 参数辨识的注意事项
最后,说几个我踩过的坑,希望能帮你省点时间。
- 温度影响:电阻R对温度非常敏感。铜绕组的温度系数大约是0.0039/°C。也就是说,温度每升高10°C,电阻就增加约4%。所以,测R的时候要记录环境温度,最好在电机实际工作温度下测。
- 磁路饱和:电感L和电流大小有关。大电流下磁路饱和,电感会下降。如果你做的是大功率电机,建议在多个电流点下测L,然后做插值表。
- 负载变化:惯量J和阻尼B是系统参数,不是电机本身的参数。换一个负载,J和B就要重新辨识。所以,别指望一次辨识管一辈子。
- 采样率:做阶跃响应法辨识J和B时,速度反馈的采样率至少要达到1kHz,否则拟合出来的参数误差很大。
我的建议:如果你刚开始做FOC,先别追求高精度。用直流伏安法测R,用LCR电桥测L,用拖拽法测Ke,用加减速法测J。这四个方法加起来,半小时就能搞定。等后面调通了,再回来用更精确的方法做二次校准。