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/TMS320F28335:在中断 void epwm1_timer_ISR (void)中使用 DELAY_US

Guru**** 2601915 points
Other Parts Discussed in Thread: C2000WARE, CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/674747/ccs-tms320f28335-using-delay_us-in-interrupt-void-epwm1_timer_isr-void

器件型号:TMS320F28335
Thread 中讨论的其他器件:C2000WAREcontrolSUITE

工具/软件:Code Composer Studio

################################

中断 void epwm1_timer_ISR (void)

EPwm1_Count++;

Vo = AdcRegs.ADCRESULT0>>4;
Vin =(AdcRegs.ADCRESULT1 >>4);
IL = AdcRegs.ADCRESULT2 >>4;

'/############## 降压模式

如果(.........)

…………

EPwm1Regs.AQCSFRC.bit.CSFA = 2;
EPwm1Regs.AQCSFRC.bit.CSFB = 1;

如果(.........)
{''''''''''''''''''''''''''''''''''''''''''''''''''''
DELAY_US (2L);
EPwm1Regs.AQCSFRC.bit.CSFA = 1;  
EPwm1Regs.AQCSFRC.bit.CSFB = 2;  

DELAY_US (2L);


其他

##################################

我使用了 delay()函数并在()中设置2L。 然后、我使用示波器检查它、其近似值为5.6mS。
我找到的公式为"((a * 1000)/16.67 -9)/5"、此数字必须为0.316uS。
设置错误吗?

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

    DELAY_US()宏定义为以所需的微秒数进行延迟,因此如果正确定义了宏,行:DELAY_US(2L);应导致2微秒延迟。 您可能已经看到这个宏在 DSP2833x_examples.h 中定义 CPU_RATE 应设置为周期时间、以纳秒为单位。 F28335的默认 CPU_RATE 为6.67 (对应于6.67ns 周期时间)、因为150MHz 是器件的默认 SYSCLKOUT。

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

    Elizabeth、您好!  

    非常感谢您的支持、我已经检查了这个6.67L 的设置。

    for (;;)//idle 循环

    如果(IL < 500 &&升压= 1)//升压模式,IL <-3 OCP

    DELAY_US (1);// 36uS、  
    EPwm1Regs.AQCSFRC.bit.CSFA = 2;//HG 打开
    EPwm1Regs.AQCSFRC.bit.CSFB = 1;//LG 关闭
    DELAY_US (1);// 38.4uS

    Delay_US (1)等于 示波器上的36uS~38.4uS、我认为这是 ADC&ePWM 带宽限制。

    我 的 DSP2833x_examples.h 如下所示

    // TI 文件$Revision:/main/9 $
    //签入$日期:2008年7月2日14:31:12 $
    //######################################################################################################################
    //
    //文件:DSP2833x_Examples.h
    //
    //标题:DSP2833x 器件定义。
    //
    //######################################################################################################################
    //$TI 发行版:DSP2833x/DSP2823x C/C++头文件 v1.31 $
    //$Release Date:2009年8月4日$
    //######################################################################################################################

    #ifndef DSP2833x_examples_H
    #define DSP2833x_examples_H


    #ifdef __cplusplus
    extern "C"{
    #endif

    -------------------------------------------------- *
    #define CPU_RATE 6.667L //针对150MHz CPU 时钟速度(SYSCLKOUT)
    //#define CPU_RATE 7.143L //对于140MHz CPU 时钟速度(SYSCLKOUT)
    //#define CPU_RATE 8.333L //对于120MHz CPU 时钟速度(SYSCLKOUT)
    //#define CPU_RATE 10.000L //对于100MHz CPU 时钟速度(SYSCLKOUT)
    //#define CPU_RATE 13.330L //针对75MHz CPU 时钟速度(SYSCLKOUT)
    //#define CPU_RATE 20.000L //针对50MHz CPU 时钟速度(SYSCLKOUT)
    //#define CPU_RATE 33.333L //对于30MHz CPU 时钟速度(SYSCLKOUT)
    //#define CPU_RATE 41.667L //对于24MHz CPU 时钟速度(SYSCLKOUT)
    //#define CPU_RATE 50.000L //对于20MHz CPU 时钟速度(SYSCLKOUT)
    //#define CPU_RATE 66.667L //对于15MHz CPU 时钟速度(SYSCLKOUT)
    //#define CPU_RATE 100.000L //对于10MHz CPU 时钟速度(SYSCLKOUT)

    -------------------------------------------------- *
    #if DSP28_28332 //仅限 DSP28_28332器件
    #define CPU_FRQ_100MHz 1 // 100MHz CPU 频率(20MHz 输入频率)
    #define CPU_FRQ_150MHz 0
    其他
    #define CPU_FRQ_100MHz 0 // DSP28_28335||DSP28_28334
    默认情况下#define CPU_FRQ_150MHz 1 // 150MHz CPU 频率(30MHz 输入频率)
    #endif


    //不要修改此行。
    #define DELAY_US (a) DSP28x_usDelay (((( long double) A * 1000.0L)/(long double) cpu_rate)- 9.0L)/ 5.0L


    #ifdef __cplusplus

    #endif /* extern "C"*

    DSP2833x_examples_H 定义的#endif //结束


    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //文件结束。
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    我还有其他问题是如何使用 FIR 或 IIR 滤波器来实现二阶滤波器。 我搜索了 TI 和 google 网站。我无法访问它  

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

    虽然在示波器上进行性能评测是一个很好的选择、但另一个选择是在以下链接所述的调试会话中使用 CCS 时钟功能。 这样,您只能配置 DELAY_US()调用。

    processors.wiki.ti.com/.../Profiling_on_C28x_Targets

    C2000Ware 中的以下 FIR 示例适用于 F2837x、但可以为 F2833x 提供起点。
    C:\ti\c2000Ware_1_00_03_00\libraries\dsp\FPU\c28\examples\filter\2837x_fir

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

    尊敬的 Elizabeth:

    谢谢、

    我得到了它,因此 F28335无法使用 FIR

    我想使用 ADC 来检测电感器电流,以便进行零电流检测和实时过流保护(开关频率为100kHz 时逐周期)。

    零电流检测(ZCD),如果电感器电流变为负值,则必须立即关闭低侧 MOSFET (< 1uS)
    过流保护(OCP),如果电感器电流过大,则必须立即关闭高侧 MOSFET (< 1uS)。

    我将 ePWM1A 和 ePWM1B 用于高侧和低侧 MOSFET、并使用 AdcRegs.ADCRESULT2来检测100kHz 电感器电流

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

    通过移植我在上一篇文章中提到的 F2837x 示例、您仍然应该能够在 F2833x 上实现 FIR。

    关于电感器电流使用案例、如果您已经参阅了 controlSUITE/C2000Ware 中的技术用户指南和软件示例、但仍有其他问题、我建议您在新帖子中添加有关您所面临问题或外设功能特定问题的更多详细信息。 这会将您的帖子发送给有关该主题的专家、我们也可以根据主题更好地对帖子进行排序和跟踪。

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

    Elizabeth、您好!

    抱歉,我将开始2个主题,分别是电感器电流功能和 FIR。

    但是 DELAY_US 实现“INTERRUPT void epwm1_TIMER_ISR (void)”是错误的计时器。 但是,它不适合在 ZCD 或 OCP 上实施。

    谢谢。

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

    如果您正在寻找二阶实现、则可以从 C2000Ware 中的数字控制库中获取 DF22补偿器、如下所示:

     C:\ti\c2000\C2000Ware_1_00_03_00\libraries\control\DCL\c28

    这些是浮点 C28x 函数、您可以将其添加到 F28335项目中。  

    此致、

    Richard

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