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/LAUNCHXL-F28379D:TMS320F28379D

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/868937/ccs-launchxl-f28379d-tms320f28379d

器件型号:LAUNCHXL-F28379D

工具/软件:Code Composer Studio

我的目标是生成50kHz 频率、60%占空比的方波。 我尝试配置引脚以生成输出。 但我无法在示波器上获得输出。 我提到了这些例子,但仍然有问题。 请帮我处理该代码。

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

    我不能完全理解您遇到的问题... 您只需设置 TBPRD 和 CMPA 即可生成波形、

    这是适用于您的应用的最简单的 PWM 代码。 针对周期和占空比对其进行修改。

    //########################################################################################################################
    //
    /// Nima Eskandari
    //
    ////##########################################################################################################
    
    
    
    //
    //包含的文件
    //
    #include "driverlib.h"
    #include "device.h"
    
    #define ePWM_TIMER_TBPRD 2000
    
    //
    函数原型
    //
    void initEPWM (uint32_t ePWM_base);
    
    __interrupt void epwm1ISR (void);
    
    //
    Main
    //
    main (void)
    {void)
    //
    //初始化设备时钟和外设
    //
    device_init();
    
    //
    //禁用引脚锁定并启用内部上拉。
    //
    DEVICE_initGPIO();
    
    //
    //初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
    //
    interrupt_initModule();
    
    //
    //使用指向 shell 中断的指针初始化 PIE 矢量表
    //服务例程(ISR)。
    //
    interrupt_initVectorTable();
    
    //
    //将中断服务例程分配给 ePWM 中断
    //
    INTERRUPT_REGISTER (INT_EPWM1、epwm1ISR);
    
    //
    //将 GPIO0/1配置为
    // ePWM1A/1B 引脚
    //
    GPIO_setPadConfig (0、GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig (GPIO_0_EPWM1A);
    GPIO_setPadConfig (1、GPIO_PIN_TYPE_STD);
    GPIO_setPinConfig (GPIO_1_EPWM1B);
    
    //将 XBAR 输入从使用 GPIO0更改为使用 GPIO0
    //如果启用了 ePWM SYNCIN,EXTSYNCIN1和 EXTSYNCIN2将使用
    // GPIO0 (即 EPWM1的输出)。
    //选择和未使用的 GPIO
    Xbar_setInputPin (XBAR_INPUT5、50);
    Xbar_setInputPin (XBAR_INPUT6、50);
    
    //
    //禁用同步(也冻结 PWM 的时钟)
    //
    SYSCTL_DisablePeripheral (SYSCTL_Periph_CLK_GTBCLKSYNC);
    SYSCTL_DisablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);
    
    //
    //初始化没有相移的 PWM1作为主器件
    //
    initEPWM (EPWM1_base);
    
    //
    //启用到 PWM 的同步和时钟
    //
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);
    
    
    //启用 ePWM 中断
    //
    INTERRUPT_ENABLE (INT_EPWM1);
    
    //
    //启用全局中断(INTM)和实时中断(DBGM)
    //
    EINT;
    ERTM;
    
    //
    //空闲循环。 只需坐下来循环(可选):
    //
    
    for (;;)
    {
    
    }
    }
    
    //
    // epwm1ISR - ePWM 1 ISR
    //
    __interrupt void epwm1ISR (void)
    {
    
    //
    //清除此计时器的 INT 标志
    //
    ePWM_clearEventTriggerInterruptFlag (EPWM1_BASE);
    
    //
    //确认中断组
    //
    interrupt_clearACKGroup (interrupt_ACK_Group3);
    }
    
    void initEPWM (uint32_t ePWM_base)
    {
    //
    //设置 TBCLK
    //
    ePWM_setTimeBasePeriod (ePWM_base、ePWM_TIMER_TBPRD);
    ePWM_setPhaseShift (ePWM_base、0U);
    ePWM_setTimeBaseCounter (ePWM_base、0U);
    
    //
    //设置比较值
    //
    ePWM_setCounterCompareValue (ePWM_base、
    ePWM_COUNTER_COMPARE_A、
    ePWM_TIMER_TBPRD*3/5);
    ePWM_setCounterCompareValue (ePWM_base、
    ePWM_COUNTER_COMPARE_B、
    ePWM_TIMER_TBPRD*3/5);
    
    //
    //设置计数器模式
    //
    ePWM_setTimeBaseCounterMode (ePWM_base、ePWM_COUNTER_MODE_UP);
    ePWM_DisablePhaseShiftLoad (ePWM_base);
    ePWM_setClockPrescaler (ePWM_base、
    ePWM_CLOCK 分频器_8、
    ePWM_HSCLOCK_DEVIDER_1);
    
    //
    //设置隐藏
    //
    ePWM_setCounterCompareShadowImage LoadMode (ePWM_base、
    ePWM_COUNTER_COMPARE_A、
    ePWM_COMP_LOAD_ON_CNTR_ZERO);
    ePWM_setCounterCompareShadowImage LoadMode (ePWM_base、
    ePWM_COUNTER_COMPARE_B、
    ePWM_COMP_LOAD_ON_CNTR_ZERO);
    
    //
    //设置操作
    //
    
    ePWM_setActionQualifierAction (ePWM_base、
    ePWM_AQ_OUTPUT A、
    ePWM_AQ_OUTPUT 高电平、
    ePWM_AQ_output_on_timebase_zero);
    
    
    ePWM_setActionQualifierAction (ePWM_base、
    ePWM_AQ_OUTPUT _B、
    ePWM_AQ_OUTPUT 高电平、
    ePWM_AQ_output_on_timebase_zero);
    
    ePWM_setActionQualifierAction (ePWM_base、
    ePWM_AQ_OUTPUT A、
    ePWM_AQ_OUTPUT 低电平、
    ePWM_AQ_output_on_timebase_up_CMPA);
    ePWM_setActionQualifierAction (ePWM_base、
    ePWM_AQ_OUTPUT _B、
    ePWM_AQ_OUTPUT 低电平、
    ePWM_AQ_output_on_timebase_up_CMPB);
    
    
    //
    //中断,我们将在其中更改比较值
    //选择 INT on 时基计数器零事件,
    //启用 INT,在发生第1个事件时生成 INT
    //
    ePWM_setInterruptSource (ePWM_base、ePWM_INT_TBCTR_ZERO);
    ePWM_enableInterrupt (ePWM_base);
    ePWM_setInterruptEventCount (ePWM_base、1U);
    }