基于SWM190RBT6-50芯片的FOC风机方案

电子说

1.3w人已加入

描述

FOC

  硬件方案--主板及驱动电路

FOC

类型 型号 封装 数量
电阻 10R 0603*4 1
100R 0805 1
1K 0603*4 7
1K 0805 3
5.1K 0805 13
1M 0805 1
电容 12P 0805 2
22P 0805 2
4.7UF 1206 2
16V1000UF 电解 1
LED LED绿色 0805 25
LED红色 0805 1
LED黄色 0805 1
二极管 1N4148 玻璃管 2
1N5822 贴片 1
晶振 32.768K 2*6 1
8.000MHz 49SMD 1
芯片 1117-3.3 SOT223 1
IR21364S SOP-28 1
SWM190RBT6-50 LQFP64 1
其它 5.1K电位器 3362P 2

    控制器采用的是一颗国产M0芯片-SWM190RBT6-50,封装是LQFP64。电路包含AC转DC电路,直流电机是高压310V,然后通过SC1117DG转成低压15V,再由MP1482变成3.3V。电机的栅极驱动芯片是IR21364S来控制WVU三路之间的通断,上下臂是通过IGBT,RGS10B60KD1/D2PACK来开关。除此之外还包含一些光耦,LED的常用的电子元器件。

    本方案缺失PCB源文件,但是不影响配套程序的相关阅读及学习,本方案的主要用于学习观测器,锁相环,PID算法,SVPWM无感FOC算法以及五段式与七段式调制。

软件方案

FOC

FOC

FOC

    软件方案包含了工程文件,无需自己再搭建工程。用的IDE是MDK,小编给大家编译了一下,没有错误可以直接运行。包含龙伯格电机观测器,无感FOC算法,PID调节代码,整套报错信息,顺逆风启动算法,虽然是基于国产M0的代码,但是代码本身耦合性做的很好,完全可以移植到别的MCU平台上面去,同时也是非常适合对电机算法感兴趣的小伙伴认真阅读一番。以下贴一段龙伯格观测器的代码出来:

   

/*******************************************************************************
* Function Name : Speed_PI
* Description : It implements the PLL PI regulator.
* Input : (B-emf alpha)*sin(theta),(B-emf beta)*cos(theta).
* Output : None.
* Return : Motor speed (dpp, digit-per-pwm).
*******************************************************************************/
s16 Speed_PI(s16 hAlfa_Sin, s16 hBeta_Cos)
{
  s32 wSpeed_PI_error, wOutput;
  s32 wSpeed_PI_proportional_term, wSpeed_PI_integral_term;


  wSpeed_PI_error = hBeta_Cos - hAlfa_Sin;
#if 1    //????
  if(wSpeed_PI_error > 50)
    wSpeed_PI_error = 50;
  else if(wSpeed_PI_error < -50)
    wSpeed_PI_error = -50;
#endif
  wSpeed_PI_proportional_term = hSpeed_P_Gain * wSpeed_PI_error;  // !!!p
  wSpeed_PI_integral_term = hSpeed_I_Gain * wSpeed_PI_error;      // !!!i


  if ( (wSpeed_PI_integral_sum >= 0) && (wSpeed_PI_integral_term >= 0) && (Max_Speed_Out == FALSE) )
  {
    if ((s32)(wSpeed_PI_integral_sum + wSpeed_PI_integral_term) < 0)
    {
      wSpeed_PI_integral_sum = S32_MAX;
    }
    else
    {
      wSpeed_PI_integral_sum += wSpeed_PI_integral_term;  //integral
    }
  }
  else if ( (wSpeed_PI_integral_sum <= 0) && (wSpeed_PI_integral_term <= 0) && (Min_Speed_Out == FALSE) )
  {
    if((s32)(wSpeed_PI_integral_sum + wSpeed_PI_integral_term) > 0)
    {
      wSpeed_PI_integral_sum = -S32_MAX;
    }
    else
    {
      wSpeed_PI_integral_sum += wSpeed_PI_integral_term;   //integral
    }
  }
  else
  {
    wSpeed_PI_integral_sum += wSpeed_PI_integral_term;   //integral
  }


  wOutput = (wSpeed_PI_proportional_term >> 14) + (wSpeed_PI_integral_sum >> 18);


  if (wOutput > wMotorMaxSpeed_dpp)
  {
    Max_Speed_Out = TRUE;
    wOutput = wMotorMaxSpeed_dpp;
  }
  else if (wOutput < (-wMotorMaxSpeed_dpp))
  {
    Min_Speed_Out = TRUE;
    wOutput = -wMotorMaxSpeed_dpp;
  }
  else
  {
    Max_Speed_Out = FALSE;
    Min_Speed_Out = FALSE;
  }


  return ((s16)wOutput);
}

 

 

 

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分