IPMSM 方波注入无传感器FOC控制

描述

IPMSM,内嵌的转子空间上的磁阻分布不均匀。在旋转坐标的D轴方向上的磁阻比Q轴 的大,所有IPMSM的Ld<Lq。由于这个特性, 通过在定子绕组中注入高频的电压获取到电流响应就可以等到转子的位置信息。

实现方法

电压注入的电流响应

实现方波注入的方法如图所示,在D轴上注入方波电压。注入的电压方波的频率为1/2 Fsw。也就是在每一个控制周期内给D轴的电压叠加正负交替的电压信号。假设注入的方波信号的幅值为,那么在静止坐标上的电流响应为:

其中:

,为转子的角度, 为电流响应的包络线。可见在注入的信号后,电流相应中包含有转子信息。

获取包络线的方法。可以使用该方法,主要是高频注入应用在电机运行速度较低的条件,相邻的两个控制周期低频的部分的电流基本不变。

获取包络线后,可以直接使用PLL来获取位置和转速的信息。但因为是包络线所包含的信息,需要知道磁极的才能完整地知道转子的位置信息,否则PLL出来的角度可能与实际相差pi(180°)。

磁极极性辨识

铁磁材料非线性,增减Ld方向的磁场在NS两极的会有对Ld大小变化有相反效果。利用这个特点,可以D轴上分别施加不同的电流偏置下,对比相同的电流相应大小就可以得到磁极信息。

(公式和截图:来自《内置式永磁同步电机无位置传感器控制研究_张国强》)

仿真实现

实现方法使用psim

Psim,如果要仿真极性识别需要配置PMSM的模型

psim用到的机构Cblock模块的代码如下:

  1. PLL

 g_nStepCount++;、、


pll_clk++;


if(pll_clk==10)
{
    pll_clk=0;
    al=in[0];
    be=in[1];
    
     ampl_curr=sqrt(al*al+be*be)+0.0001;
    
    al=al/ ampl_curr;
    be=be/ ampl_curr;

    
    kp=in[2];
    ki=in[3];

    err0=al*sin(the)-be*cos(the);

    wee+=kp*(err0-err1)+ki*err0;

    the=the+10*delt*wee;

    if(the>6.283) the=0;
    if(the<-6.283) the=0;
    
    err1=err0;
    we0=0.99*we1+0.01*wee;
    we1=we0;
    out[0]=the;
    out[1]=we0/2;

}






// In case of error, uncomment next two lines. Set *pnError to 1 and copy Error message to szErrorMsg
 //*pnError=1;
 //strcpy(szErrorMsg, "Place Error description here.");
 
  1. HF

 g_nStepCount++;
 trigger_clk++;
//这部分带与MCU相关,方波无滤波器的采样与注入时机参考
if(trigger_clk==20)
{
    hf_signal=in[0];
    als0=in[1];
    bes0=in[2];
    trigger_clk=0;
    
    alf=(als0+als1)/2;
    bef=(bes0+bes1)/2;

    alh=(als0-als1)/2;
    beh=(bes0-bes1)/2;

    als1=als0;
    bes1=bes0;
    
      if(hf_signal>0)
    {
    alh=-alh;
    beh=-beh;
    }

    out[0]=alh;
    out[1]=beh;
    out[2]=alf;
    out[3]=bef;
    
}


// In case of error, uncomment next two lines. Set *pnError to 1 and copy Error message to szErrorMsg
 //*pnError=1;
 //strcpy(szErrorMsg, "Place Error description here.");
 
  1. SVPWM 参考TI 发波方法

 g_nStepCount++;

