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.

[参考译文] RTOS:ICEv2中的 PWM 生成

Guru**** 2614265 points
Other Parts Discussed in Thread: AM3359

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/656951/rtos-pwm-generation-in-icev2

主题中讨论的其他器件:AM3359EVMK2G

工具/软件:TI-RTOS

您好!

我使用 的是 AM3359 ICE v2.1a + SDK - ti-RTOS + PRU-ICSS-ETHERCAT_Slave_01.00.05.00。 和示例 EtherCAT 应用。

我需要使用 PWMSS 模块。

我在 SDK 中找到了三个示例代码

/ti/pdk_am335x_1_0_8/packages/ti/csl/example/epwm

/ti/pdk_am335x_1_0_8/packages/ti/starterware/examples/epwm

/ti/pdk_am335x_1_0_8/packages/ti/board/diag/pwm

这些示例之间的区别是什么?

2.我应该将哪个示例移植到 AM3359 ICE?  

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

    CSL ePWM 示例"在 PWMSS1输出 A (EHRPWM1A)中设置一个特定的占空比、该占空比可通过外部引脚探测进行验证"。
    Starterware ePWM 示例演示了如何使用 ePWM (API)旋转触觉电机。
    diag ePWM 示例验证了 ePWM 模块的 CSL 功能层 API -"此测试演示了如何使用 PWM CSL FL API
    配置 PWM 模块以生成1KHz 的脉冲、其占空比不同- 25、50和75%。"

    2.根据您的应用、您可以先从诊断 ePWM 示例开始、然后根据需要使用更多功能进行改进。

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

    感谢您的快速回复。 我尝试了诊断 ePWM 示例、成功生成了1KHz PWM。
    我需要控制伺服电机、因此我尝试使用示例生成50Hz PWM。 然而、我们看到、对于该示例、任何低于500Hz 的东西都是不可能的。

    生成较低频率 PWM 是否需要任何其他时钟配置?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    二条形、

    PWM 诊断在 processors.wiki.ti.com/.../Processor_SDK_RTOS_DIAG 上列出的板上进行了测试 。 您是否将其移植到 AM3359 ICE 或使用为 evmAM335x 构建的.out 文件? 您在 ICE 板上测量的是哪个引脚? 您是否为其它频率修改#define PWM_FREQ (1000)/*1KHz */?

    evmK2G - J12引脚33
    evmAM572x - P17引脚5
    idkAM437x - J16引脚14
    evmAM335x - J5引脚13

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将示例移植到 AM5559 ICE。我所做的更改如下

    我尝试在主机扩展连接器1- J4的(GPMC_AD8)上设置 EHRPWM2A

    /*模块时钟是 PWMSS 工作的频率*/
    #define MODULE_CLK (100000000)/*100MHz*/
    #define PWM_BASE_ADDRESS (SoC_PWMSS2_REG)
    #define delay (9 000000)

    #endif

    #define TBCLK_FREQ (MODULE_CLK/4)
    #define PWM_FREQ (50)/*50Hz*/


    /*启用 PWM 模块的时钟*/
    void BoardDiag (空)_pwmClockConfig (空)

    #if defined (evmAM335x)(如果已定义)

    /*为 PWMSS2启用 PRCM */
    HW_WR_REG32 ((SOC_CM_PER_REGS + CM_PER_EPWMSS2_CLKCTRL)、0x02);

    /*使用 PMWSS2 CLKCONFIG 寄存器启用 PWM 时钟*/
    HW_WR_REG32 ((PWM_BASE_ADDRESS + PWMSS_CLKCONFIG)、0x100);

    PWMSS2模块的/*时基时钟*/
    HW_WR_REG32 ((SOC_CONTRAL_REGS + CONTRAL_PWMSS_CTRL)、0x4);




    /*为 PWM 模块配置引脚多路复用器*/
    void BoardDiag 引脚多路复用配置(void)

    uint32_t regVal;

    #if defined (evmAM335x)(如果已定义)

    /*通道 A*/
    regVal = HW_RD_REG32 (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_AD (8));
    regVal =((regVal &~0x0F)| 0x04);
    HW_WR_REG32 (SOC_CONTRAL_REGS + CONTRAL_CONF_GPMC_AD (8)、regVal);



    然后调用
    BoardDiag (pwm_base_address);
    BoardDiag pwmConfig (PWM_BASE_ADDRESS、5);// 5%占空比



    我在这里缺少什么吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我对代码进行了以下更改

    #define TBCLK_FREQ(MODULE_CLK/100)->将 TBCLK_FREQ 更改为1MHz

    现在、计数器每次计数花费1us
    16位计数器的 IE 65536us

    对于50Hz PWM (20ms) 20000us --> TBPRD = 20000

    但是 DSO 输出显示为90Hz
    TBCLK_FREQ =(MODULE_CLK/32)给出了56Hz

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

    您能否尝试将占空比更新为50%而不是5%?
    BoardDiag pwmConfig (PWM_BASE_ADDRESS、50);// 50%占空比

    从 PCCTL 寄存器定义:
    10-8 CHPDUTY R/W 0h 斩波时钟占空比
    0h (R/W)=占空比= 1/8 (12.5%)
    1h (R/W)=占空比= 2/8 (25.0%)
    2h (R/W)=占空比= 3/8 (37.5%)
    3h (R/W)=占空比= 4/8 (50.0%)
    4h (R/W)=占空比= 5/8 (62.5%)
    5h (R/W)=占空比= 6/8 (75.0%)
    6h (R/W)=占空比= 7/8 (87.5%)
    7h (R/W)=被保留。

    此致、
    Garrett