电机参数辨识【无标题】

将此时的AD值作为三相电压的ADC采集硬件偏移。

//50%PWM
EPwm1Regs.CMPA.half.CMPA = EPwm1Regs.TBPRD/2;
EPwm2Regs.CMPA.half.CMPA = EPwm1Regs.TBPRD/2;
EPwm3Regs.CMPA.half.CMPA = EPwm1Regs.TBPRD/2;

#define V_A_offset      (0.1637)
#define V_B_offset      (0.166)
#define V_C_offset      (0.1637)

对控制器的硬件偏移量进行补偿。

_iq value = (_iq)AdcResult.ADCRESULT4;
Vars.VoltU = _IQ12mpy(value,_IQ(USER_VOLTAGE_SF)) - _IQ(V_A_offset); // divide by 2^numAdcBits = 2^12

value = (_iq)AdcResult.ADCRESULT5;
Vars.VoltV = _IQ12mpy(value,_IQ(USER_VOLTAGE_SF)) - _IQ(V_B_offset);

value = (_iq)AdcResult.ADCRESULT6;
Vars.VoltW = _IQ12mpy(value,_IQ(USER_VOLTAGE_SF)) - _IQ(V_C_offset);

进而输出频率为277Hz的高频电流信号。

if(Parameterstudy.hf == 1)
{
  Gamma += 10;//(360/K_HIGHFREQ)=360/33.33;//300Hz的频率每100us角度增加
  if(Gamma >= 360) Gamma -= 360;
  Vars.AngleE = _IQdiv(Gamma,360);
  Vars.wt = Vars.AngleE;
  Vars.AngleE1 = Vars.AngleE;
}

输入电机电流角度

 if(Parameterstudy.Lhfstarflg == 1)
{
  //Lhf学习
   Vars.IdRef =  Vars.IsRefFil;
   Vars.IqRef = 0;
}

并计算出复阻抗,进而计算出电机等效电感。

if(LsTime > 80000)  //大于8s 电流电压趋于稳定
    {
        Parameterstudy.MotState = 2;  //开始计算
        Parameterstudy.U_fai = atan(abs(Parameterstudy.fft_b) /abs( Parameterstudy.fft_a));  //高频电压角度值
        Parameterstudy.C_fai = atan(Parameterstudy.fft_b_c/ Parameterstudy.fft_a_c);         //高频电流角度值

        Parameterstudy.fai = (Parameterstudy.U_fai*1000 - Parameterstudy.C_fai*1000 + 370.0)/1000.0; //0.244 14du (14+10)/360*2PAI 角度


        Parameterstudy.Z = (Parameterstudy.fft_v*1000/Parameterstudy.fft_v_c)/1000.0*53.33*0.8;   //800/15 = 53.33 复阻抗
        if(zfaicnt < 1500 && zfai_once == 0)
       {
         faiFil += Parameterstudy.fai;
         ZFil += Parameterstudy.Z;
         zfaicnt++;
       }
       else
       {
           zfaicnt = 0;
           zfai_once = 1;
           Parameterstudy.faiFil = faiFil /1500.0;
           Parameterstudy.ZFil = ZFil/1500.0;

           Parameterstudy.sin_fai = sin(Parameterstudy.faiFil);
           Parameterstudy.cos_fai = cos(Parameterstudy.faiFil);
           Parameterstudy.Lhf = abs(Parameterstudy.ZFil*Parameterstudy.sin_fai*574); //574=1/(2pai*277)*1000 000  uH
           Parameterstudy.Rhf = abs(Parameterstudy.ZFil*Parameterstudy.cos_fai*1000); //
           Parameterstudy.LhfFil = Parameterstudy.Lhf;
       }
    }

4.2.3 定子电阻辨识

 Vars.AngleE = 0;
 Vars.AngleE1 = (Vars.AngleE + _IQmpy(Vars.N, Vars.KiParkComp))& 0xffffff;//加角度补偿
 Vars.AngleE1 = 0;
 else if(Parameterstudy.Rstarflg == 1)
 {
	 // Rs学习
     Vars.IdRef = - Vars.IsRefFil;
     Vars.IqRef = 0;
 }

对电机定子电阻进行计算。

if(Parameterstudy.Rstarflg == 1)//R辨识
{
   RsTime++;
   if(FFTCount < 20000)
   {
       FFTCount++;
   }
   else if(FFTCount <35000 )
   {
       voltu = Vars.VoltU>>12;
       voltu1 = (float)voltu/15000.0;
       VoltU += voltu1;
       FFTCount++;
   }
   else
   {
       Parameterstudy.fft_Ru = VoltU/4096.0*800.0;
       VoltU = 0;
       FFTCount = 0;
   }

}

