新建的电机控制工程用到TMS320C28343.可是在运行到ipark1.Sine=_IQsinPU(rg1.Out);这一步。AD采样就停止工作了。是IQ_MATH的问题吗?换做ipark1.Sine=0;就可以了,编译器冲突,还是不兼容的问题。求指教。
mangui zhang:
应该不是编译器冲突和兼容问题
相关内容 请参考
结构:
typedef struct { _iq Alpha; // Output: stationary d-axis stator variable
_iq Beta; // Output: stationary q-axis stator variable
_iq Angle; // Input: rotating angle (pu)
_iq Ds; // Input: rotating d-axis stator variable
_iq Qs; // Input: rotating q-axis stator variable
_iq Sine;
_iq Cosine;
} IPARK;
使用方法:
ipark1.Ds = VdTesting; //转子在旋转坐标系下d轴的值——直轴(维持励磁的轴),数值上恒定表示旋转向量的模一定
ipark1.Qs = VqTesting; //转子在旋转坐标系下q轴的值——正交轴(出力矩的轴)
ipark1.Sine=_IQsinPU(rg1.Out); //根据角度求解对应正弦
ipark1.Cosine=_IQcosPU(rg1.Out);//根据角度求解对应余弦
IPARK_MACRO(ipark1) //调用PARK逆变换宏模块
实际效果:
通过已知的转子角度,和旋转向量的大小,求解得到静态坐标系下alpha和beta值
新建的电机控制工程用到TMS320C28343.可是在运行到ipark1.Sine=_IQsinPU(rg1.Out);这一步。AD采样就停止工作了。是IQ_MATH的问题吗?换做ipark1.Sine=0;就可以了,编译器冲突,还是不兼容的问题。求指教。
zhiyun pan:
回复 mangui zhang:
您好,我也是像这样调用的,可是发现一直到rg1.Freq = rc1.SetpointValue; RG_MACRO(rg1)这句时候AD都工作,可是加上后面的
ipark1.Ds = VdTesting; ipark1.Qs = VqTesting;
ipark1.Sine=_IQsinPU(rg1.Out);//sin((rg1.Out)*6.283185307);//_IQsinPU(rg1.Out); ipark1.Cosine=_IQcosPU(rg1.Out);//cos((rg1.Out)*6.283185307);//_IQcosPU(rg1.Out); IPARK_MACRO(ipark1)
这些语句,AD就不工作了,也没有错误和警报。不知道这会是哪里的问题