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

文章介绍了IPMSM电机中由于转子磁阻不均匀导致的Ld≠Lq特性,利用这一特性通过在D轴注入高频电压来获取电流响应中的转子位置信息。通过包络线分析和PLL(锁相环)可以获取位置和速度,同时阐述了如何通过电流响应差异进行磁极极性辨识。文中还提到了在PSIM软件中实现的仿真实例,以及针对下管采样问题的解决方案,即调整注入方波序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述

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)

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值