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.

[参考译文] TMS570LC4357:为 PWM 信号分配特定输出引脚。

Guru**** 2431490 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1293464/tms570lc4357-assign-specific-output-pin-for-pwm-signal

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

您好!

我正在尝试弄清楚如何为 PWM 输出分配一个特定端口。  从我目前拥有的代码来看、它将仅输出到单个默认端口 J8-3 (N2HET1_8/MIBSPI1SMO_1/MII_TXD_3/4.2C)。  为清楚起见、我已将代码修整为几行当前可用的代码。

谢谢

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%% 低于%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

/*用户代码开始(0)*/
#include "HL_HET.h"
#include "HL_Gio.h"
/*用户代码结束*/

/*包含文件*/

#include "HL_sys_common.h"

/*用户代码开始(1)*/
   uint16_t pwmDUTY;                                     //创建一个16位整数变量来修改占空比
   hetSIGNAL_t pwmSignal; // hetSIGNAL_t 是 het.h 中定义的结构

/*用户代码结束*/

/**@fn void main (void)
*  @简介应用程序主要功能
*  @注意此功能默认为空。
*
*  此函数在启动后调用。
*  用户可以使用此函数来实施应用程序。
*/

/*用户代码开始(2)*/
/*用户代码结束*/

int main (空)
{
/*用户代码开始(3)*/
   gioSetDirection (hetPORT1、0xFFFFFFFF);
   hetInit ();                                           //初始化 HET 驱动程序
   pwmSignal.Duty = 50;
   pwmSignal.Period = 2;// us 周期
   while (1){                                           //开始一个无限循环
          pwmSetSignal (hetRAM1、pwm0、pwmSignal);
   }
/*用户代码结束*/



/*用户代码开始(4)*/
/*用户代码结束*/

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

    您好、Ronald、

    TMS570LC43x 支持 N2HET 和 ePWM。 这两者都可以生成 PWM 信号。 如果你使用 N2HET 来生成 PWM、那么使用 HALCOGen 来选择 N2HET 引脚和配置 PWM 属性会更容易一些。

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

    感谢您的答复。  我本应该更具体一些。  据我所知、HALCOgen 在通过 GUI 设置静态参数时非常有用。  但是、我希望能够使用代码对所有内容进行操作、从而实现可变占空比等。  例如、读取一个模拟输入来调整占空比。  或开发闭环反馈控制。

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

    1.可以使用 API  pwmSetSignal()来选择一个 PWM 并配置这个 PWM 的属性。

    2.没有用于动态更改 PWM 引脚编号的 API。

    您的具体问题是什么?

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

    大家好、感谢您重播。  我不想动态地更改引脚输出。  我只想命令 PWM 信号从特定引脚发出(初始化)。  占空比和频率(可能)将是唯一需要根据模拟输入动态更改的因素。  可以使用 pwmSetSignal ()更改占空比和频率。

    但是、我希望能够直接控制将输出发送到哪个引脚。  在 GUI 中执行的任何操作都必须具有与之关联的代码。  我只是在尝试弄清楚如何对 PWM 输出引脚分配进行编码。

    谢谢

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

    pwmStart ()和 pwmStop ()将启动和停止 PWM 输出信号输出。

    实际上、你可以在 N2HET RAM 中通过 N2HET 指令来更改引脚编号:

    PWM0指令是指令1:

    PWM1是指令3:

    例如、您可以将 PWM0管脚编号从8更改为20:

    hetRAM->Instruction [(PWM << 1U)+ 1U ]。Control &=~(UINT32) 0x00001F00U;

    hetRAM->Instruction [(PWM << 1U)+ 1U].Control |=(UINT32) 0x00001400U;  

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

    再次感谢您的答复。  我没有在某处遵循语法。  在图像中输入代码会导致错误。  此外、文本代码似乎需要我在某个位置声明变量。  "CONTROL"、"指令"和"hetRAM"是不保留字。  我不明白这句话是什么意思。

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

    我设法通过使用 hetRAM1和 PWM 代码进行编译、 。  但是、我不确定黄色突出显示的代码中到底发生了什么。  我找不到来自任何引脚的输出信号。  我完全不熟悉其中的语法。  再次感谢您的帮助。

    #include "HL_sys_common.h"

    /*用户代码开始(1)*/
       uint16_t pwmDUTY;                                     //创建一个16位整数变量来修改占空比
       hetSIGNAL_t pwmSignal; // hetSIGNAL_t 是 het.h 中定义的结构

    /*用户代码结束*/

    /**@fn void main (void)
    *  @简介应用程序主要功能
    *  @注意此功能默认为空。
    *
    *  此函数在启动后调用。
    *  用户可以使用此函数来实施应用程序。
    */

    /*用户代码开始(2)*/
    /*用户代码结束*/

    int main (空)
    {
    /*用户代码开始(3)*/
       gioSetDirection (hetPORT1、0xFFFFFFFF);
       hetInit ();                                           //初始化 HET 驱动程序
       pwmSignal.Duty = 50;
       pwmSignal.Period = 2;// us 周期
       hetRAM1->Instruction [(pwm1 << 1U)+ 1U].Control &=~(UINT32) 0x00001F00U;
       hetRAM1->Instruction [(pwm1 << 1U)+ 1U].Control |=(UINT32) 0x00001400U;

       while (1){                                           //开始一个无限循环
              pwmSetSignal (hetRAM1、pwm1、pwmSignal);
       }
    /*用户代码结束*/



    /*用户代码开始(4)*/
    /*用户代码结束*/

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

    TMS570LC43x 有两个 N2HET 模块、因此 hetRAM 可以是 hetRAM1或 hetRAM2。 HET 寄存器头文件中定义了 hetRAM1和 hetRAM2。

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

    你好。  我没有遵循代码残桩的预期行为。  它们可能在某些其他代码未显示的上下文中有意义。  但是、我无法使用这些存在的代码段进行编译。  我不知道要把他们放在哪里,或者他们被认为是什么,不做任何评论。  我在 使用这款芯片以及一般 TI 芯片方面还比较陌生。  您可能会假设我具备任何背景知识、但我对该特定产品没有这方面的知识。

    我不知道如何更好地解释我要做什么。  也许其他人会在这个问题上开裂。  我所做的就是使用代码(而不是 GUI)将 PWM 输出分配给特定的引脚。 对于我过去使用的大多数器件、这是一个非常简单的过程。 即使使用这款特定器件、为特定引脚分配非 PWM 输出也非常简单。  我可能正在尝试使用这款器件实现的某些功能。  我不知道。

    此问题未得到解决 。  我只是不知道如何提出这项质询,以实际获得有关的答案。  我仍然没有。

    谢谢

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

    您好、Ronald、

    正如我之前提到的、您可以使用 ePWM 模块或 N2HET 模块来生成 PWM 信号。 从您的消息中、我知道您将为 PWM 使用 N2HET 模块。 N2HET 模块是一个提供高级定时功能的协处理器。 这些指令必须被复制到 N2HET RAM、然后从 N2HET SRAM 中执行。 HalCoGen 生成的代码(HET_INIT ())将 N2HET 指令复制到 N2HET RAM 中并运行它们。

    在 HALCoGen 中配置 N2HET 以生成 PWM 的步骤:

    1.在"Driver Enable"选项卡中启用 HETx 驱动程序。

    2.在"PINMUX"选项卡中选择 HETx 引脚。

    3.在 HETx 模块下,确保未选中"Enable Advanced Mode/Disable Blackbox Driver"(启用高级模式/禁用黑盒驱动程序)复选框。

    4.可以在"PWM 0-7"选项卡中配置八个 PWM 并使用不同的时间周期和占空比、并且可以将引脚分配给每个 PWM。 可以在"PWM 中断"选项卡中分配中断。

    生成的 PWM 指令位于 het1PROGRAM[..] 在 het.c 中

    静态 const hetINSTRUCTION_t het1PROGRAM[58U]={....}

    指令1 (PWCNT)用于定义 PWM0的占空比、指令2 (DJZ)用于定义 PWM0的周期。 两条指令都可以切换引脚。 指令41 (MOV64)是更新占空比、指令42是更新 PWM 周期。 若要在代码运行时修改占空比、周期或引脚编号、可以使用以下 API:

    1. pwmSetDuty(...)  

    2. pwmSetSignal(...)