TI中文支持网
TI专业的中文技术问题搜集分享网站

ti矢量控制例程求解

 

_iq K1=_IQ(0.998);  //Offset filter coefficient K1: 0.05/(T+0.05);
_iq K2=_IQ(0.001999); //Offset filter coefficient K2: T/(T+0.05);

#ifdef DSP2833x_DEVICE_H
 clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
 clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
 #endif                     // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3)  

if (IsrTicker>=5000)
     { 
      
      #ifdef DSP2833x_DEVICE_H
      offsetA= K1*offsetA + K2*(AdcMirror.ADCRESULT1)*0.00024414;    //Phase A offset
      offsetB= K1*offsetB + K2*(AdcMirror.ADCRESULT2)*0.00024414;    //Phase B offset
      offsetC= K1*offsetC + K2*(AdcMirror.ADCRESULT3)*0.00024414; ;   //Phase C offset
      #endif
  }

请教这段程序怎么解啊,(3.0/3.3)是什么意思    

yanzhen fu:

K1,K2是Q格式的参数,

clarke1.As,Bs,是clarke变换中的静止坐标系的, 这时是求这个坐标系上A,B的电流值。

下面的是用作电流校正用的。

兄弟是不是刚学电机控制啊?

 

_iq K1=_IQ(0.998);  //Offset filter coefficient K1: 0.05/(T+0.05);
_iq K2=_IQ(0.001999); //Offset filter coefficient K2: T/(T+0.05);

#ifdef DSP2833x_DEVICE_H
 clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
 clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
 #endif                     // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3)  

if (IsrTicker>=5000)
     { 
      
      #ifdef DSP2833x_DEVICE_H
      offsetA= K1*offsetA + K2*(AdcMirror.ADCRESULT1)*0.00024414;    //Phase A offset
      offsetB= K1*offsetB + K2*(AdcMirror.ADCRESULT2)*0.00024414;    //Phase B offset
      offsetC= K1*offsetC + K2*(AdcMirror.ADCRESULT3)*0.00024414; ;   //Phase C offset
      #endif
  }

请教这段程序怎么解啊,(3.0/3.3)是什么意思    

Johnson Chen1:

回复 yanzhen fu:

楼上的说的没错,下面这段是由来做相电流偏置校准的。是在电机没有运转的情况下运行。

if (IsrTicker>=5000)

    {

     #ifdef DSP2833x_DEVICE_H

     offsetA= K1*offsetA + K2*(AdcMirror.ADCRESULT1)*0.00024414;    //Phase A offset

     offsetB= K1*offsetB + K2*(AdcMirror.ADCRESULT2)*0.00024414;    //Phase B offset

     offsetC= K1*offsetC + K2*(AdcMirror.ADCRESULT3)*0.00024414; ;   //Phase C offset

     #endif

 }

而下面这段,是得到IU和IV

#ifdef DSP2833x_DEVICE_H

clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.

clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.

#endif                     // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3)  

至于楼主问的3.0/3.3),是这样的:

基于同一个开发板,TI 提供了F2803X和F2833X的例程,而F2803X的ADC量程是3.3V,而F2833X的量程是3.0V,但在“HVPM_Sensorless-Settings.h”中BASE_CURRENT是针对ADC输入脚为3.3V时的最大电流,因此在用F2833X的时候要乘以(3.0/3.3)这个比例系数。

#define BASE_CURRENT    10            // Base peak phase current (amp), Max. measurable peak curr.

 

_iq K1=_IQ(0.998);  //Offset filter coefficient K1: 0.05/(T+0.05);
_iq K2=_IQ(0.001999); //Offset filter coefficient K2: T/(T+0.05);

#ifdef DSP2833x_DEVICE_H
 clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
 clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
 #endif                     // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3)  

if (IsrTicker>=5000)
     { 
      
      #ifdef DSP2833x_DEVICE_H
      offsetA= K1*offsetA + K2*(AdcMirror.ADCRESULT1)*0.00024414;    //Phase A offset
      offsetB= K1*offsetB + K2*(AdcMirror.ADCRESULT2)*0.00024414;    //Phase B offset
      offsetC= K1*offsetC + K2*(AdcMirror.ADCRESULT3)*0.00024414; ;   //Phase C offset
      #endif
  }

