2.0电机库三电阻电流采样疑问
在看PMSM 2.0的电机代码。三电阻采样其实是只用了2电阻采样。没明白ADC1->JDR1和ADC2->JDR1到底对应哪相电流?看代码扇区不同,对应的相电流也不一样?另外电流计算不需要在一个周期里均匀采集多点取取平均吗??看代码好像只采集下桥臂开启后的电流就为相电流,这样准吗?因为电机呈感性可以这样处理?
Curr_Components SVPWM_3ShuntGetPhaseCurrentValues(void)
{
Curr_Components Local_Stator_Currents;
s32 wAux;
switch (bSector)
{
case 4:
case 5: //Current on Phase C not accessible
// Ia = (hPhaseAOffset)-(ADC Channel 11 value)
wAux = (s32)(hPhaseAOffset)- ((ADC1->JDR1)<<1);
//Saturation of Ia
if (wAux < S16_MIN)
{
Local_Stator_Currents.qI_Component1= S16_MIN;
}
elseif (wAux > S16_MAX)
{
Local_Stator_Currents.qI_Component1= S16_MAX;
}
else
{
Local_Stator_Currents.qI_Component1= wAux;
}
// Ib = (hPhaseBOffset)-(ADC Channel 12 value)
wAux = (s32)(hPhaseBOffset)-((ADC2->JDR1)<<1);
// Saturation of Ib
if (wAux < S16_MIN)
{
Local_Stator_Currents.qI_Component2= S16_MIN;
}
elseif (wAux > S16_MAX)
{
Local_Stator_Currents.qI_Component2= S16_MAX;
}
else
{
Local_Stator_Currents.qI_Component2= wAux;
}
break;
case 6:
case 1://Current on Phase A not accessible
// Ib = (hPhaseBOffset)-(ADC Channel 12 value)
wAux = (s32)(hPhaseBOffset)-((ADC1->JDR1)<<1);
//Saturation of Ib
if (wAux < S16_MIN)
{
Local_Stator_Currents.qI_Component2= S16_MIN;
}
elseif (wAux > S16_MAX)
{
Local_Stator_Currents.qI_Component2= S16_MAX;
}
else
{
Local_Stator_Currents.qI_Component2= wAux;
}
// Ia = -Ic -Ib
wAux = ((ADC2->JDR1)<<1)-hPhaseCOffset-
Local_Stator_Currents.qI_Component2;
//Saturation of Ia
if (wAux> S16_MAX)
{
Local_Stator_Currents.qI_Component1 = S16_MAX;
}
elseif (wAux <S16_MIN)
{
Local_Stator_Currents.qI_Component1 = S16_MIN;
}
else
{
Local_Stator_Currents.qI_Component1 = wAux;
}
break;
case 2:
case 3:// Current on Phase B not accessible
// Ia = (hPhaseAOffset)-(ADC Channel 11 value)
wAux = (s32)(hPhaseAOffset)-((ADC1->JDR1)<<1);
//Saturation of Ia
if (wAux < S16_MIN)
{
Local_Stator_Currents.qI_Component1= S16_MIN;
}
elseif (wAux > S16_MAX)
{
Local_Stator_Currents.qI_Component1= S16_MAX;
}
else
{
Local_Stator_Currents.qI_Component1= wAux;
}
// Ib = -Ic-Ia;
wAux = ((ADC2->JDR1)<<1) - hPhaseCOffset -
Local_Stator_Currents.qI_Component1;
// Saturation of Ib
if (wAux> S16_MAX)
{
Local_Stator_Currents.qI_Component2=S16_MAX;
}
elseif (wAux <S16_MIN)
{
Local_Stator_Currents.qI_Component2 = S16_MIN;
}
else
{
Local_Stator_Currents.qI_Component2 = wAux;
}
break;
default:
break;
}
return(Local_Stator_Currents);
} 本帖最后由 cpholr1 于 2017-3-25 00:05 编辑
当然只能在下桥臂打开的时候才去采样。
先讨论两个半桥的情况,左边半桥输出PWM,右边下桥打开,右边上桥关闭。
这个时候,不考虑死区的情况,有两种状态。
第一种状态,PWM高电平时间,左边上桥打开,下桥关闭,右边上桥关闭,下桥打开。这个时候电流方向,左边上桥->电机->右边下桥。
第二种状态,PWM低电平时间,左边上桥关闭,下桥打开,右边上桥关闭,下桥打开。电机为感性器件,电流不能突变,所以电机上的电流方向还是一样的。这个时候电流方向,左边下桥->电机->右边上桥下桥都有。所以右边下桥这个时候采集的电流是没有意义的。
ST的开放的2.0电机库乱七八糟。。几行代码就搞定的事情,能整一大段。 也在研究2.0电机库 学习下
页:
[1]