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.

[参考译文] TMS320F28379D:针对更快的任务实施代码

Guru**** 2587345 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1189485/tms320f28379d-implementing-code-on-faster-tasks

器件型号:TMS320F28379D

大家好、是否可以在更快的任务上实现自定义算法、例如执行 EPWM 块的任务?

我在 这里成功实施了解决方案、但我注意到"精度"取决于采样时间。 我将尝试解释:

当检测到斜率变化时、记录计数器值(ePMW 的 TBCTR)、如果斜率在上升、则没有相位偏移和 TBPHS = TBCTR 的变化、并且如果斜率下降、TBPHS = TBPRD - TBCTR (180°漂移)。

  CounterShift_R2018a_v000.zip

我注意到、精度取决于我的应用采样时间。 在某些情况下、计数器斜率变化(CH4)对应于斜率变化数字信号(Ch1)、而在其他情况下、它会被移动几个周期。 两个数字在同一个运行期间记录。 可以看出斜率变化信号和实际计数器斜率变化之间存在延迟、并且斜率变化在"速度"时不会发生。

  • CH1:斜率变化信号
  • CH4:斜坡信号(计数器值)

在其他情况下、段不会被180°移位。 CH3和 CH4信号应同相、其中没有斜率变化信号、当斜率发生变化时、应移位180度。 但图中显示它们不是同相的、即使在两个斜率变化事件之间也不会以相同的角度移位。

  • CH1:斜率变化信号
  • CH3:来自另一个具有相同设置的 ePMW 的计数器信号
  • CH4:斜坡信号(计数器值)

这是否可以在一些更快的 ePWM 任务上实现该算法? 我还可以尝试其他方法吗?

此示例针对800Hz 的开关频率完成。 μs 50 μ s 任务的采样时间、这将为每个开关频率周期(计数器)提供25个点。 如果我转至任何更高的频率、例如8kHz、应用在每个开关频率周期(计数器)内只读取2.5个点、这对于当前采样时间的算法来说太小、无法正常工作。 如果我增加采样任务时间、我会溢出

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

    尊敬的 Mike:

    我将对此进行研究、并在一天结束时返回给您。  

    最棒的  

    Ryan Ma

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

    尊敬的 Mike:  

    "针对更快任务的自定义算法"是什么意思? 您是否意味着您需要一种使用自定义算法更快地执行 ISR 处理程序的方法?  

    CH1、是否应该在每次 CH4改变其斜率时切换? 即、当通道4下降时、CH1应切换、然后上升通道1将再次切换。 它是如何每4个左右周期切换一次的? 这是否有目的?

    我认为我理解这里的问题、

    在底部的图片中、当 CH1切换... Ch4和 CH3似乎是同步的、因为 Ch4是斜率上升。 然而、当通道4斜率变为下降时、通道3和通道4似乎没有被预期的180度相移。

    当斜率变为下降或上升时、你的 TBPHS 值是多少? 当斜率下降时、当 TBPHS 寄存器的相移值应为180度时、您能验证它是否具有您的预期值吗?  

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

    您好、Ryan、

     每次  正弦基准斜率变化时、该算法都会改变计数器斜率。 CH1是正弦斜率变化信号并启动 计数器斜率变化、即在 TBPHS 相位偏移寄存器中写入一个新值。

    该算法的工作原理如下:每次 正弦斜率改变时、时基计数器寄存器值 (TBCTR)都会被记录。 如果正弦 斜率为正、则记录的 TBCTR 被复制到偏移寄存器 TBPHS 中、即无变化。 如果正弦 斜率为负、则偏移寄存器 设置为 TBPRD -记录的 TBCTR。

    下图说明 了斜坡斜率 变化 的行为。

    [引用 userid="531667" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1189485/tms320f28379d-implementing-code-on-faster-tasks/4482900 #4482900"]

    在底部的图片中、当 CH1切换... Ch4和 CH3似乎是同步的、因为 Ch4是斜率上升。 然而、当通道4斜率变为下降时、通道3和通道4似乎没有被预期的180度相移。

    当斜率变为下降或上升时、你的 TBPHS 值是多少? 当斜率下降时、当 TBPHS 寄存器的相移值应为180度时、您能验证它是否具有您的预期值吗?  

    [/报价]

     我在  计数器变化 触发器处发送到 TBPHS 的 TBCTR 值  不是预期的100%、但也不是错误 的。 似乎存在漂移。 它们与之前的值或之前的值不同。 我不时得到正确的匹配、大部分时间不是180度漂移。  这也可以在 该图中看到。 它以 ~180度偏移开始、然后转至~0度偏移、但之后不是~180度偏移。

     

    [引用 userid="531667" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1189485/tms320f28379d-implementing-code-on-faster-tasks/4482900 #4482900">您的意思是"更快任务的自定义算法"。 您是否意味着您需要一种使用自定义算法更快地执行 ISR 处理程序的方法?  [/报价]

    是的。 如果我增加记录 TBCTR 的分辨率(从20e-5到10e-5采样时间)、  则数字之间的差异会更小。  但较低的采样时间会导致溢出。  本 示例中的 PWM 斜坡为800Hz、最终 值应为8kHz。 更快地执行算法似乎可以提高精度。  或者还有其他改进方法。

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

    尊敬的 Mike:

    很抱歉,我今天无法回答。 我明天将就此与您联系。

    最棒的

    Ryan Ma

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

    尊敬的 Mike:  

    我可以在中断专家中循环查看我们如何优化您的 ISR 处理程序。

    我想问的几个问题是、您如何编译代码? 在 Project > Properties > C2000 Compiler > Optimization 下、您可以自定义代码的编译方式级别。 通过提高速度、您能否看到这是否会首先起作用?

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

    您好、Ryan、

    对迟交的答复表示歉意。 我尝试了代码优化。 我甚至尝试运行"仅"ePWM 块+我的斜率移位代码、但仍然遇到相同的问题。 我还试图理解为什么会发生这种情况。  

    我能提出的最好的解释是:

    当斜率变化事件出现(Ch1)时、当 TBCTR 值被读取并保存为写入 TBPHS 以进行斜率变化时、时间 T1经过。  TBCTR 仍会增加单次 T2通过、只有在斜率变化生效后、 TBPHS 寄存器才会刷新、ePWM 从 TBPHS 开始计数。 它需要执行多个样本。 我提出这个问题(在较快的任务上实施代码)的理由是 、如果我增加采样时间、T1和 T2将会减少。

    这里建议了这个算法的想法一旦改变事件出现、TBCTR 应该被记录并且 ePWM 应该从 TBPHS 重新启动。  

    您能否告知中断(或中断专家的建议)是否可以帮助我继续?