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];
}
第二步的原理没怎么看懂,不知道采用的是什么数学或控制原理?
Hardy Zhou:
第二步的处理思想是:
在有两相电机电流没法采样的情况下, 使用当前采样得到的值(可能偏离实际值比较大)进行滤波,是一种近似.
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];
}
第二步的原理没怎么看懂,不知道采用的是什么数学或控制原理?
Hoo Asnow:
回复 Hardy Zhou:
Hardy Zhou
第二步的处理思想是:
在有两相电机电流没法采样的情况下, 使用当前采样得到的值(可能偏离实际值比较大)进行滤波,是一种近似.
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];
}
第二步的原理没怎么看懂,不知道采用的是什么数学或控制原理?
Linda:
回复 Hoo Asnow:
您好!
关于Motorware中的过调制电流重构,请到Motorware以下目录下
C:\ti\motorware_1_01_00_16\docs\labs\
找到“instaspin_labs.pdf”文件,其中关于lab10的详细介绍中就有电流重构原理说明。