计算反馈电压

if(RsTime > 40000)//大于2S
{
	Parameterstudy.MotState = 2;  //开始计算
	Parameterstudy.fft_dertV = Parameterstudy.fft_Ru;
	Parameterstudy.fft_Rs = Parameterstudy.fft_dertV/2.0*1000;//*1000/2121.0/2.0*24.4 = 5.752   mΩ
	
	Macro_LPF(Parameterstudy.fft_Rs,Parameterstudy.fft_RsFil,0.02);
	if(RsTime > 50000)//大于3S
	{
	   Parameterstudy.MotState = 3;  //开始判断
	   if(Parameterstudy.fft_Rs/Parameterstudy.fft_RsFil > 0.9 && Parameterstudy.fft_Rs/Parameterstudy.fft_RsFil < 1.1)
		 {
		    Parameterstudy.MotState = 4;  //开始赋值
		     if(Parameterstudy.RsWriteFlg == 1)
		     {
		         UserParm.Var.Rs = abs(Parameterstudy.fft_RsFil);//
		         UserParm.Sts.Rs = PARM_WRITING;
		         if(RsTime > 70000)//大于3S
		         {
		            PWMONFirst = 1;
		            OutOff();
		            RsTime = 0;
		            Parameterstudy.Rsoverflg = 1;
		            Parameterstudy.RsWriteFlg = 0;
					KpKiStudy();		
		         }		
		      }	
	     }
 } 

对电机的转子磁链进行计算。

 case 3:
{
   Parameterstudy.MotState = 3;//等待2S 记下Vq1

   if(StudyTimerCnt < 5000)//T=200us==>2s
   {
       StudyTimerCnt++;
   }
   else
   {
       StudyTimerCnt = 0;
       Parameterstudy.Vq1 = _IQmpy(Vars.VqRef,UNORMAL);
       Parameterstudy.Wmg1 = (float)UserParm.Var.MotPolePairs*Parameterstudy.Speed1*0.10497;// W = 2πφ  2*3.1415/60 = 0.10497
       Parameterstudy.FluxLink = (Parameterstudy.Vq1)/Parameterstudy.Wmg1/10.0/1.732;
       if (Parameterstudy.FluxLink != UserParm.Var.FluxLink)
     {
        UserParm.Var.FluxLink = Parameterstudy.FluxLink*10000;//
        UserParm.Sts.FluxLink = PARM_WRITING;
     }
       RotLnfStudyStep = 6;
   }
   break;
}

将五次辨识结果取均值,写入数据中。¬

case 1://
{
    j = Parameterstudy.i;
    Parameterstudy.MotState = 1;//等待启动
    if(speed[j]*0.80 < Parameterstudy.Speed1)
    {
        RotTeStudyStep = 1;
        IqRefTemp = TeSave1[j]*0.70;
    }
    else
    {
        RotTeStudyStep = 2;
        Parameterstudy.Time = 0;
    }
    break;
}
 case 2://
{
    j = Parameterstudy.i;


    Parameterstudy.MotState = 2;//等待启动
    if(speed[j]*1.2 > Parameterstudy.Speed1)
     {
         Parameterstudy.Time++;
         RotTeStudyStep = 2;
         IqRefTemp = TeSave1[j]*1.2;
         Parameterstudy.Speed = speed[j];
         if(Parameterstudy.Speed1 <= speed[j])
         {
              a1[j] = Parameterstudy.a; //实时加速度记录
         }
     }
     else
     {
         RotTeStudyStep = 3;

         Time[j] = Parameterstudy.Time; //记录时间
         Parameterstudy.a = Parameterstudy.Speed/Parameterstudy.Time*1000.0/6.0;  //换算成秒级加速度
         a[j] = Parameterstudy.a; //记录加速度
         Parameterstudy.Iq = _IQ12mpy(TeSave1[j],INORMAL); //标幺 值*4096 保证精度
         Iq[j] = Parameterstudy.Iq; //记录Iq

         p = UserParm.Var.MotPolePairs;
         Parameterstudy.FluxLink = UserParm.Var.FluxLink;
         Parameterstudy.Te = 1.5*p*Parameterstudy.FluxLink*Parameterstudy.Iq*0.2 ; //Te=1.5p(λmiq+(Ld-Lq)idiq  0.2是扭矩差
         Te[j] = Parameterstudy.Te; //记录扭矩差

         Parameterstudy.Inertia = Parameterstudy.Te/Parameterstudy.a;
         Inertia[j] =  Parameterstudy.Inertia; //记录转动惯量
     }

    break;
}

转动惯量辨识速度点及加速度记录

在这里插入代码片
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值