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.

[参考译文] TMS320F28062:关于 TMS320F28062单电阻采样时间延迟问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/625359/tms320f28062-about-tms320f28062-single-resistance-sampling-time-delay-problem

器件型号:TMS320F28062

尊敬的,

我们正在 TMS320F28062芯片中设计单电阻采样、当调试采样点时发现某些采样点的时间与我们在代码中设置的时间不匹配。 因此、我们需要检查原因。

在我们的设计中、我们配置 PWM1、PWM2、PWM3、A、 B 通道、它们将输出三相桥式波形、两个采样由 CMPA 和 CMPB PWM4值触发、并采用增加计数模式、当计数器值等于 CMPA 时、触发 SOC0采样;当触发 SOC1采样时、计数器值等于 CMPB 时、在两个采样中、  我们触发 EOC0和 EOC1,  并通过 ADCINT1和 ADCINT9调用 ADC_ISR1和 ADCISR2两个中断函数,只需分别在两个中断函数之前和之后进入操作的第一步, 在 GPIO 的同一电平上  、通过示波器观察采样位置。 具体波形如下所示:

如上图所示、紫色、黄色和绿色为三相桥式 PWM (所有 A 通道)、蓝色采样 GPIO 波形点中断控制可在我们的算法中、Euphrates 中的第一个中断被拉第二次时看到、这两次分别在三相占空比中上升时进行采样、 例如、在该波形的上方、蓝色线应以紫黄色拉、中间 Euphates 中的黄色绿色拉、在大多数情况下确实是这样、 但是、在所有的线段间隔之后、有时会出现一个或两个或三个异常点、蓝色波上升沿和下降沿(在右侧箭头上方、蓝色穿过黄色线)。

在我每次为每个 PWM 通道编写代码之前、CMPA 和 CMPB 将被分配给临时存储器分配的值、 在 PWM1、PWM2、PWM3和 PWM4的同一周期内、对 CMP 的总共4个采样点进行了比较、发现这些采样点分配给寄存器值、并且没有交叉情况。

这种现象、原因我们现在采样的电流值在测试方法中将出现较大的错误(或直接出现错误的采样点)、程序配置允许中断嵌套、并且在首次优先级高于第二次的情况下、 因此、个人感觉不是在这个周期结束前的第二个周期上中断第一个中断被延迟、从而导致这种现象、即使它应该是连续的时间延迟、但不是两个时间间隔?

即使我们增加三相驱动 PWM 的上升沿22之间的间隔、以确保采样点在前端和后端之间有足够多的时间间隔、"交叉"现象仍将出现在示波器观察中。

我不知道问题是否与下图有关?Pls help some advice,Great thx。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1、对于 GPIO 的蓝色波形、GPIO 是由 EPWM4控制还是在 ISR 中切换? 如果 GPIO 在 ISR 中被切换、这不是实际的 ADC 触发时间、那么延迟就是从进入中断时间开始。
    2.您的项目中启用了多少个中断? 以及如何设置 EPWM4的 CMPA 和 CMPB? 您是否认为时间不足以进行 ADC 采样?
    3.您发现了什么采样错误? 每次? 或者、采样误差出现在什么频率?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     当 ISR 分支发生时、CPU 会导致超过15个时钟周期的丢失、而编译器相关的堆栈推送会导致另许多周期的丢失。 因此、当您的第二个 ISR 发生时、到第一条指令执行时、它可能太晚了。

    您可以尝试一种逻辑、在 ADC ISR 期间只读取 ADC 数据、并使用另一个 ISR 来执行 socd 和其他数学密集型函数。 这样、编译器可能不会放置过多的栈指令、并延迟时间关键型采样。

    希望这对您有所帮助。