// In case of error, uncomment next two lines. Set *pnError to 1 and copy Error message to szErrorMsg
 //*pnError=1;
 //strcpy(szErrorMsg, "Place Error description here.");
 


 tmp4=1; 
 Ualpha=in[0]/tmp4;
 Ubeta=in[1]/tmp4;
                                                    \
                                                                                \
     tmp1=  Ubeta;                                                            \
     tmp2= Ubeta/2 + Ualpha*k1;                    \
         tmp3=  tmp2 -  tmp1;                                                    \
                                                                                \
     VecSector=3;                                                                \
     VecSector=( tmp2> 0)?(  VecSector-1): VecSector;                        \
     VecSector=( tmp3> 0)?(  VecSector-1): VecSector;                        \
     VecSector=( tmp1< 0)?(7- VecSector) : VecSector;                        \
                                                                                \
    if     ( VecSector==1 ||  VecSector==4)                                    \
        {                                                                            \
             Ta= tmp2;                                                                 \
             Tb=  tmp1-tmp3;                                                             \
             Tc=  -tmp2 ;                                                            \
        }                                                                            \
    else if( VecSector==2 ||  VecSector==5)                                    \
        {                                                                            \
             Ta= tmp3+tmp2;                                                             \
             Tb= tmp1;                                                                 \
             Tc= -tmp1;                                                            \
        }                                                                            \
    else                                                                         \
        {                                                                            \
             Ta=  tmp3;                                                             \
             Tb= -tmp3;                                                             \
             Tc= -tmp1-tmp2;                                                                \
        }                                                                            \
                                                                                \
out[0]=Ta;
out[1]=Tb;
out[2]=Tc;    
out[3]=VecSector;        

总结

方波注入算法实现相对简单,而难点我觉得是磁极极性判断的逻辑处理。psim缺少事件触发的模块实现起来比较麻烦,故没有将极性识别的部分的做进去。如果对psim的模型有兴趣可在一些链接上获取

链接: https://caiyun.139.com/m/i?185CEhaFxDhF2 提取码:svtS 复制内容打开中国移动云盘手机APP,操作更方便哦

更新划分

——————————————————————————————————————————————2023年3月13日

1.相电压

2. 相电流

如果使用的控制器使用下管采样,而且采用(1,-1)的注入策略(上述仿真采用的策略),可能会出现问题。图所示,下管电流采样需要设置在下管开通期间,可以看到下管开通期间采样是采样不到高频注入的响应的。仿真之所以成功,因为仿真的采样时间选择在上个开通期间。

解决办法,注入方波的策略(如,将注入波的序列改为0 -1 0 1)

这样就可以解决在下管开通时,可以采样到电流。这个方法在实验中得到验证

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
基于高频方波电压注入法的无传感器IPMSM研究是一种对感应电机的控制方法。在传统的感应电机控制方法中,通常需要使用传感器来实时测量转子位置和速度,以便进行闭环控制。然而,无传感器IPMSM研究提出了一种基于高频方波电压注入的新方法,可以实现对感应电机的准确控制,而不需要传感器进行反馈。 这种方法的原理是在感应电机上注入高频方波电压信号,通过测量电机终端的电流响应来估算转子位置和速度。这种高频电压信号的注入可以通过适当的调制方式来实现,例如直接注入高频电压脉冲、使用PWM技术或者改变电机的开关频率。通过对电机终端电流进行数学处理,可以得到准确的转子位置和速度信息。 这种无传感器IPMSM研究方法具有许多优点。首先,它可以减少电机系统中的传感器数量,降低了系统成本。其次,由于不需要传感器进行安装和调校,这种方法更加灵活和方便。此外,高频方波电压注入法可以提供比传统方法更高的控制精度和动态响应。 然而,需要注意的是,无传感器IPMSM研究方法也存在一些挑战。例如,高频方波电压注入可能会对电机产生一些附加的谐波和噪声,需要采取合适的滤波和抑制措施。此外,该方法对电机参数的准确性和稳定性要求较高,需要对系统进行精确建模和参数校准。 综上所述,基于高频方波电压注入法的无传感器IPMSM研究是一种新颖且有潜力的感应电机控制方法。它具有减少成本、提高精度和动态响应的优势,但也需要解决一些挑战,以实现可靠和稳定的控制效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值