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)之间?