请教这段程序怎么解啊,(3.0/3.3)是什么意思    

yanzhen fu:

回复 Johnson Chen1:

再请问JOHNSON, 这个电流,BASE_CURRENT10不是电机的额定电流了?是板子采样时ADC最大转换电流,谢谢,

还有,就是那基本频率,我看了一下程序,应该是表示电机的额定频率啊,但是为什么TI缺省的是120,我在实验中将它改成了运转时没什么明显的不同,倒底下哪个对啊?

 

_iq K1=_IQ(0.998);  //Offset filter coefficient K1: 0.05/(T+0.05);
_iq K2=_IQ(0.001999); //Offset filter coefficient K2: T/(T+0.05);

#ifdef DSP2833x_DEVICE_H
 clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
 clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
 #endif                     // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3)  

if (IsrTicker>=5000)
     { 
      
      #ifdef DSP2833x_DEVICE_H
      offsetA= K1*offsetA + K2*(AdcMirror.ADCRESULT1)*0.00024414;    //Phase A offset
      offsetB= K1*offsetB + K2*(AdcMirror.ADCRESULT2)*0.00024414;    //Phase B offset
      offsetC= K1*offsetC + K2*(AdcMirror.ADCRESULT3)*0.00024414; ;   //Phase C offset
      #endif
  }

请教这段程序怎么解啊,(3.0/3.3)是什么意思    

yanzhen fu:

回复 yanzhen fu:

还有,请问有没有自测电机参数的例程啊,我也放到这段代码后?

 

_iq K1=_IQ(0.998);  //Offset filter coefficient K1: 0.05/(T+0.05);
_iq K2=_IQ(0.001999); //Offset filter coefficient K2: T/(T+0.05);

#ifdef DSP2833x_DEVICE_H
 clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
 clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
 #endif                     // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3)  

if (IsrTicker>=5000)
     { 
      
      #ifdef DSP2833x_DEVICE_H
      offsetA= K1*offsetA + K2*(AdcMirror.ADCRESULT1)*0.00024414;    //Phase A offset
      offsetB= K1*offsetB + K2*(AdcMirror.ADCRESULT2)*0.00024414;    //Phase B offset
      offsetC= K1*offsetC + K2*(AdcMirror.ADCRESULT3)*0.00024414; ;   //Phase C offset
      #endif
  }

请教这段程序怎么解啊,(3.0/3.3)是什么意思    

Young Hu:

回复 yanzhen fu:

没有自测电机参数的例程。

 

_iq K1=_IQ(0.998);  //Offset filter coefficient K1: 0.05/(T+0.05);
_iq K2=_IQ(0.001999); //Offset filter coefficient K2: T/(T+0.05);

#ifdef DSP2833x_DEVICE_H
 clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
 clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
 #endif                     // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3)  

if (IsrTicker>=5000)
     { 
      
      #ifdef DSP2833x_DEVICE_H
      offsetA= K1*offsetA + K2*(AdcMirror.ADCRESULT1)*0.00024414;    //Phase A offset
      offsetB= K1*offsetB + K2*(AdcMirror.ADCRESULT2)*0.00024414;    //Phase B offset
      offsetC= K1*offsetC + K2*(AdcMirror.ADCRESULT3)*0.00024414; ;   //Phase C offset
      #endif
  }

请教这段程序怎么解啊,(3.0/3.3)是什么意思    

Johnson Chen1:

回复 Young Hu:

楼主你好!

BASE_CURRENT10不是电机的额定电流而是板子采样时ADC最大转换电流。

关于基本频率,可以根据你的电机实际值调整,强调一下这里的频率是电频率。

这个频率,就是标幺化后的IQ(1.0)所代表的频率。

 

_iq K1=_IQ(0.998);  //Offset filter coefficient K1: 0.05/(T+0.05);
_iq K2=_IQ(0.001999); //Offset filter coefficient K2: T/(T+0.05);

#ifdef DSP2833x_DEVICE_H
 clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
 clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
 #endif                     // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3)  

