wfriend88 发表于 2014-7-6 20:52

永磁同步电机矢量控制DSP程序的一个疑问

这是一个永磁同步电机矢量控制转速测定程序,有谁能解释一下他的正负过峰值的判定原理吗?为什么是和50000比较。
temp1 = EvaRegs.T2CNT;   
          
      if((temp1-temp2)>=50000)
      {
         temp=65536-temp1+temp2;
              Place_now-=temp;
         temp = -temp;
          }//电机(反转)过峰值
         
      else if((temp2-temp1)>=50000)
      {
         temp=65536-temp2+temp1;
         Place_now+=temp;//电机(正转)过峰值
      }
            
      else if(temp1 >= temp2)
      {
         temp=temp1-temp2;
         Place_now+=temp;
      }//电机(正转)
         
      else
      {
      temp=temp2-temp1;
      Place_now-=temp; //电机(反转)
      temp = -temp;      
      }
            
      temp2 = temp1;
          speed_now = 6*temp;

wfriend88 发表于 2014-7-6 21:31

麻烦会的大神帮忙看看哈。。。谢啦{:soso_e100:}

holmesds 发表于 2014-7-10 05:29

先把源码发过来,我再告诉你{:soso_e113:}

bipedrobot 发表于 2014-10-26 23:49

貌似EvaRegs.T2CNT计数值在0-66536之间吧;你这个程序在一个定时器中断里,两次定时器中断采集T2CNT的差值反应速度的高低;通过电机最高转速,定时器中断时间间隔,编码器分辨率我们可以确定T2CNT的差值一定会小于一个数字(这里取50000),如果定时器时间为10ms,电机最高速度为3000r/min,编码器2500线四倍频就是10000个脉冲一圈,这样可以计算10ms,电机最多转半圈,也就是dsp最多接收5000个脉冲,两次采集T2CNT的差值(temp2-temp1)绝对值最多为5000,考虑余量,这里取50000。
如果两次采集T2CNT的差值(temp2-temp1)>=50000说明T2CNT计算器向下溢出了,Place_now += temp2-temp1 + 65536;
如果两次采集T2CNT的差值(temp2-temp1)<=- 50000说明T2CNT计算器向上溢出了,Place_now += temp2-temp1 - 65536;
这里 + 65536和- 65536是为了校正T2CNT计算器溢出,造成的误差。

zxdzxd38378 发表于 2014-11-22 10:15

学习之中,关注一下

zaishangshan1 发表于 2015-1-22 11:01

我觉得是因为是看电机正反转,这样子也就决定了编码器的计数方式,上溢至0还是下溢至MAX方式
页: [1]
查看完整版本: 永磁同步电机矢量控制DSP程序的一个疑问