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

28335 Clarke函数改写错误

各位老师好。最近在对官方给出的CLARKE_MACRO(clarke1)的函数进行改写,出现问题,求助大家解答。

图中蓝色框为官方给出的Clarke变换头文件;黄色框为自己改写的Clarke文件;目的是想通过结构体指针将变量定义与函数分离;

电机运行过程中进行数学变换用的变量,仍采用官方给出的Clarke文件(clarke1)计算,自己改写的(Clarke_Actu)仅与之比对;

在Expression中将两者结果进行比对,可以观察到二者的输入A B相电流相同;但数学计算输出的Beta值与实际值相差太大;

后经验证可得只要在改写后的文件中做数学运算就会出现很大误差,还请大家指点一下。万分感谢。

Susan Yang:请问能否给出您自己改写的Clarke文件的完整代码?

您现在的图片内我无法看到完整的该函数,谢谢

各位老师好。最近在对官方给出的CLARKE_MACRO(clarke1)的函数进行改写,出现问题,求助大家解答。

图中蓝色框为官方给出的Clarke变换头文件;黄色框为自己改写的Clarke文件;目的是想通过结构体指针将变量定义与函数分离;

电机运行过程中进行数学变换用的变量,仍采用官方给出的Clarke文件(clarke1)计算,自己改写的(Clarke_Actu)仅与之比对;

在Expression中将两者结果进行比对,可以观察到二者的输入A B相电流相同;但数学计算输出的Beta值与实际值相差太大;

后经验证可得只要在改写后的文件中做数学运算就会出现很大误差,还请大家指点一下。万分感谢。

TieZhu Da:

回复 Susan Yang:

Susan你好,很高兴收到回复,蟹蟹。

改写的Clarke头文件.h如下:(改写)
#ifndef INC_PMSM_CLARK_H_
#define INC_PMSM_CLARK_H_
#include "IQmathLib.h"
#include <math.h>

typedef struct{_iq As;_iq Bs;_iq Cs;_iq Alpha;_iq Beta;} CLARKE_TYPE;

#define Clarke_Init {0, \0, \0, \0, \0, \}
#endif /* INC_PMSM_CLARK_H_ */

改写的源文件.c如下:(改写)
#include "IQmathLib.h"
#include "PMSM_Clark.h"

void PMSM_Clarke(CLARKE_TYPE *Clarke_Temp)
{Clarke_Temp->Alpha = Clarke_Temp->As;Clarke_Temp->Beta = _IQmpy((Clarke_Temp->As +_IQmpy2(Clarke_Temp->Bs)),_IQ(0.57735026918963));
}

变量初始化:
CLARKE clarke1 = CLARKE_DEFAULTS;(官方)
CLARKE_TYPE Clarke_Actu = Clarke_Init;(改写)

在MainISR中调用如下:
clarke1.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909; // Phase A curr.(官方)clarke1.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909; // Phase B curr.(官方)
Clarke_Actu.As=((AdcMirror.ADCRESULT1)*0.00024414-offsetA)*2*0.909;(改写)Clarke_Actu.Bs=((AdcMirror.ADCRESULT2)*0.00024414-offsetB)*2*0.909;(改写)
CLARKE_MACRO(clarke1)(官方)PMSM_Clarke(&Clarke_Actu);(改写)

电机驱动采用官方给出的clarke.h文件(CLARKE_MACRO),自己改写部分不用于电机运行控制,仅与官方结果做对比;

对比结果出现了上述图片中的问题:

利用改写后的函数PMSM_Clarke()做数学计算输出的Beta值与实际值相差太大;后经验证可得只要在改写后的文件PMSM_Clarke()中做数学运算就会出现很大误差。

希望可以得到回复;

蟹蟹 Susan.

祝工作顺利,心情愉快。

赞(0)
未经允许不得转载:TI中文支持网 » 28335 Clarke函数改写错误
分享到: 更多 (0)