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

ipark_calc

typedef struct { _iq Alpha; 
_iq Beta; 
_iq Angle; 
_iq Ds; 
_iq Qs; 
void (*calc)(); 
} IPARK;

typedef IPARK *IPARK_handle;

#define IPARK_DEFAULTS { 0, \
0, \
0, \
0, \
0, \
(void (*)(Uint32))ipark_calc }

void ipark_calc(IPARK_handle);

void ipark_calc(IPARK *v)
{ float32 Cosine,Sine;
// Using look-up sine table// (PI/2)/(2*PI) = 0.25
// ((PI/2)/(2*PI))*256 = 0.25*256 = 64
// ((PI/2)-2*PI)/(2*PI) = -0.75
// (((PI/2)-2*PI)/(2*PI))*256 = -0.75*256 = -192

if (v->Angle+0.25 > 1.0) {
Sine = sin_tab[(int16)(v->Angle*256)];
Cosine = sin_tab[(int16)(v->Angle*256) – 192]; }
else
{ Sine = sin_tab[(int16)(v->Angle*256)];
Cosine = sin_tab[(int16)(v->Angle*256) + 64];
}
v->Alpha = v->Ds*Cosine – v->Qs*Sine;
v->Beta = v->Qs*Cosine + v->Ds*Sine;}

在第一步中

ipark1.Ds = _IQ(VdTesting); 
ipark1.Qs = _IQ(VqTesting); 
ipark1.Angle = rg1.Out; 
ipark1.calc(&ipark1); 

问题:这个   ipark1.Angle = rg1.Out; 都是_iq 宏定义为浮点数,则在查表里面 if (v->Angle+0.25 > 1.0) 这句话看着有觉得是Q格式,如果是浮点数,那就可能会大于1,那这条判断不是没有太多意义嘛?

user3586491:

_iq 是被定义为浮点数的吧?

typedef struct { _iq Alpha; 
_iq Beta; 
_iq Angle; 
_iq Ds; 
_iq Qs; 
void (*calc)(); 
} IPARK;

typedef IPARK *IPARK_handle;

#define IPARK_DEFAULTS { 0, \
0, \
0, \
0, \
0, \
(void (*)(Uint32))ipark_calc }

void ipark_calc(IPARK_handle);

void ipark_calc(IPARK *v)
{ float32 Cosine,Sine;
// Using look-up sine table// (PI/2)/(2*PI) = 0.25
// ((PI/2)/(2*PI))*256 = 0.25*256 = 64
// ((PI/2)-2*PI)/(2*PI) = -0.75
// (((PI/2)-2*PI)/(2*PI))*256 = -0.75*256 = -192

if (v->Angle+0.25 > 1.0) {
Sine = sin_tab[(int16)(v->Angle*256)];
Cosine = sin_tab[(int16)(v->Angle*256) – 192]; }
else
{ Sine = sin_tab[(int16)(v->Angle*256)];
Cosine = sin_tab[(int16)(v->Angle*256) + 64];
}
v->Alpha = v->Ds*Cosine – v->Qs*Sine;
v->Beta = v->Qs*Cosine + v->Ds*Sine;}

在第一步中

ipark1.Ds = _IQ(VdTesting); 
ipark1.Qs = _IQ(VqTesting); 
ipark1.Angle = rg1.Out; 
ipark1.calc(&ipark1); 

问题:这个   ipark1.Angle = rg1.Out; 都是_iq 宏定义为浮点数,则在查表里面 if (v->Angle+0.25 > 1.0) 这句话看着有觉得是Q格式,如果是浮点数,那就可能会大于1,那这条判断不是没有太多意义嘛?

Eric Ma:

问题:这个   ipark1.Angle = rg1.Out; 都是_iq 宏定义为浮点数,则在查表里面 if (v->Angle+0.25 > 1.0) 这句话看着有觉得是Q格式,如果是浮点数,那就可能会大于1,那这条判断不是没有太多意义嘛?

Eric: v-> Angle 只有是浮点数,if里面的判断才是合理的。为何你说没意义呢。

