TI中文支持网
TI专业的中文技术问题搜集分享网站

使用DMC 库仿真时发现自己写的函数与park 变换与自己写的公式输出结果不一样,

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

weiwei lin:哪位大神指导下哦

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

Seven Han:

回复 weiwei lin:

您可以读一下链接中关于Digital Motor Control (DMC) Library内容,帮助您理解DMC库:
processors.wiki.ti.com/…/TMS320C2000_Motor_Control_Primer

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

weiwei lin:

回复 Seven Han:

您好 项目有了进一步的进展,又遇到新的问题请指导下。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.

赞(0)
未经允许不得转载:TI中文支持网 » 使用DMC 库仿真时发现自己写的函数与park 变换与自己写的公式输出结果不一样,
分享到: 更多 (0)