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.

[参考译文] TMS320F28375S:TMS320F28375S

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1324614/tms320f28375s-tms320f28375s

器件型号:TMS320F28375S
Thread 中讨论的其他器件:SysConfigC2000WARE

团队、您好!

我使用 CCS 12.6.0来开发 TMS320F28375S。 我使用 CCS 的内置 SysConfig (1.19.0)。 我在延迟产生以及 PWM 方面都面临问题。 我详细解释了我的问题。

(1) 我得到的 PWM 是我在 SysConfig 中设置的一半。

我的 Ftbclk 是200 MHz。 (时基时钟分频器 = 1且高速时钟分频器= 1)

借助上面的公式、我将时基周期的值设置为5000以生成10kHz 频率。

计数器模式=上-下计数模式。

但通过上述设置、我仅获得5kHz。

(2)我在项目中使用 FreeRTOS、CPU 时钟为200MHz、节拍率为1000。

我已经在 vTaskDelay 函数中设置了100ms 的延迟、但我得到200ms 的延迟。

有人能帮助我吗?

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

    尊敬的 Muzammil:

    请记住、TBCLK 的频率(f_TBCLK)是您的频率的调节版本。 ePWM 时钟 (不是200MHz 系统时钟)。  根据器件 数据表 第 7.11.2.2.1节"ePWM 时序要求"中的定义、ePWM 时钟最大值应为100MHz。 数据表中还有一条注释指出"对于100 MHz 以上的 SYSCLK、EPWMCLK 必须是 SYSCLK 的一半。" 这意味着您的 EPWMCLK 应该为100MHz (有一个系统时钟的分频器(EPWMCLKDIV)、此分频器默认为 EPWMCLK = SYSCLKOUT/2)。

    当 CLKDIV 和 HSPCLKDIV 分频器设置为1时、TBCLK 频率应该等于100MHz。 因此、如果您的目标 PWM 频率为10kHz、您确实应该使用5000的 TBPRD、因为您已正确设置向上向下双向计数模式。

    您能否在调试期间再次检查时钟分频器位是否设置正确? 如果其中一个设置为/2、这将解释5kHz (默认情况下、HSPCLKDIV 具体设置为/2)。

    此致、

    艾里森

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

    您好 Allison:

    谢谢更正了我。

    F_TBCLK 实际上是100 MHz。 即使我已将 TBPRD 设置为真值(5000)。 仍然没有得到10kHz 的频率。

    您能否仔细检查时钟分频器位是否在调试期间正确设置? 如果其中一个设置为/2、这将解释5kHz (默认情况下、HSPCLKDIV 具体设置为/2)。

    其次、您能否帮我解决我之前提到的与 FreeRTOS 中的 vTaskDelay 函数延迟相关的第二个问题?

    感谢您的支持。

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

    您好  Allison:

    检查后、我的所有外设都在工作频率是我设置的频率的一半。

    这意味着他们使用的是100 MHz、而不是200 MHz。

    我使用 Launchpad F28379D 是因为我知道我可以在 Launchpad 中运行 f28375s 代码(考虑外设/器件的差异)。Launchpad 上是否有我缺失的设置?

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

    尊敬的 Muzammil:

    您能否在 SysConfig 中检查时钟树、以便我们可以跟踪时钟源并查看哪些分频器/乘法器用于 SYSCLK --> PLL --> EPWMCLK...?

    关于自由 RTOS 问题-我 推测、 当我们确定半频时钟问题时可以解决这个问题。 如果没有、我将致电免费的 RTOS 专家、获得有关该问题的一些帮助

    此致、

    艾里森

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

    您好 Allison:

    这是我的时钟树屏幕截图。  如果该时钟源有任何问题、请提供指导。

      

    关于 Free RTOS 问题-我 推测 当我们确定半频时钟问题时可以解决此问题。

    是的、我也假设有这个。

    谢谢。此

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

    尊敬的 Muzammil:

    到目前为止、该时钟树对我来说很好、所以我会在最后进行测试。 同时、你也可以通过使用 SYSCTRL 模块限定时钟范围(例如 PLL、SYSCLK 等等)。 对于此特定器件、没有 C2000Ware 示例可以执行此操作、但有一个其他器件的示例可以参考({C2000Ware}\driverlib\f28p65x\examples\c28x\sysctl\sysctl_ex2_xclkOUT_config.c)并选择要路由到 GPIO 的时钟。

    通过使用一个具有此特性的示波器、您可以根据您的时钟倍频器/分频器来检查频率是否确实与预期的频率相匹配。

    此致、

    艾里森

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

    您好 Allison:

    由于某种原因、您的线程上没有显示回复选项。 我不知道为什么我会回答这个问题。

    在我的问题中、我显示 Device.c 文件中的时钟函数不是从 clocktree.h 文件获取参数、而是从 Device.h 文件获取参数。 这可能是错误的来源吗??

    谢谢,谢谢

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

    尊敬的 Muzammil:

    感谢您在 Device.h 中的注释。 我一直在尝试测试我们的一些示例、目前在该单核和双核版本的器件上看到了相同的行为。  我还做了三次检查、确认 device.h 文件对于两个器件之间的时钟设置共享相同的配置、但我想深入了解一些时钟分频器、并 在明天提供更新。  

    此致、

    艾里森

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

    尊敬的 Muzammil:  

    请允许我再花一天时间来研究 这个问题。 感谢您的耐心!

    此致、

    艾里森

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

    您好 Allison:

    不是问题

    感谢您的支持。

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

    尊敬的 Muzammil:

    我们再次对延迟表示歉意、但我将尽量在星期一结束前弄清楚 device.h 上的链接是否正确。 我还想确定的是、我是问您使用的是我们的 C2000Ware EPWM 示例还是您自己的代码? 如果您尚未准备就绪、则可以尝试我们的示例之一、看看您是否根据 TBPRD 得到类似的结果? 另一个问题-如果您将计数模式切换到非对称(例如向上计数)、您是否仍能看到预期频率的一半?

    此致、

    艾里森

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

    您好 Allison:

    您可以尝试我们的一个示例,看看您是否根据 TBPRD 获得类似结果? [/报价]

    我已经检查了示例(epwm_ex2_updown_AQ)和其他类似的示例、在本例中运行正常。 但我认为 ePWM 模块不是由 SysConfig 工具在该项目中配置的。 但它是通过使 initEPWM1()手动配置的;函数如下所示。 因此、在这种情况下、syscongif 对 Ftbclk 的变化不会影响 ePWM 频率。

    如果您将计数模式切换到非对称(例如向上计数),您是否仍能看到预期频率的一半?

    对于向上/向下计数的情况、公式为:

    但仅对于向上计数、公式为:

    很明显、频率会发生变化。

    请更正我的错误。

    谢谢。此致。

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

    尊敬的 Muzammil:

    我已经检查过此示例(epwm_ex2_updown_AQ)和其他类似示例,在本例中此示例工作正常。 但我认为 ePWM 模块不是由该项目中的 SysConfig 工具配置的。

    谢谢您告诉我。 为此、我将研究其他基于 SysConfig 的工程。 您还能附上代码吗? 或者如果它基于特定的 SysConfig 工程、请告诉我。

    至于更改计数模式、我的意思是您可以更改为向上计数、并使用第二个公式相应地更改 TBPRD (因此您可以使用 TBPRD = 10000)、以查看您是否能够获得所需的 10kHz 频率或者您仍然看到5kHz。 这只是为了确保它不依赖于 ePWM 计数器设置、而是项目级的问题

    此致、

    艾里森

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

    您好 Allison:

    或者如果它基于特定的 SysConfig 项目,请告诉我。

    我已将我的项目从现有项目"cla_ex1_asin"中创建并根据我的用途进行了修改。

    这只是为了确定它不依赖于您的 EPWM 计数器设置而被认为是一个项目级问题

    正如我先前提到的、 在检查后、不仅是 ePWM、而且所有外设都在我设置的频率的一半上工作。 例如、计时器、FreeRTOS 等。

    我将在此处附上代码、

    e2e.ti.com/.../2577.motor_2D00_controller_2D00_ti.zip

    请注意、我已将 clocktree.h 文件包含在 Device.c 中、并已将必需的时钟功能注释至 Device.h 文件、以便它能从 clocktree.h 文件中获取该参数。 在此阶段、代码运行良好、但当我从 Device.c 中删除 clocktree.h 文件时、时钟函数从 Device.h 获取参数、问题开始。 我只是想找出根本原因、以便 以后不会发生此问题。

    谢谢。此

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

    尊敬的 Muzammil:

    感谢您提供信息。 您能否在运行时发送 SYSPLLMULT 和 SYSCLKDIVSEL 寄存器值的屏幕截图? 我需要确切地检查它们在运行时设置了什么。

    此致、

    艾里森

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

    您好 Allison:

    我不知道你到底想要什么,但我已经在之前的消息中发送了我的整个项目。 您能为我从那里进行检查吗?

    BTW 我目前正在使用 launchpad F28379D。

    感谢您的支持。

    当您将 从 device.c 中删除"cpu1_RAM/syscfg/clocktree.h"文件并包含 device.h 文件时、将出现频率问题。

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

    尊敬的 Muzammil:

    如果您不知道这一点、可以在 CCS 中使用一个寄存器查看窗口来查看调试期间活跃的寄存器值。 下面是这样做的步骤,因为这是一个非常有用的调试程序的方法:  

    1. 打开 CCS、启动调试会话以运行项目代码。
    2. 代码运行后、在顶部的 CCS 工具栏中、转至"View">"Registers"
    3. 此时会弹出一个名为"Registers"的窗口。 请务必选择该窗口顶部的"Continuous Refresh"按钮、以便自动刷新寄存器(当值更改/更新时、寄存器将以黄色突出显示)。
    4. 您可以向下滚动到任何寄存器并将其展开、以显示寄存器字段并以十六进制或二进制形式检查每个字段的值。 对于 TBPRD 等数字、您也可以右键单击寄存器字段值、如果不想以十六进制显示、则将数字格式更改为十进制。

    现在解释一下我一直在做什么,而我在研究这个和如何找出什么是出了问题:

    • 我 按原样运行项目 (然后为 ePWM 运行5000 TBPRD)、并在 GPIO2  ( F28377S LaunchPad 的引脚80)上测量了 EPWM2A:
      • PLL 寄存器为所有预期值
      • 对于5000的 TBPRD、生成的频率为10kHz、这是良好/预期的
    • 我注释掉了 clocktree.h、并且在 device.c 文件中包含了 device.h  、同时也尝试从 device.h 注释掉 clocktree.h、但由于收到一些错误、无法完成-因此、我切换回我一直运行调试的其他示例。
    • 具体来说、我一直在 C2000Ware 中运行 epwm_ex2_updown_aq.c driverlib 示例:
      • 修改了工程以使 TBPRD 为5000并保持占空比恒定
      • EPWM 频率输出为5kHz 而不是10kHz、这是意外的
      • 其中一个 PLL 时钟倍频器是不同的(所有其他倍频器看起来都很好)。
        • 在 SYSPLLMULT 寄存器中、IMULT (整数乘法器是十进制的20、而不是预期的40)。
        • 这是导致系统以半时钟频率运行的原因、因此有一个5kHz 的 PWM 而不是10kHz。

    查看 device.h 文件时、 项目肯定会意外导入 F2837xS 控制卡 默认配置、使用20MHz OSC 源且 IMULT 为20。 F2837xS 提供  发射盘 具有10MHz OSC 源、因此应使用40的 IMULT。 我认为这正是导致问题的原因-因此虽然 device.h 是正确的、但错误的电路板特定配置被拉到项目中。

    • 要在不实现 SysConfig 时钟树的情况下解决此问题、请执行以下操作:
      • 一些 C2000板需要一个预定义符号来正确设置器件上的时钟和其他配置设置。 查看该项目的"device.h"文件时、有#ifdef 行使用预定义的符号、如:
        • 下图中显示了"#ifdef _LAUNCHXL_F28377S"
      • 当 您看到 ifdef 符号如"_LAUNCHXL_F28377S"、并且您将使用该电路板进行测试时、您需要向项目添加一个预定义的符号、以便它能够识别您正在使用的电路板并相应地实施任何更改
      • 要添加预定义符号:
        • 在 CCS 中、右键点击正在使用的工程、然后选择 Properties→Build→C2000 Compiler→Predefined Symbol→然后选择加号按钮"add"符号。 为 device.h 文件中找到的特定器件添加给定的预定义符号(如"_LAUNCHXL_F28377S")
    • 要通过实现 SysConfig 时钟树来解决此问题、请执行以下操作:
      • 乘法器/除法器等在  SysConfig  时钟树中都是正确的、 但没有实现、因此为了执行此操作、您需要添加 SysConfig "  器件支持"、然后从编译中排除工程器件文件(可以通过右键点击 Project Explorer 面板中的文件并"排除来自编译"来完成)
      • 添加器件支持并重新运行示例后、我看到预期的10kHz ePWM、因为工程正在使用 SysConfig 并根据使用的电路板进行调整。
    • 请注意、该频率变化和电路板特定配置的差异不是较新器件和 SysConfig 支持的问题。 也只是想说,感谢你的耐心,当我看到这! 请告诉我、这是否可以解决该问题、以及是否有其他事情可以帮助我!

    此致、

    艾里森

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

    您好 Allison:

    感谢您的持续支持、非常感谢。

    查看 device.h 文件时, 项目必须意外地引入 F2837xS 控制卡 默认配置、使用20MHz OSC 源且 IMULT 为20。 F2837xS 提供  发射盘 具有10MHz OSC 源、因此应使用40的 IMULT。 我相信这正是导致问题的原因-因此虽然 device.h 是正确的、但错误的电路板特定配置被拉入项目中。

    所有这一切时钟问题都是因为 LaunchPad F28379D ( 我目前正在使用但用于基于 TMS320F28375S 的项目)。 这就是你想说的。

    • 当 您看到 ifdef 符号如"_LAUNCHXL_F28377S"、并且您将使用该电路板进行测试时、您需要向项目添加一个预定义的符号、以便它能够识别您正在使用的电路板并相应地实施任何更改
    • 添加预定义的 symbo
    [/报价]

    我已经为我的项目选择了 TMS320F28375S、但我知道、没有任何与此控制器相关的板(请提供相关建议)、因此我正在使用 Launchpad F2837 9d  直到我的实际 TMS320F28375S PCB 准备就绪、目前处于研发阶段。 (请注意、我不在使用 77节 但我正在使用 75秒 ).那么、我应该使用哪个预定义符号来实现它???

    请注意,此频率变化和电路板特定配置的差异与较新的器件和 SysConfig 支持无关。

    总的来说、问题不在于时钟选择、而在于控制器选择和符号。 这就是你想说的。

    谢谢。此

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

    尊敬的 Muzammil:

    是的、这就是只有 F2837 Launchpad 与 F2837 controlCARD 之间的区别。 正如我提到过的、较新的器件或使用 SysConfig 的情况并非如此。

    如要使用 Launchpad 进行测试、您应添加 预定义符号、以便时钟设置反映您的预期。 使用 controlCARD 时,可以删除预定义符号。  

    看一下 device.h、ifdef 语句是"#ifdef _LAUNCHXL_F28377S"、因此这是您需要添加以传递这些代码段的预定义符号。 您也可以更改 IMULT 乘法器、使其使用的是40而不是20、正如我在上一答复中所说的那样-但通常最佳做法是使用预定义符号、以便考虑任何取决于电路板的#ifdef 语句。 当您获取 TMS320F28375S 时、可以切换回板更改帐户。

    如果您有其他问题、敬请告知!

    此致、

    艾里森