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.

[参考译文] CCS/TMS570LS0432:TMS570LS0432

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/584019/ccs-tms570ls0432-tms570ls0432

器件型号:TMS570LS0432
主题中讨论的其他器件:HALCOGENTMS570LS0714

工具/软件:Code Composer Studio

我喜欢 C2000演示项目、在该项目中、我们使用 PWM 定义了电压输出、并通过跳线至 PWM 的 ADC 读取该输出

Hercules 是否有类似的东西、如果没有、是否有人可以定义执行该操作的步骤?

另外、对于 Hercules、是否有任何方法使用 SW 来生成 PWM -示例演示可以实现 HalCoGen 中的所有功能? 没有 PWM.c 和 pwm.h 可用吗? 我想为生成的波形设置一个 SW 标签、以便可以在调试器中查看它。

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

    在某些 Hercules 器件中、我们包括 C2000产品团队使用的'e'定时器、其中包括 eQEP、eCAP 和 ePWM;但是、我们仅在 Hercules 系列器件的低端器件上包含 eQEP。 我们的所有器件还包括我们的原始计时器外设 NHET 或 N2HET、它们是我们的 HET IP 的最新版本。

    HET 是一个可编程的自动定时器模块、此模块能够处理非常复杂的基于时间的操作、此操作涉及 PWM、输入捕捉、边沿检测、甚至逻辑、以一种独立于 CPU 的方式来实现定时器信号的动态输出。 我们的应用手册和示例项目中有很多有关 HET 模块的文档。 尽管我承认、首先掌握软件可能会让人望而生畏、但一旦掌握了软件、使用可能性就非常广泛、包括发送、SPI、SCI、I2C 和 UART 等协议实现、更不用说正弦波生成、传统 PWM 等信号生成

    Halcogen 能够在 NHET 上生成简单的 PWM 输出、这是您真正需要的启动器功能。 首先、Halcogen 包含一个示例应用、它以 PWM 占空比定义的速率使 LED 闪烁。 您应该能够通过选择一个不同的 HET 输出通道来使这个与您正在寻找的 PWM 生成相匹配、以与40引脚接头上可用的 NHET 通道之一保持一致。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我了解如何使用 HET 来对 PWM 进行编程、以及如何在 HalCoGen 中执行它。

    但是、我的项目经理希望在软件中实现它。 HalCoGen 不会生成 PWM.c 、 PWM.h 或 ePWM.c、ePem.h

    我确实看到了 eQEP。 不知道这意味着、我能否对其进行编程以在 SW 中生成 PWM?

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

    我不理解您的项目经理希望您使用软件的评论? 由 Halcogen 生成的代码是 C 代码、其中包含 HET 特定代码、即 HET 汇编器目标代码。 HET 目标代码在启动时加载到 HET RAM 中、并在运行期间由微法器执行。 所有这些都是软件、因此会产生混淆。

    如果您的经理想要的是与 PWM 进行位转换、那么如果您想创建一些自定义代码、也可以支持该操作。 通常、我建议使用 RTI 按照所需的时钟周期数发出中断、以便可以切换 IN。 如果您需要50%以外的占空比、可以使用多个 RTI 计数器、其中一个将高电平切换为低电平、另一个将低电平切换为高电平。 您的软件必须设置计数器之间的比率来定义占空比。

    但是、如果您的经理希望器件上有 ePWM OE ePWM 模块、则 LS0432不会有这样的模块。 但是、您可以考虑升级到 TMS570LS0714、它包含 ePWM 计时器(在144 TQFP 中是肯定的、但必须检查100 TQFP 封装。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    卡盘、

    我同意使用 HET 等 但是、他们只购买了低端板、我认为它没有用于 PWM 生成的任何软件编程能力。 当然、我可以使用 HET 定时器在 HalCoGen 上生成一个、但是他们有这个概念、你可以在 SW 中执行、我实际上是针对 C2000系列执行的。 那么、我是否告诉他们这是一个不可去的地方、他们必须购买另一个电路板?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    同样、HET 编程也是软件、因此我不知道您来自哪里? LS0432具有多达19个 HET 通道、因此可对其进行编程以提供多达19个单独的 PWM。 也许、如果您更详细地解释一下软件 PWM 是什么意思? 文件的名称(pwm.c、pwm.h、ePWM.c、ePWM、h、het.c、 het.h)都是任意的、与器件功能的实际编程和使用无关。

    只需确定我们的理解是相同的、HALCoGen 是一款用于为器件生成硬件抽象层代码的工具。 它在配置引擎之上提供了一个 GUI、可输出驱动程序级代码以及您选择的模块配置。 如果我们有 ePWM 模块、它将为它执行相同的操作。 它的唯一目的是防止您需要编写所有驱动程序级代码(软件)来写入所有寄存器、从而为您的应用配置每个外设。 它提供了可由应用层代码调用的 API、以使用驱动程序来执行应用。 其中包括 HET 驱动器。 HALCoGen 支持的简单接口仅限于一些简单的 PWM、但还有其他 HET 代码示例、其中针对复杂操作实现了非常高的功能。 HET 还具有自己的 HET IDE 和汇编器、可用于为您的应用定制 HET 程序。 还有一个 HTU (HET 传输单元、与 DMA 相似、但侧重于 HET)可被用来改变 HET 存储器(命令行)中的参数、这样、例如、你能够动态改变 PWM 输出、类似于调整 ePWM 中的占空比。

    最后、如果您想告诉他们这是一个不可执行的操作、则由您决定。 HET 可以提供与 ePWM 相同的功能以及更多功能、因此我认为这不是一个正确的说法。 如果您想与您的经理进行电话讨论、我们当然可以安排。 如果您需要 ePWM 功能、那么系列树中的下一个器件肯定具有 ePWM 功能、并且采用100引脚兼容的 TQFP 封装、但与 LS0432的80MHz/384KB 相比、它在160MHz 系统时钟和高达1MB 闪存下具有更高的功能。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Nolan、

    看看你从用于 HET 的 HalCoGen 获得的头文件、它是 PWM。  

    void pwmStart (hetRAMBASE_t * hetRAM、uint32 PWM); 
    void pwmStop (hetRAMBASE_t * hetRAM、uint32 PWM);
    void pwmSetDuty (hetRAMBASE_t * hetRAM、uint32 PWM、uint32 pwmDuty);
    void pwmSetSignal (hetRAMBASE_t * hetRAM、uint32 PWM、hetSIGNAL_t 信号);
    void pwmGetSignal (hetRAMBASE_t * hetRAM、uint32 PWM、hetSIGNAL_t *信号);
    void pwmEnableNotification (hetBASE-t * hetREG、uint32 PWM、uint32通知);
    void pwmDisableNotification (hetBASE-t * hetREG、UINT32 PWM、UINT32通知);
    void pwmNotification (hetBASE-t * hetREG、UINT32 PWM、UINT32通知);


    因此、您可以调用函  数来启动和停止 PWM、设置占空比、设置/获取它的"稳定"结构(结构中的占空比+周期)以及管理中断通知。

    只要您可以使用上述 API、并且您可以配置哪些引脚通过 HalCoGen GUI 输出 PWM、您就不必编写任何 HET 代码即可将 HET 用于 PWM。  使用默认程序、每个 HET 最多可以有8个 PWM 输出、而 GUI 可让您选择引脚。


    HET 程序的边沿检测和输入捕捉功能有类似的 API。


    简而言之-有人编写了一个 HET 程序、使 HET 看起来像任何 MCU 上可能找到的标准计时器、他们编写了 C API、以像标准硬件计时器那样连接到该程序。 所有这些都整齐地封装在 HalCoGen 的 HET 驱动器中。

    作为这个驱动程序的最终用户、只需将它看作一个硬件定时器来执行你在 HalCoGen 中看到的 PWM、边沿检测、捕捉等的方框图。  

    真正不用担心其他任何事情。   不过、您需要通过重新编程 HET 来改变这种"纹波"视图的行为方式... 但尽量避免使用。

    我的看法。


    此致、

    Anthony

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

    哇,安东尼

    这是一个很好的答案。 这让我的一天变得更加美好、并为我节省了大量的开发时间。

    谢谢、

    Nolan

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

    我在一个简单的闪烁程序中尝试了您引用的函数。 没有乐趣。

    您能不能告诉我错误的地方。 当 HET 点亮时、无论代码如何、LED 都将保持点亮、如下所示。 如果我不初始化 HET、LED 永远不会亮起。

    这可能是我需要在 HalCoGen 上做的一些没有记录的事情、我完全讨厌它。

    谢谢、
    Nolan


    int main (空)

    /*用户代码开始(3)*/
    hetRAMBASE_t * HRT;
    hetSIGNAL_t 信号;
    hetInit();
    SIGNAL。Duty=80;
    signal.period=500;
    pwmSetSignal (hetRAM1、8、SIGNAL);
    pwmStart (hetRAM1、8);
    uint32 flip =0;
    while (1)

    if (翻转)

    pwmSetDuty (hetRAM1,8,80);
    触发= 0;
    等待(0xFFFFFFF);

    其他

    pwmSetDuty (hetRAM1、8、0);
    触发= 1;
    等待(0xFFFFFFF);


    };

    返回0;

    /*用户代码结束*/


    /*用户代码开始(4)*/
    空等待(UINT32时间)

    while (time){time--;};

    /*用户代码结束*/