我改写SVPWM例程。
原来程序:
Ub = _IQsinPU(v->Angle);
我看头文件:
#ifndef GLOBAL_Q
#define GLOBAL_Q 16
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。
#if GLOBAL_Q == 16
#define _IQsinPU(A) _IQ16sinPU(A)
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#define _IQ16sinPU(A) sin((A)*6.283185307)
可是我改写成Ub = sin((v->Angle)*6.283185307);
电机不转。为什么?我观察计算后的值,也不一样。
奇了怪了。请高手解惑。谢谢!
Bruce Wei:
楼主你看的哪个程序,截个工程的图。
我改写SVPWM例程。
原来程序:
Ub = _IQsinPU(v->Angle);
我看头文件:
#ifndef GLOBAL_Q
#define GLOBAL_Q 16
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。
#if GLOBAL_Q == 16
#define _IQsinPU(A) _IQ16sinPU(A)
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#define _IQ16sinPU(A) sin((A)*6.283185307)
可是我改写成Ub = sin((v->Angle)*6.283185307);
电机不转。为什么?我观察计算后的值,也不一样。
奇了怪了。请高手解惑。谢谢!
ccb bcc:
回复 Bruce Wei:
好!
不是controlSUITE里的,那里面的太难懂。
我改写SVPWM例程。
原来程序:
Ub = _IQsinPU(v->Angle);
我看头文件:
#ifndef GLOBAL_Q
#define GLOBAL_Q 16
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。
#if GLOBAL_Q == 16
#define _IQsinPU(A) _IQ16sinPU(A)
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#define _IQ16sinPU(A) sin((A)*6.283185307)
可是我改写成Ub = sin((v->Angle)*6.283185307);
电机不转。为什么?我观察计算后的值,也不一样。
奇了怪了。请高手解惑。谢谢!
Bruce Wei:
楼主,你的代码的改写是基于 #ifndef GLOBAL_Q,如多其他地方 define 了 GLOBAL_Q 而且 不是16,就会出现你说的情况。
我改写SVPWM例程。
原来程序:
Ub = _IQsinPU(v->Angle);
我看头文件:
#ifndef GLOBAL_Q
#define GLOBAL_Q 16
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。
#if GLOBAL_Q == 16
#define _IQsinPU(A) _IQ16sinPU(A)
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#define _IQ16sinPU(A) sin((A)*6.283185307)
可是我改写成Ub = sin((v->Angle)*6.283185307);
电机不转。为什么?我观察计算后的值,也不一样。
奇了怪了。请高手解惑。谢谢!
ccb bcc:
回复 Bruce Wei:
#include "RotateVector.h"#include "iqmathlib.h"
不是的。头文件就两个。
GLOBAL_Q 16是在#include "iqmathlib.h"定义的。
#include "RotateVector.h"如下;
#include "IQMATHLIB.H"#ifndef __RotateVector_H__#define __RotateVector_H__
#define PI _IQ(3.1415926)
typedef struct{ void (*calc)(void *); //输入 _iq Angle; //旋转的角度 -1 ~ 1 _iq k; //输出电压乘的系数 0~1 //输出 _iq Ualpha; // Input: reference alpha-axis phase voltage _iq Ubeta; // Input: reference beta-axis phase voltage }ROTATEVECTOR;
#define ROTATEVECTOR_DEFAULTS {(void (*)(void *))RotateVecotr_calc, \ 0,0,0,0 }
typedef ROTATEVECTOR *RotateVecotr_Handle;
void RotateVecotr_calc(RotateVecotr_Handle);
#endif
我改写SVPWM例程。
原来程序:
Ub = _IQsinPU(v->Angle);
我看头文件:
#ifndef GLOBAL_Q
#define GLOBAL_Q 16
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。
#if GLOBAL_Q == 16
#define _IQsinPU(A) _IQ16sinPU(A)
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#define _IQ16sinPU(A) sin((A)*6.283185307)
可是我改写成Ub = sin((v->Angle)*6.283185307);
电机不转。为什么?我观察计算后的值,也不一样。
奇了怪了。请高手解惑。谢谢!
ccb bcc:
回复 ccb bcc:
顶,不能沉了啊!
我改写SVPWM例程。
原来程序:
Ub = _IQsinPU(v->Angle);
我看头文件:
#ifndef GLOBAL_Q
#define GLOBAL_Q 16
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。
#if GLOBAL_Q == 16
#define _IQsinPU(A) _IQ16sinPU(A)
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#define _IQ16sinPU(A) sin((A)*6.283185307)
可是我改写成Ub = sin((v->Angle)*6.283185307);
电机不转。为什么?我观察计算后的值,也不一样。
奇了怪了。请高手解惑。谢谢!
ccb bcc:
回复 ccb bcc:
extern long _IQ16sinPU(long A);
还有一句这个,越发的看不懂了。
我改写SVPWM例程。
原来程序:
Ub = _IQsinPU(v->Angle);
我看头文件:
#ifndef GLOBAL_Q
#define GLOBAL_Q 16
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。
#if GLOBAL_Q == 16
#define _IQsinPU(A) _IQ16sinPU(A)
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#define _IQ16sinPU(A) sin((A)*6.283185307)
可是我改写成Ub = sin((v->Angle)*6.283185307);
电机不转。为什么?我观察计算后的值,也不一样。
奇了怪了。请高手解惑。谢谢!
ccb bcc:
回复 ccb bcc:
Ub = _IQ16sinPU(v->Angle);
当v->Angle=49时,Ub=307.怎么也算不出这个数来。
我改写SVPWM例程。
原来程序:
Ub = _IQsinPU(v->Angle);
我看头文件:
#ifndef GLOBAL_Q
#define GLOBAL_Q 16
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。
#if GLOBAL_Q == 16
#define _IQsinPU(A) _IQ16sinPU(A)
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#define _IQ16sinPU(A) sin((A)*6.283185307)
可是我改写成Ub = sin((v->Angle)*6.283185307);
电机不转。为什么?我观察计算后的值,也不一样。
奇了怪了。请高手解惑。谢谢!
ccb bcc:
回复 ccb bcc:
再顶,期待高手出现。