TI中文支持网
TI专业的中文技术问题搜集分享网站

Motorware中过调制时相电流重构的原理是啥?

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的详细介绍中就有电流重构原理说明。

赞(0)
未经允许不得转载:TI中文支持网 » Motorware中过调制时相电流重构的原理是啥?
分享到: 更多 (0)