k64 发表于 2020-7-9 14:54:47

FOC2.0 编码器 永磁同步电动机在对准阶段的转矩和磁通调节

FOC2.0的库里面 关于电机启动时候需要知道转子位置,是不是通过void ENC_Start_Up(void)这个函数实现的,这个函数为什么又是变压器,又是磁通。直接给一个D {
静态u32 wTimebase = 0;

if((wGlobal_Flags&FIRST_START)== FIRST_START)
    {
      //首次启动电动机,必须使用
      wTimebase ++ 进行对齐;
      if(wTimebase <= T_ALIGNMENT_PWM_STEPS)
      {                  
      hFlux_Reference = I_ALIGNMENT * wTimebase / T_ALIGNMENT_PWM_STEPS;               
      hTorque_Reference = 0;

      Stat_Curr_a_b = GET_PHASE_CURRENTS(); //在这里增大启动血压电流。
      Stat_Curr_alfa_beta = Clarke(Stat_Curr_a_b);
      Stat_Curr_q_d = Park(Stat_Curr_alfa_beta,ALIGNMENT_ANGLE_S16);
      / *加载扭矩调节器输出参考电压Vqs * /   
      Stat_Volt_q_d.qV_Component1 = PID_Regulator(hTorque_Reference,
                        Stat_Curr_q_d.qI_Component1,&PID_Torque_InitStructure);   

      / *加载磁通调节器输出参考电压Vds * /
      Stat_Volt_q_d.qV_Component2 = PID_Regulator(hFlux_Reference,
                        Stat_Curr_q_d.qI_Component2,&PID_Flux_InitStructure);

      RevPark_Circle_Limitation();

      / *执行反向Park转换,
      即在
      固定参考系上将定子电压Vqs和Vds转换为Valpha和Vbeta * /

      Stat_Volt_alfa_beta = Rev_Park(Stat_Volt_q_d);

      / * Valpha和Vbeta最终驱动了功率级* /
      CALC_SVPWM(Stat_Volt_alfa_beta); //和PARK()函数总是成对使用,所以thea角度不变。
      }
      else
      {
      wTimebase = 0;            
      ENC_ResetEncoder();         
      Stat_Volt_q_d.qV_Component1 = Stat_Volt_q_d.qV_Component2 = 0;
      hTorque_Reference = PID_TORQUE_REFERENCE;
      hFlux_Reference = PID_FLUX_REFERENCE;
      wGlobal_Flags&=〜FIRST_START; //仅进行一次对齐
      // //清除对齐阶段的速度获取
      ENC_Clear_Speed_Buffer();
#ifdef ENCODER
      State = RUN;
#endif
      }
    }
else
{
#ifdef ENCODER
    State = RUN;
#endif
}
}


页: [1]
查看完整版本: FOC2.0 编码器 永磁同步电动机在对准阶段的转矩和磁通调节