typedef struct { _iq Alpha; 
_iq Beta; 
_iq Angle; 
_iq Ds; 
_iq Qs; 
void (*calc)(); 
} IPARK;

typedef IPARK *IPARK_handle;

#define IPARK_DEFAULTS { 0, \
0, \
0, \
0, \
0, \
(void (*)(Uint32))ipark_calc }

void ipark_calc(IPARK_handle);

void ipark_calc(IPARK *v)
{ float32 Cosine,Sine;
// Using look-up sine table// (PI/2)/(2*PI) = 0.25
// ((PI/2)/(2*PI))*256 = 0.25*256 = 64
// ((PI/2)-2*PI)/(2*PI) = -0.75
// (((PI/2)-2*PI)/(2*PI))*256 = -0.75*256 = -192

if (v->Angle+0.25 > 1.0) {
Sine = sin_tab[(int16)(v->Angle*256)];
Cosine = sin_tab[(int16)(v->Angle*256) – 192]; }
else
{ Sine = sin_tab[(int16)(v->Angle*256)];
Cosine = sin_tab[(int16)(v->Angle*256) + 64];
}
v->Alpha = v->Ds*Cosine – v->Qs*Sine;
v->Beta = v->Qs*Cosine + v->Ds*Sine;}

在第一步中

ipark1.Ds = _IQ(VdTesting); 
ipark1.Qs = _IQ(VqTesting); 
ipark1.Angle = rg1.Out; 
ipark1.calc(&ipark1); 

问题:这个   ipark1.Angle = rg1.Out; 都是_iq 宏定义为浮点数,则在查表里面 if (v->Angle+0.25 > 1.0) 这句话看着有觉得是Q格式,如果是浮点数,那就可能会大于1,那这条判断不是没有太多意义嘛?

user3586491:

回复 Eric Ma:

我是觉得,既然是浮点数,那整数部分可能会比较大,去跟1判断那不是很多结果都是真的,是不是前面给 v-> Angle这个幅值的时候就做了限制的?

typedef struct { _iq Alpha; 
_iq Beta; 
_iq Angle; 
_iq Ds; 
_iq Qs; 
void (*calc)(); 
} IPARK;

typedef IPARK *IPARK_handle;

#define IPARK_DEFAULTS { 0, \
0, \
0, \
0, \
0, \
(void (*)(Uint32))ipark_calc }

void ipark_calc(IPARK_handle);

void ipark_calc(IPARK *v)
{ float32 Cosine,Sine;
// Using look-up sine table// (PI/2)/(2*PI) = 0.25
// ((PI/2)/(2*PI))*256 = 0.25*256 = 64
// ((PI/2)-2*PI)/(2*PI) = -0.75
// (((PI/2)-2*PI)/(2*PI))*256 = -0.75*256 = -192

if (v->Angle+0.25 > 1.0) {
Sine = sin_tab[(int16)(v->Angle*256)];
Cosine = sin_tab[(int16)(v->Angle*256) – 192]; }
else
{ Sine = sin_tab[(int16)(v->Angle*256)];
Cosine = sin_tab[(int16)(v->Angle*256) + 64];
}
v->Alpha = v->Ds*Cosine – v->Qs*Sine;
v->Beta = v->Qs*Cosine + v->Ds*Sine;}

在第一步中

ipark1.Ds = _IQ(VdTesting); 
ipark1.Qs = _IQ(VqTesting); 
ipark1.Angle = rg1.Out; 
ipark1.calc(&ipark1); 

问题:这个   ipark1.Angle = rg1.Out; 都是_iq 宏定义为浮点数,则在查表里面 if (v->Angle+0.25 > 1.0) 这句话看着有觉得是Q格式,如果是浮点数,那就可能会大于1,那这条判断不是没有太多意义嘛?

user3586491:

回复 Eric Ma:

DMC库3.2版的,是不是把里面中间的计算过程的所有变量的量程范围都限制在 (-1,1)或者(0,1)之间?

赞(0)
未经允许不得转载:TI中文支持网 » ipark_calc
分享到: 更多 (0)