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/TIDEP0025:TIDEP0025演示中的33.3kHz PWM 频率

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/773739/rtos-tidep0025-33-3khz-pwm-frequency-in-tidep0025-demo

器件型号:TIDEP0025

工具/软件:TI-RTOS

你好。

我设置了 TIDEP0025演示、它在 Endat 编码器方面运行良好。

目前 、TIDEP0025演示在10kHz PWM 频率下运行。

我想 以33.3kHz PWM 频率运行 TIDEP0025演示、如 tidu701.pdf 中描述的基准测试设置。

因此、我进行了如下修改、但电机未旋转、D15 LED 亮起。

#define PWM_PERIOD 30000 //30US 用于33.3KHz
//#define PWM_PERIOD 40000 //40US for 25KHz -不起作用
//#define PWM_PERIOD 50000 //50us 用于20kHz
对于10kHz、//#define PWM_PERIOD 100000 //100us

您能告诉我如何在33.3kHz PWM 频率下正确运行 TIDEP0025演示吗?

2.您能告诉我为什么25kHz PWM 频率不起作用吗?

是否可以使用我当前的硬件设置以47kHz PWM 频率运行 TIDEP0025演示?

此致、

U-SK

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将研究 PWM_PERIOD 定义问题、并将让您知道我的发现。

    在 PWM 频率上需要注意的一点是、AM437x ePWM 使用100MHz 时钟计时。 最小粒度为10ns。 在评估 PWM 周期时间时、需要考虑这一点。

    您希望在47kHz 的 PWM 上实现的分辨率是多少? 使用100MHz 时钟时、47kHz 时应可实现~11位精度。

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

    感谢你的答复。
    我知道在47kHz 频率下应该可以实现~11位的精度。
    我目前并不是想要求解决问题,所以我会尽快通知你。

    如果您找到问题1和2的答案,您会告诉我吗?

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

    请告诉您其他信息。
    20kHz PWM 周期上的演示与 Endat 编码器配合使用很好。

    当我将 CPU 频率更改为300MHz 时、电机未旋转、D15 LED 亮起。

    是否由于处理 foocloop 的时间不适合下次 PWM 更新?

    此致、
    U-SK
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉耽误你的时间。 我仍在研究这个、并尝试复制。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    看起来 PWM 信号的初始化可能与此相关。 我对本地设置进行了更改、以便在 PWM 初始化结束时仅启用 PWM 时钟、并为我更正了问题。 您能否尝试关注变化并让我知道它是否也对您有用?

    在 soc_pwm.c 文件中创建以下函数:

    void CtrlPwmsTimebaseClkDisable (void)
    {
    /*CTRL_PWMSS - PWM3 syncin from PIN (eHRPWM3),针对所有*/的时基时钟禁用
    HWREG (SOC_CONTROL_MODULE_REG + CTRL_PWMSS)= CTRL_PWMS_PWM_SYNCSEL_MASK;
    } 

    在 Drv_PWM_Init()函数的开头(在 soc_PWM.c 文件中)调用该函数、以便在初始化发生时禁用 PWM 的时钟。

    现在、在 Drv_PWM_Init()函数的末尾(在 soc_PWM.c 文件中)、您需要添加一条隔离指令(以确保所有配置都已登录到寄存器中)、然后完全同时重新启用所有 PWM 时钟:

    hw_sync_barer();
    
    CtrlPwmsTimebaseClkEnable(); 

    所有这些更改之后、函数应如下所示:

    void Drv_PWM_Init (PWMGEN *p)
    {
    Int32 TM;
    TM =(Int32) p->PeriodMax;
    Int16 MPeriod;
    int32 tmp;
    
    CtrlPwmsTimebaseClkDisable();
    
    (笑声)
    PWM 初始化
    (笑声)
    
    hw_sync_barer();
    
    CtrlPwmsTimebaseClkEnable();
    }
    

    当 CPU 以300MHz 运行时、以及尝试以25kHz 运行 PWM 周期(CPU 为600MHz)时、这为我解决了这个问题。

    请告诉我这是否可以解决您的问题。

    Jason Reeder

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

    感谢你的答复。
    我知道您的电机以300MHz CPU 频率正确旋转20kHz PWM 周期、以600MHz CPU 频率旋转25kHz PWM 周期。
    CPU 频率为600MHz 时、33kHz PWM 周期和300MHz CPU 频率时、25kHz PWM 周期如何?

    我使用 GPIO 测量 fooclop()周转时间,结果如下:

    CPU 频率为600MHz 时为5.8~7us
    CPU 频率为300MHz 时为10.2~13us

    因此、我认为即使考虑到中断延迟和 ADC 处理时间、也可以在上述条件下运行演示。
    我想用300MHz CPU 频率实现33kHz PWM 周期、但我认为 fooclop()处理时间有点长。

    此致、

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

    您好!

    您能否确认您使用的是哪个版本的工业驱动器封装? 我发现版本01.00.02.03在写入01.00.02.00版本没有的三个 PWM 值时具有优化功能。 如果您使用的是版本01.00.02.00,则需要将 Drv_PWM_Update()函数底部的 CSL_epwmCounterComparatorCfg()(在 foc_PWM.c 文件中)的三个调用替换为以下代码:

    HWREGH (SOC_PWMSS3_REG + PWMS_ePWM_OFFSET + PWMS_ePWM_CMPA)=(uint16_t) p->PWM1out;
    HWREGH (SOC_PWMSS4_REG + PWMSS_EPWM_OFFSET + PWMSS_EPWM_CMPA)=(uint16_t) p->PWM2out;
    HWREGH (SOC_PWMSS5_REG + PWMSS_EPWM_OFFSET + PWMSS_EPWM_CMPA)=(uint16_t) p->PWM3out;
    
    hw_sync_barer(); 

    在 CiA402电机控制设置中执行此操作后、FOC 环路时序(在300MHz A9频率下)从~11.7us 更改为~8.8us。

    我认为、如果您进行以下3项更改、您应该能够在300MHz 或600MHz 下实现33kHz (使用 TIDEP0025演示(EnDat 和 CiA402)):

    1.  先前在此 E2E 主题中列出的 Drv_PWM_Init()函数更新(在演示开始时同步 PWM)
    2. 本帖子中提到的 Drv_PWM_Update()函数更改(在300MHz 时将计时减少近3us)
    3. 将 IEP_endat_start 偏移更改为 (PWM_PERIOD >> 1)- 400。 这会将 EnDat 位置捕获移至 PWM 周期的中间、并确保 EnDat 触发在25kHz 和33kHz PWM 周期时间发生。
      1. 为此、请使 soc.c 文件中的 IEP_endat_start 行如下所示(将20000更改为400):
        1.   p_mem_foc_params->IEP_endat_start =(PWM_PERIOD >> 1)-400;

    请告诉我、这三个更改是否使您的 TIDEP0025演示能够在 Arm 以300MHz 运行时以33kHz 的频率正确运行。

    Jason Reeder