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.

[参考译文] LAUNCHXL-F28377S:CLA 并行计算错误

Guru**** 2487425 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/608842/launchxl-f28377s-cla-parallel-calculation-error

器件型号:LAUNCHXL-F28377S

我想使用 CLA、但发生了一些问题。  有一个循环需要计算8次。我希望 CPU 和 CLA 计算4次。但结果将是错误的。如果让其中一个核计算为8次、则没有错误。

CPU 程序如下所示:

TEM1 = 0;
flag_testing2=0.2;
GpioDataRegs.GPBCLEAR.bit.GPIO42=1;
fVal3=cosvalue;
fVal=sinvalide;
fVal1=e_d;
fVal2=e_q;
ftem2=tem2;
ftem3=tem3;
Fa0/a0;
Cla1ForceTask1();/CLA

对于(k=0;k<=3;k++)
{
//-------- 基本电压矢量的 Park 变换---
u_base_d[k]= u_base_alfa[k]*cosvalue + u_base_beta[k]*sinvalidue;
u_base_q[k]=-u_base_alfa[k]*sinvalidue + u_base_beta[k]*cosvalue;
//-------- 计算 e-_dash-------
e_dash_d[k]= tem2 - u_BASE_d[k]/tem_r_ta_sigma;
e_dash_q[k]= tem3 - u_BASE_q[k]/tem_r_ta_sigma;
//-------- 计算 A1、A2的值---
a2[k]=(e_dash_d[k])*(e_dash_d[k])+(e_dash_q[k])*(e_dash_q[k]);
a1[k]= 2*(e_d*e_dash_d[k]+ e_q*e_dash_q[k]);
//-------- 计算对称性---
对称[k]=-a1[k]/(a2[k]);
DIART = a1[k]* a1[k]- 4 * a2[k]* a0;

如果(直径> 0)
{
t[k]=(sqrt (diart)- a1[k])/(2 * a2[k]);
如果(t[k]> tem1)
{
温度1 = t[k];
k_new = k;
DELAY_ISR_COUNT = t[k]/TS;
}
} 

CLA 程序如下所示:

_interrupt void Cla1Task1 (void)
{

Int32米;
float tem11=0、dart1=0;
浮点 TS1 = 0.00005;
float tem_r_ta_sigma1=0.01954896;


float t_cla[4]; //结果向量
float u_base_alfa_cla[4]={-179、179、358、0}; //保留任务的输入参数
float u_BASE_BETA_CLA[4]={-310.03709455、0}; //输入参数的正弦
float u_base_d_cla[4];
float u_base_q_cla[4];
float e_dash_d_cla[4];
float e_dash_q_cla[4];
float A1_CLA[4];
float A2_CLA[4];


fResult=-1;
对于(m=0;m<=3;m++)
{

//-------- 基本电压矢量的 Park 变换---
u_base_d_cla[m]= u_base_alfa_cla[m]*fVal3 + u_base_beta_cla[m]*fVal;
u_base_q_cla[m]=-u_base_alfa_cla[m]*fVal + u_base_beta_cla[m]*fVal3;
//-------- 计算 e-_dash-------
e_dash_d_cla[m]= ftem2 - u_base_d_cla[m]/tem_r_ta_sigma1;
e_dash_q_cla[m]= ftem3 - u_base_q_cla[m]/tem_r_ta_sigma1;
//-------- 计算 A1、A2的值---
a2_cla[m]=(e_dash_d_cla[m])*(e_dash_d_cla[m])+(e_dash_q_cla[m])*(e_dash_q_cla[m]);
a1_cla[m]= 2*(fVal1*e_dash_d_cla[m]+ fVal2*e_dash_q_cla[m]);
//-------- 计算对称性---
//symmation_cla[m]=-a1_cla[m]/(a2_cla[m]);
DIART1 = A1_CLA[m]* A1_CLA[m]- 4 * A2_CLA[m]* fa0;

如果(DIART1 > 0)
{
t_cla[m]=(__sqrt (dart1)- a1_cla[m])/(2 * a2_cla[m]);
如果(t_cla[m]> tem11)
{
tem11 = t_cla[m];
fResult = DIart1;
KN=m+4;
DELAY_ISR_count1 = t_CLA[m]/TS1;
}
}

} 


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    结果有何错误? 您能更具体地描述您看到的错误吗? 您如何验证结果不正确?

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此过程的结果是计算最佳矢量。当我让一个核循环八次时、计算出的矢量是让电机运转、 但是、让两个内核计算四次、得到的矢量不允许电机运行。我检查了程序、没有发现逻辑错误。 因此、我认为存在计算误差。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否确认存在计算误差? 计算中的误差是多少?

    SAL