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.

[参考译文] TMS320F28377S:CLA 中的案例声明

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/586718/tms320f28377s-case-statement-in-cla

器件型号:TMS320F28377S

我的应用需要1MHz 控制环路以及数据采集。 在我的当前代码中、ADC 会触发 CLA 任务和主 CPU 中的 ISR。 CLA 任务执行控制、而 ISR 执行数据采集。 根据 CPU 中的状态机、CLA 必须更改正在运行的控制算法的类型。 为了实现这一点、我在 CPU 到 CLA 消息 RAM 中定义整数、并将其用作 CLA 任务中一个 case 语句的标志。 我的问题是这种实施的结果不一致。 case 语句似乎有时起作用、但在其他情况下、我可以看到 CCS 中 flag 变量的值、但 CLA 似乎没有进入该 case。

我怀疑这个问题与 CLA 和 CPU 之间通过读取/写入标志变量的仲裁有关、但我不确定。 此策略是否存在明显的问题? 是否有更好的方法在 CPU 和 CLA 之间实现通信以确定实施了哪种控制算法。

CLA 任务中的代码如下(MODE_CLA 是在 CPU 至 CLA 消息 RAM 中定义的标志变量):

开关(MODE_CLA)

情况0://无控制,无正弦(空闲,伺服,预充电,BUCKUP, 错误)

RK = VBATT_VUBS;
RK2 = 0.0;
T = 0;
中断;
情况1://内部控制,无正弦(CTRLUP、ZTEST)
RK = VBATT_VUBS;
RK2 = 0.0;
T = 0;

UKI = DCL_runPIc (&ctrl_inner_pi、rk、AK);
UK_CMP =(long)(UKI * 6553600);
EPwm1Regs.CMPA.ALL = UK_CMP;
中断;
案例2://innter+Outer 控制、无正弦(EISSETUP、发送)
RK = VBATT_VUBS;
RK2 = 0.0;
T = 0;

uko = DCL_runPIc (&Ctrl_OUT_PI、RK2、YK);
UKI = DCL_runPIc (&ctrl_inner_pi、uko、AK);
UK_CMP =(long)(UKI * 6553600);
EPwm1Regs.CMPA.ALL = UK_CMP;
中断;
案例3://内部控制、正弦(ZTEST 运行)
fResult = CLAsin ((float) t*tcontrol*two_pi/Tperturb[0]);
RK = VBATT_VULBS + fResult*振幅;
rk2 =fResult*振幅;
最后= 3;
UKI = DCL_runPIc (&ctrl_inner_pi、rk、AK);
UK_CMP =(long)(UKI * 6553600);
EPwm1Regs.CMPA.ALL = UK_CMP;
中断;
案例4://内部+外部控制,正弦(运行)
fResult = CLAsin ((float) t*tcontrol*two_pi/Tperturb[0]);
RK = VBATT_VULBS + fResult*振幅;
rk2 =fResult*振幅;

uko = DCL_runPIc (&Ctrl_OUT_PI、RK2、YK);
UKI = DCL_runPIc (&ctrl_inner_pi、uko、AK);
UK_CMP =(long)(UKI * 6553600);
EPwm1Regs.CMPA.ALL = UK_CMP;
中断;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您只能在 CLA 任务结束中断中更新 MODE_CLA。 如果 ISR 很小、CLA 很可能不会运行、因此会尝试读取 MODE_CLA。