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 变换与自己写的公式输出结果不一样,



使用DMC 库仿真时发现自己写的函数与park 变换与自己写的公式输出结果不一样,自己写的仿真控制电机仿真结果是对的,用库里的park就不对系统震荡,比较发现Clark变换自己写的与库模块输出是一样的,park模块输出就不一样了,为啥呢。

  • 哪位大神指导下哦
  • 您可以读一下链接中关于Digital Motor Control (DMC) Library内容,帮助您理解DMC库:
    processors.wiki.ti.com/.../TMS320C2000_Motor_Control_Primer
  • 您好
    项目有了进一步的进展,又遇到新的问题请指导下。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.