motorware中过调制时,相电流重构采用两步来实现,第一步:
// select valid shunts and ignore one when needed
if (svgencurrent->IgnoreShunt==ignore_a)
{ // repair a based on b and c
Ia = -Ib - Ic; //Ia = -Ib - Ic;
}
else if (svgencurrent->IgnoreShunt==ignore_b)
{ // repair b based on a and c
Ib = -Ia - Ic; //Ib = -Ia - Ic;
}
else if (svgencurrent->IgnoreShunt==ignore_c)
{ // repair c based on a and b
Ic = -Ia - Ib; //Ic = -Ia - Ib;
}
else if (svgencurrent->IgnoreShunt==ignore_ab)
{ // repair a and b based on c
Ia = (-Ic)>>1; //Ia = (-Ic)/2;
Ib = Ia; //Ib = Ia;
}
else if (svgencurrent->IgnoreShunt==ignore_ac)
{ // repair a and c based on b
Ia = (-Ib)>>1; //Ia = (-Ib)/2;
Ic = Ia; //Ic = Ia;
}
else if (svgencurrent->IgnoreShunt==ignore_bc)
{ // repair b and c based on a
Ib = (-Ia)>>1; //Ib = (-Ia)/2;
Ic = Ib; //Ic = Ib;
}
第二步使用软件滤波逼近以及过去值得方式来重构相电流。
gIavg.value[0] += (gAdcData.I.value[0] - gIavg.value[0])>>gIavg_shift;
gIavg.value[1] += (gAdcData.I.value[1] - gIavg.value[1])>>gIavg_shift;
gIavg.value[2] += (gAdcData.I.value[2] - gIavg.value[2])>>gIavg_shift;
if(ignoreShuntThisCycle == ignore_ab)
{
gAdcData.I.value[0] = gIavg.value[0];
gAdcData.I.value[1] = gIavg.value[1];
}
else if(ignoreShuntThisCycle == ignore_ac)
{
gAdcData.I.value[0] = gIavg.value[0];
gAdcData.I.value[2] = gIavg.value[2];
}
else if(ignoreShuntThisCycle == ignore_bc)
{
gAdcData.I.value[1] = gIavg.value[1];
gAdcData.I.value[2] = gIavg.value[2];
}
第二步的原理没怎么看懂,不知道采用的是什么数学或控制原理?