if (IsrTicker>=5000)
     { 
      
      #ifdef DSP2833x_DEVICE_H
      offsetA= K1*offsetA + K2*(AdcMirror.ADCRESULT1)*0.00024414;    //Phase A offset
      offsetB= K1*offsetB + K2*(AdcMirror.ADCRESULT2)*0.00024414;    //Phase B offset
      offsetC= K1*offsetC + K2*(AdcMirror.ADCRESULT3)*0.00024414; ;   //Phase C offset
      #endif
  }

请教这段程序怎么解啊,(3.0/3.3)是什么意思    

fred cong:

回复 Johnson Chen1:

请问 在电机控制的程序中 对电压的标幺的代码在什么位置呢?

 

_iq K1=_IQ(0.998);  //Offset filter coefficient K1: 0.05/(T+0.05);
_iq K2=_IQ(0.001999); //Offset filter coefficient K2: T/(T+0.05);

#ifdef DSP2833x_DEVICE_H
 clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
 clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
 #endif                     // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3)  

if (IsrTicker>=5000)
     { 
      
      #ifdef DSP2833x_DEVICE_H
      offsetA= K1*offsetA + K2*(AdcMirror.ADCRESULT1)*0.00024414;    //Phase A offset
      offsetB= K1*offsetB + K2*(AdcMirror.ADCRESULT2)*0.00024414;    //Phase B offset
      offsetC= K1*offsetC + K2*(AdcMirror.ADCRESULT3)*0.00024414; ;   //Phase C offset
      #endif
  }

请教这段程序怎么解啊,(3.0/3.3)是什么意思    

Johnson Chen1:

回复 fred cong:

楼主你好!

可查看HVPM_Sensorless-Settings.h文件,里面有:

#define BASE_VOLTAGE    236.14        // Base peak phase voltage (volt), Vdc/sqrt(3)

 

_iq K1=_IQ(0.998);  //Offset filter coefficient K1: 0.05/(T+0.05);
_iq K2=_IQ(0.001999); //Offset filter coefficient K2: T/(T+0.05);

#ifdef DSP2833x_DEVICE_H
 clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
 clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
 #endif                     // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3)  

if (IsrTicker>=5000)
     { 
      
      #ifdef DSP2833x_DEVICE_H
      offsetA= K1*offsetA + K2*(AdcMirror.ADCRESULT1)*0.00024414;    //Phase A offset
      offsetB= K1*offsetB + K2*(AdcMirror.ADCRESULT2)*0.00024414;    //Phase B offset
      offsetC= K1*offsetC + K2*(AdcMirror.ADCRESULT3)*0.00024414; ;   //Phase C offset
      #endif
  }

请教这段程序怎么解啊,(3.0/3.3)是什么意思    

fred cong:

回复 Johnson Chen1:

谢谢您!知道了!

 

_iq K1=_IQ(0.998);  //Offset filter coefficient K1: 0.05/(T+0.05);
_iq K2=_IQ(0.001999); //Offset filter coefficient K2: T/(T+0.05);

#ifdef DSP2833x_DEVICE_H
 clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.
 clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.
 #endif                     // ((ADCmeas(q12)/2^12)-offset)*2*(3.0/3.3)  

if (IsrTicker>=5000)
     { 
      
      #ifdef DSP2833x_DEVICE_H
      offsetA= K1*offsetA + K2*(AdcMirror.ADCRESULT1)*0.00024414;    //Phase A offset
      offsetB= K1*offsetB + K2*(AdcMirror.ADCRESULT2)*0.00024414;    //Phase B offset
      offsetC= K1*offsetC + K2*(AdcMirror.ADCRESULT3)*0.00024414; ;   //Phase C offset
      #endif
  }

请教这段程序怎么解啊,(3.0/3.3)是什么意思    

chenlong wu:

回复 yanzhen fu:

你好,我想问一下

clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.

clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.

上面两句程序中计算出的As、Bs值是标幺的还是没有标幺的

赞(0)
未经允许不得转载:TI中文支持网 » ti矢量控制例程求解
分享到: 更多 (0)