尊敬的 TI 社区成员:
之前、我在上一个线程中从事 ECAP 和 ePWM 模块的工作、然后成功实现了这两个 模块。 此任务从函数发生器获取输入、作为从 ECAP 函数获取具有频率和占空比的数字脉冲信号、然后通过 ePWM 函数复制或生成具有相同频率和占空比的相同脉冲。 代码运行得很好、我可以看到变量值 PWM_PERIOD 和 PWM_DUTY 以 TBPRD 为单位( 分别对于10kHz PWM_PERIOD =15000和 PWM_DUTY = 7500)...(先前的工作)。
当您遇到这种情况时、 我添加 PID 代码 例程 (常用代码) 第297-323行的代码和 pid 代码使用 while 循环 。 我初始化 while 循环 首先从线路294或线路300但然后我 放弃这个想法和使用在线路268因为一旦我 从函数发生器获得信号的频率/周期和占空比,它必须 工作在相同的信号,我 从函数发生器我可以调谐 此函数发生器 信号 、因此 while 环路必须相应地运行。
(也许你可以建议更好的位置这 while 循环或我的 PID 常用代码后看到我的结果图片)。
注意:此处我不使用任何 DCL 库进行 PID 仿真。 对于一些背景信息、例如在极食、Matlab 或其他微控制器中、pid 例程代码通常用于 pid 仿真。 添加 pid 例程代码的原因是要根据如下条件更新 pid while 循环后的周期和占空比 新周期/新占空比。
常用 PID 代码:
while (1)
{
E =(ref-a1);
SE = se + e;
DE = e-le;
PID_OUT =(KP*e)+(KI*SE)+(KD*DE);// PID 方程
LE = e;
}
现在、我在这里添加结果、以澄清情况。
图片1:当从 Func 发生器应用10kHz、然后使用断点时、我按一次绿色按钮(调试):表达式窗口中的变量 PWM_PERIOD、PWM_DUTY 将提供大约正确的值14997和7495。 (TBPRD =15000 & TBPRD/2=7500)。
图1:

仍在使用绿色(调试)、 第328行的最后断点。 仍然没有问题、这些值正在自行更新。 然后、我开始使用 Assembly step into 函数、在断点之后从 CCS 工具栏中检查 EPwmRegs 的 TBPRD 和 CMPA/CMPB 值、该寄存器 EPwmRegs 的值也在自行更新。 到目前为止还没有问题。
见图2,图3。 您可以看到表达式窗口、它提供的值与可以完美地工作的值相同。
图2:

图3:

现在、它再次跳至 while 循环:请参阅 图4
图4:

此处问题从图5开始。 我的原始 PWM_Duty 会发生变化、这是我无法预期的。 因为我 没有 更改函数发生器信号的任何内容、所以该信号的值必须与 从图 1开始处看到的值 大致相同:PWM_PERIOD、PWM_DUTY 14997和7495。 然后、它开始在循环运行时更改表达式窗口中的每个变量。 所以我在这里怀疑 位置 共 while 循环 。 或使用我 常用的 PID 代码 位置。
图5


请根据相关建议
谢谢
敬礼
阿尔萨兰

