mao001 发表于 2016-1-5 16:22:45

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-24 23:59:31

本帖最后由 cpholr1 于 2017-3-25 00:05 编辑

当然只能在下桥臂打开的时候才去采样。

先讨论两个半桥的情况,左边半桥输出PWM,右边下桥打开,右边上桥关闭。

这个时候,不考虑死区的情况,有两种状态。
第一种状态,PWM高电平时间,左边上桥打开,下桥关闭,右边上桥关闭,下桥打开。这个时候电流方向,左边上桥->电机->右边下桥。
第二种状态,PWM低电平时间,左边上桥关闭,下桥打开,右边上桥关闭,下桥打开。电机为感性器件,电流不能突变,所以电机上的电流方向还是一样的。这个时候电流方向,左边下桥->电机->右边上桥下桥都有。所以右边下桥这个时候采集的电流是没有意义的。

cpholr1 发表于 2017-3-25 00:39:48

ST的开放的2.0电机库乱七八糟。。几行代码就搞定的事情,能整一大段。

xindev 发表于 2017-4-17 10:45:57

也在研究2.0电机库 学习下
页: [1]
查看完整版本: 2.0电机库三电阻电流采样疑问