使用DMC 库仿真时发现自己写的函数与park 变换与自己写的公式输出结果不一样,自己写的仿真控制电机仿真结果是对的,用库里的park就不对系统震荡,比较发现Clark变换自己写的与库模块输出是一样的,park模块输出就不一样了,为啥呢。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
使用DMC 库仿真时发现自己写的函数与park 变换与自己写的公式输出结果不一样,自己写的仿真控制电机仿真结果是对的,用库里的park就不对系统震荡,比较发现Clark变换自己写的与库模块输出是一样的,park模块输出就不一样了,为啥呢。
您好
项目有了进一步的进展,又遇到新的问题请指导下。SVGen使用Q15定标SVGen得出的数值又右移15位导致结果为零,
猜测使定标问题,试了好多方法就是不好使,请指导下。代码如下:
/* DataTypeConversion: '<Root>/Data Type Conversion1' */
{
int16_T sector;
int32_T Va, Vb, Vc;
sector = 0;
Va = rtb_Sum1;
Vb = _IQ15mpy (_IQ15(-0.5),rtb_Sum1) + _IQ15mpy (_IQ15(0.8660254),
rtb_DataTypeConversion3);
Vc = _IQ15mpy (_IQ15(-0.5),rtb_Sum1) - _IQ15mpy (_IQ15(0.8660254),
rtb_DataTypeConversion3);
if (Va > 0)
sector = 1;
if (Vb > 0)
sector = sector + 2;
if (Vc > 0)
sector = sector + 4;
Vb = _IQ15mpy (_IQ15(0.5),rtb_Sum1) + _IQ15mpy (_IQ15(0.8660254),
rtb_DataTypeConversion3);
Vc = _IQ15mpy (_IQ15(0.5),rtb_Sum1) - _IQ15mpy (_IQ15(0.8660254),
rtb_DataTypeConversion3);
if (sector==0) {
rtb_SpaceVectorGenerator_o1 = _IQ15(0.5);
rtb_SpaceVectorGenerator_o2 = _IQ15(0.5);
rtb_SpaceVectorGenerator_o3 = _IQ15(0.5);
} else if (sector==1) {
rtb_SpaceVectorGenerator_o2 = _IQ15mpy (_IQ15(0.5), (_IQ15(1) - Vc - Vb));
rtb_SpaceVectorGenerator_o1 = rtb_SpaceVectorGenerator_o2 + Vc;
rtb_SpaceVectorGenerator_o3 = rtb_SpaceVectorGenerator_o1 + Vb;
} else if (sector==2) {
rtb_SpaceVectorGenerator_o1 = _IQ15mpy (_IQ15(0.5), (_IQ15(1) - Vb + Va));
rtb_SpaceVectorGenerator_o3 = rtb_SpaceVectorGenerator_o1 + Vb;
rtb_SpaceVectorGenerator_o2 = rtb_SpaceVectorGenerator_o3 - Va;
} else if (sector==3) {
rtb_SpaceVectorGenerator_o1 = _IQ15mpy (_IQ15(0.5), (_IQ15(1) + Vc - Va));
rtb_SpaceVectorGenerator_o2 = rtb_SpaceVectorGenerator_o1 - Vc;
rtb_SpaceVectorGenerator_o3 = _IQ15mpy (_IQ15(0.5), (_IQ15(1) + Va - Vc));
rtb_SpaceVectorGenerator_o2 = rtb_SpaceVectorGenerator_o3 - Va;
rtb_SpaceVectorGenerator_o1 = rtb_SpaceVectorGenerator_o2 + Vc;
} else if (sector==5) {
rtb_SpaceVectorGenerator_o2 = _IQ15mpy (_IQ15(0.5), (_IQ15(1) - Va + Vb));
rtb_SpaceVectorGenerator_o3 = rtb_SpaceVectorGenerator_o2 + Va;
rtb_SpaceVectorGenerator_o1 = rtb_Space rtb_SpaceVectorGenerator_o3 = rtb_SpaceVectorGenerator_o2 + Va;
} else if (sector==4) {
VectorGenerator_o3 - Vb;
} else if (sector==6) {
rtb_SpaceVectorGenerator_o3 = _IQ15mpy (_IQ15(0.5), (_IQ15(1) + Vb + Vc));
rtb_SpaceVectorGenerator_o1 = rtb_SpaceVectorGenerator_o3 - Vb;
rtb_SpaceVectorGenerator_o2 = rtb_SpaceVectorGenerator_o1 - Vc;
}
rtb_SpaceVectorGenerator_o1 = _IQ15mpy (_IQ15(2),
(rtb_SpaceVectorGenerator_o1 - _IQ15(0.5)));
rtb_SpaceVectorGenerator_o2 = _IQ15mpy (_IQ15(2),
(rtb_SpaceVectorGenerator_o2 - _IQ15(0.5)));
rtb_SpaceVectorGenerator_o3 = _IQ15mpy (_IQ15(2),
(rtb_SpaceVectorGenerator_o3 - _IQ15(0.5)));
}
rtb_DataTypeConversion3 = rtb_SpaceVectorGenerator_o1 >> 15;
其中 rtb_SpaceVectorGenerator_o1为SVGen模块输出值,右移位之后变为0.