_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值是标幺的还是没有标幺的