最近看到了一个代码,有点好奇,ai说是电机星形连接的原因。
cpp
float32_t VphaseA = Vtemp *
(pVabc_pu->value[0] * 2.0f - pVabc_pu->value[1] - pVabc_pu->value[2]);
float32_t VphaseB = Vtemp *
(pVabc_pu->value[1] * 2.0f - pVabc_pu->value[0] - pVabc_pu->value[2]);
原理如下:
1. 逆变器输出的电压是什么样子?
典型的三相电压源逆变器,三个桥臂的中间点分别接电机的 A、B、C 三相。每个桥臂上下管交替导通。
如果上管导通、下管关断,该相输出就接近直流母线正端 +Vdc;反之接近负端 0V。
用占空比 da, db, dc 表示上管导通时间占比(范围 0~1),那么三个桥臂的输出端相对于电源地的电压分别是:
cpp
Va_gnd = da * Vdc
Vb_gnd = db * Vdc
Vc_gnd = dc * Vdc
这三个电压是相对于地 的,带有很高的共模电压(因为它们大致都在 Vdc/2 附近摆动)。
2. 电机真正感受到的电压是"相电压",不是"对地电压"
电机是星形连接,三相绕组一端接逆变器输出,另一端接在一起形成星形中点 。
这个星形中点是浮动的,它的电压 Vn 是由三相平均电压决定的:
cpp
Vn = (Va_gnd + Vb_gnd + Vc_gnd) / 3
那电机 A 相绕组上真正承受的电压(相电压)就是:
cpp
Va = Va_gnd - Vn
把 Vn 的表达式代进去:
cpp
Va = da*Vdc - (da*Vdc + db*Vdc + dc*Vdc)/3
= Vdc * [ da - (da+db+dc)/3 ]
= Vdc/3 * ( 3*da - da - db - dc )
= Vdc/3 * ( 2*da - db - dc )
敲黑板:这就是 (2*da - db - dc) 的来源!
它的本质就是:去掉三相共有的共模电压,留下各相之间真正起作用的那部分差模电压。
同样地:
cpp
Vb = Vdc/3 * ( 2*db - da - dc )
Vc = Vdc/3 * ( 2*dc - da - db )
而且很容易验证:Va + Vb + Vc = 0,符合星形无中线电机的物理规律。